Laravel Cashier: Возобновление одного платежа

после успешной оплаты я сохраняю идентификатор полосы в таблице mysql. С этим идентификатором я хотел бы получить все данные, хранящиеся в базе данных полос.

Так можно ли возобновить разовый платеж по страйпу?

Спасибо


person J03Bukowski    schedule 10.11.2015    source источник
comment
Вы сказали, что хотели бы возобновить одиночный платеж — означает ли это, что вы хотели бы выполнить разовую оплату во второй раз, или это означает, что вы хотели бы возобновить тарифный план, который вы настроили?   -  person user3089840    schedule 10.11.2015
comment
единовременный платеж, а затем возобновить детали для этого платежа .. нет подписки   -  person J03Bukowski    schedule 10.11.2015
comment
Итак, вы хотите получить все данные, хранящиеся в базе данных Stripe, после внесения 1 платежа? Вы не пытаетесь сделать 2-й заряд?   -  person user3089840    schedule 10.11.2015
comment
да, я не хочу делать вторую зарядку. Только возобновить детали   -  person J03Bukowski    schedule 10.11.2015


Ответы (1)


Вот документация, которую вам необходимо использовать: https://stripe.com/docs/api/php#retrieve_customer

Используйте вызов API Stripe «получение клиента», чтобы получить сведения о покупке клиента:

 Stripe::setApiKey(Config::get('your_stripe_secret_key_here'));
 $customer_object = Customer::retrieve(customers_stripe_id);

Это вернет следующий JSON:

Stripe\Customer JSON: {
  "id": "cus_7KJZQ8Z6jfSSMl",
  "object": "customer",
  "account_balance": 0,
  "created": 1447172728,
  "currency": "usd",
  "default_source": "card_175evz2eZvKYlo2CKoS2WEDk",
  "delinquent": false,
  "description": "Bingo|www|0c1234567890",
  "discount": null,
  "email": null,
  "livemode": false,
  "metadata": {
  },
  "shipping": null,
  "sources": {
    "object": "list",
    "data": [
      {
        "id": "card_175evz2eZvKYlo2CKoS2WEDk",
        "object": "card",
        "address_city": null,
        "address_country": null,
        "address_line1": null,
        "address_line1_check": null,
        "address_line2": null,
        "address_state": null,
        "address_zip": null,
        "address_zip_check": null,
        "brand": "Visa",
        "country": "US",
        "customer": "cus_7KJZQ8Z6jfSSMl",
        "cvc_check": "pass",
        "dynamic_last4": null,
        "exp_month": 5,
        "exp_year": 2016,
        "funding": "credit",
        "last4": "4242",
        "metadata": {
        },
        "name": null,
        "tokenization_method": null
      }
    ],
    "has_more": false,
    "total_count": 1,
    "url": "/v1/customers/cus_7KJZQ8Z6jfSSMl/sources"
  },
  "subscriptions": {
    "object": "list",
    "data": [

    ],
    "has_more": false,
    "total_count": 0,
    "url": "/v1/customers/cus_7KJZQ8Z6jfSSMl/subscriptions"
  }
}

Вот версия вызова API в Stripe:

\Stripe\Stripe::setApiKey("your_secret_key");
\Stripe\Customer::retrieve("the_customers_id");

Обязательно импортируйте классы \Stripe, добавив это вверху вашей модели или контроллера:

use Stripe\Customer;
use Stripe\Stripe;

если вы хотите использовать "Stripe" вместо префиксов \Stripe\Stripe и \Stripe\Customer)

person user3089840    schedule 10.11.2015
comment
но это не Laravel Cashier - person J03Bukowski; 10.11.2015
comment
Это работает, и, насколько я могу судить, Laravel Cashier не предлагает решения. - person user3089840; 10.11.2015
comment
Если бы вы хотели, чтобы Laravel Cashier сделал это за вас, то он по-прежнему делал бы то же самое, что и выше, просто оборачивая его в пользовательскую функцию с другим именем. - person user3089840; 10.11.2015
comment
Таким образом, более полно использовать чистый php с полосой, чем Laravel Cashier. - person J03Bukowski; 10.11.2015
comment
Работа с Stripe напрямую убирает ненужный дополнительный слой с Cashier. Единственным преимуществом Cashier является то, что он упрощает выполнение некоторых общих задач по сравнению с прямой работой с API, но, как мы с вами обнаружили, Cashier не делает все. Он может не делать вышеперечисленное, потому что это довольно просто. Несколько месяцев назад я потратил довольно много времени на чтение большого количества кода Cashier, пытаясь понять, как можно сделать вышеописанное, но я так и не нашел его, а затем я просто сделал это сам напрямую с помощью API, и это оказалось быть не таким уж и плохим. - person user3089840; 10.11.2015
comment
Я обнаружил, что Cashier использует Customer::retrieve в общедоступной функции getStripeCustomer в классе StripeGateway. Но две строки кода выше проще и понятнее, чем пытаться взломать это :) - person user3089840; 10.11.2015
comment
Например, в вашей модели после импорта используйте Laravel\Cashier\Contracts\Billable как BillableContract; и используйте Laravel\Cashier\StripeGateway; и реализуя BillableContract, вы можете использовать Cashier следующим образом: $billableObject = auth()-›user()-›setLastFourCardDigits(auth()-›user()-›last_four); $customer_details = (новый StripeGateway($billableObject))->getStripeCustomer(auth()->user()->stripe_id); но это как-то нелепо. Я просто использую метод setLastFourCardDigits, потому что он возвращает $billableObject (для $billableObject нет простой функции получения) - person user3089840; 10.11.2015
comment
Возможно, стоит добавить, что вы можете использовать любой из методов Cashier в vendor/laravel/cashier/src/Laravel/Cashier/Billable.php с вашей моделью пользователя при условии, что вы настроили свою модель пользователя для ее реализации, то есть довольно сложный. Таким образом вы можете получить множество отдельных фрагментов данных из Stripe, но вам придется вызывать метод для доступа к каждому отдельному фрагменту информации. То, как я первоначально показал вам в своем ответе выше, сразу же дает вам все данные в одном объекте. - person user3089840; 10.11.2015
comment
Я только что нашел интересный пакет для laravel: cartalyst.com/manual/stripe/2.0 - person J03Bukowski; 10.11.2015
comment
Хороший! Cashier и тому подобное, как правило, добавляют некоторые функции проверки ошибок, но на самом деле вы можете создавать свои собственные теперь, когда знаете, как напрямую взаимодействовать с API Stripe. Мне нравится избавляться от посредников, когда это возможно, так как это снижает уровень сложности. - person user3089840; 10.11.2015