我使用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
。
答案 0 :(得分:20)
这正是Stripe's webhooks的用途。创建初始订阅的客户后,您将收到六个webhook通知:
customer.created
,包含客户数据(如果您保存API返回的内容,则已有)charge.succeeded
(或charge.failed
),包含您正在寻找的初始费用数据 invoice.created
,即关联发票invoice.payment_succeeded
(或invoice.payment_failed
),也告诉您收费状态customer.card.created
,以及新卡的详细信息customer.subscription.created
,其中包含客户订阅的详细信息。Stripe的API与许多API和许多支付解决方案一样,可以与webhooks一起使用。如果你没有利用webhooks,那么你将失去功能,而且如果没有webhooks你可能会做得太辛苦了。
Stripe可以为您提供数据。如果您正在编写代码来轮询Stripe,那么您的工作方式太难了。
答案 1 :(得分:7)
我自己也遇到了同样的问题。我正在使用python库,但答案更多的是关于Stripe的API而不是客户端所使用的语言。
最终,由于我正在为每个订阅创建一个新客户,因此我能够针对customer_id查找发票并获取其费用ID。这是python代码的样子:
stripe_api.Invoice.all(customer=subscribe_result['customer'])['data'][0]['charge']
再次注意,如果您重新使用客户,只有在创建每个订阅的新客户时,此方法才会起作用。
这当然不太理想。如果收费标识包含在回报中会好得多。即使知道发票ID也至少可以解决重新使用客户的问题,尽管它仍然需要不必要的API调用才能获取发票。
答案 2 :(得分:1)
没有直截了当的方法来做到这一点。但是,如果charge_id
subscription
等待invoice.payment_succeeded
callback
,则会有Ruby
。
我在pseudo
中的做法,您可以将其视为PHP
代码。您可以使用API
# 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
s
"{sales_order_details.order_no}>=5 and
{sales_order_details.order_no}<=10 and
{sales_order_details.client_no}='535'"
答案 3 :(得分:1)
如果您需要立即获得费用ID并且不能等待网络挂接,可以使用的另一个选项是使用返回的订阅对象上的latest_invoice
字段。
一个python示例:
inv_id = subscription.latest_invoice
inv = stripe.Invoice.retrieve(inv_id)
charge_id = inv.charge
答案 4 :(得分:0)
在搜索如何在Java中提取订阅ID时遇到了这个问题。事实证明,新版本的API(适用于Java的1.7.1)具有内置于订阅对象中的ID字段。对于PHP API也是如此。
答案 5 :(得分:0)
花了一些时间后,我因同样的问题而陷入困境,事实证明这很简单。
第1步:使用订阅ID 作为参数,调用检索所有发票 API。
PHP示例:
$invoice = \Stripe\Invoice::all(array("subscription" => your_subscription_id));
在$invoice
中,您将获得费用ID,因此,您可以在此之后获得所有信息。