Как получить charge id после создания подписки с помощью 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
.
5 ответов
это точно полоса это!--10--> для. После создания клиента с первоначальной подпиской вы получите шесть уведомлений webhook:
-
customer.created
, с данными клиента (которые у вас уже есть, если вы сохраняете то, что возвращает API) -
charge.succeeded
(илиcharge.failed
),который содержит начальные данные заряда, которые вы ищете -
invoice.created
, который является соответствующим счет -
invoice.payment_succeeded
(илиinvoice.payment_failed
), также сообщая вам статус заряда -
customer.card.created
, с деталями новой карты -
customer.subscription.created
, С деталями подписки клиента.
API Stripe, как и многие API и многие платежные решения, построен для использования с webhooks. Если вы не пользуетесь webhooks, вам будет не хватать функциональности, и вы, вероятно, слишком много работаете для того, что можно сделать без веб-крючков.
Stripe работает, чтобы доставить вам данные. Если вы пишете код для опроса полосы, вы работаете слишком усердно.
Я только что столкнулся с той же проблемой. Я использую библиотеку python, но ответ больше касается API Stripe, чем языка, на котором находится клиент.
в конечном счете, поскольку я создаю нового клиента с каждой подпиской, я смог найти счет-фактуру против customer_id и захватить его идентификатор заряда. Вот как выглядит код python для этого:
stripe_api.Invoice.all(customer=subscribe_result['customer'])['data'][0]['charge']
опять же, обратите внимание, что этот метод не будет работать, если вы повторно использовать клиентам, только при создании нового клиенты с каждой подпиской создают.
Это, конечно, не идеален. Было бы намного лучше, если бы идентификатор заряда был включен в возврат. Даже зная идентификатор счета-фактуры, по крайней мере, решит проблему повторного использования клиентов, хотя для получения счета все равно потребуется ненужный вызов API.
Ну, нет прямого способа сделать это. Однако есть хак, чтобы получить charge_id
для этого subscription
в ожидании invoice.payment_succeeded
callback
.
вот как я сделал в 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
столкнулся с этим вопросом при поиске способа извлечения идентификатора подписки в Java. Оказывается, новая версия API (1.7.1 для Java) имеет поле ID, встроенное прямо в объект подписки. То же самое, вероятно, верно и для PHP API.
Я застрял над той же проблемой, проведя некоторое время, оказывается, довольно просто.
Шаг 1: Вызов получить все счета API с идентификатор подписки в качестве параметра.
пример в PHP:
$invoice = \Stripe\Invoice::all(array("subscription" => your_subscription_id));
на $invoice
вы получите идентификатор заряда, и, следовательно, вы можете получить все после этого.