Как получить идентификатор заряда после создания подписки с помощью Stripe?

Я использую Stripe в качестве платежного шлюза. Теперь меня беспокоит большая проблема.

Я использовал код ниже для создания подписки:

 <?php require_once('lib/Stripe.php'); Stripe::setApiKey(API_KEY); $token = $_POST['stripeToken']; $customer = Stripe_Customer::create(array( "card" => $token, "plan" => $_POST['plan'], "email" => "fakeuser@gmail.com", )); 

Это прекрасно работает, но я не могу получить Charge ID от $customer , и я обнаружил, что в Stripe API нет никакого способа получить его.

Как получить его при создании подписки? Мне действительно нужен Charge ID .

Related of "Как получить идентификатор заряда после создания подписки с помощью Stripe?"

Это именно то, для чего нужны веб-ссылки Stripe . После создания клиента с первоначальной подпиской вы получите шесть уведомлений в Интернете:

  1. customer.created , с данными клиента (которые у вас уже есть, если вы сохраняете то, что возвращает API)
  2. charge.succeeded (или charge.failed ), который содержит начальные данные об charge.failed , которые вы ищете
  3. invoice.created , который является связанным счетом
  4. invoice.payment_succeeded (или invoice.payment_failed ), также сообщая вам о статусе платежа
  5. customer.card.created , с информацией о новой карте
  6. customer.subscription.created , с информацией о подписке клиента.

API-интерфейс Stripe, как и многие API-интерфейсы и многие платежные решения, построен для использования с веб-камерами. Если вы не пользуетесь веб-камерами, у вас будет недостающая функциональность, и вы, вероятно, слишком много работаете над тем, что можно сделать без webhooks.

Stripe работает, чтобы доставить вам данные. Если вы пишете код для опроса Stripe, вы работаете, слишком сложно.

Я просто столкнулся с тем же вопросом. Я использую библиотеку python, но ответ больше о API Stripe, чем о том, на каком языке находится клиент.

В конечном счете, поскольку я создаю нового клиента с каждой подпиской, мне удалось найти счет-фактуру против customer_id и захватить его идентификатор платежа. Вот как выглядит код python для этого:

 stripe_api.Invoice.all(customer=subscribe_result['customer'])['data'][0]['charge'] 

Опять же, обратите внимание, что этот метод не будет работать, если вы повторно используете клиентов, только при создании новых клиентов при каждой подписке.

Это, конечно, не идеально. Было бы намного лучше, если бы идентификатор заряда был включен в возврат. Даже знание идентификатора счета, по крайней мере, решит проблему повторного использования клиентов, хотя для получения счета-фактуры по-прежнему потребуется ненужный вызов API.

Ну, нет прямого способа сделать это. Тем не менее, есть хак, чтобы получить charge_id для этой subscription не ожидая callback invoice.payment_succeeded .

Это как я сделал в Ruby , вы можете рассматривать это как pseudo . Возможно, вы можете сделать это, используя PHP API s

  # Lets not retrieve all the invoices # use filter lower_limit_date = DateTime.strptime(that_subscription.start.to_s, '%s') - 1.hour upper_limit_date = 2.hours.from_now list_object_of_all_invoices_in_range = Stripe::Invoice.all( { customer: customer_id, date: { gt: lower_limit_date.to_i, # Start TimeStamp lt: upper_limit_date.to_i # End TimeStamp } }) particular_invoice = list_object_of_all_invoices_in_range.data. keep_if { |s| s[:subscription] == that_subscription.id }.first stripe_charge_id = particular_invoice.charge # gives charge_id 

См. Структуру ListObject для Invoices

Выполнил этот вопрос во время поиска, как извлечь идентификатор подписки в Java. Оказывается, новая версия API (1.7.1 для Java) имеет поле идентификатора, встроенное прямо в объект подписки. То же самое, вероятно, верно для PHP API.