如何在使用Stripe创建订阅后获取费用?

dav*_*xie 12 php stripe-payments

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",
));
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但我不能Charge ID$customer,我发现有一个在没有办法Stripe API得到它.

如何在创建订阅时获取它?我真的需要Charge ID.

col*_*inm 21

这正是Stripe的webhooks所针对的.创建初始订阅的客户后,您将收到六个webhook通知:

  1. customer.created,使用客户数据(如果您保存API返回的内容,则已有)
  2. charge.succeeded(或charge.failed),其中包含您要查找的初始费用数据
  3. invoice.created,这是相关的发票
  4. invoice.payment_succeeded(或invoice.payment_failed),也告诉你收费的状态
  5. customer.card.created,以及新卡的详细信息
  6. customer.subscription.created,以及客户订阅的详细信息.

像许多API和许多支付解决方案一样,Stripe的API可以与webhooks一起使用.如果你没有利用webhooks,那么你将失去功能,而且如果没有webhooks,你可能会努力工作.

Stripe可以为您提供数据.如果您正在编写代码来轮询Stripe,那么您的工作方式太难了.

  • 看起来像charge.succeeded的webhook回调不像其他通知那样包含subscription_id.如何将charge.succeeded电话与原始订阅相关联,而无需在卡和客户上进行加入,因为这些不保证是唯一的? (4认同)

小智 7

我自己也遇到了同样的问题.我正在使用python库,但答案更多的是关于Stripe的API而不是客户端所使用的语言.

最终,由于我正在为每个订阅创建一个新客户,我能够针对customer_id查找发票并获取其费用ID.这是python代码的样子:

stripe_api.Invoice.all(customer=subscribe_result['customer'])['data'][0]['charge']
Run Code Online (Sandbox Code Playgroud)

同样,请注意,如果您重新使用客户,只有在创建每个订阅的情况下创建新客户时,此方法才会起作用.

这当然不理想.如果收费标识包含在回报中会好得多.即使知道发票ID也至少可以解决重新使用客户的问题,尽管它仍然需要不必要的API调用才能获取发票.