首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我有一次性收费的时候,我如何处理一个支付意向的Stripe网络钩子?

当我有一次性收费的时候,我如何处理一个支付意向的Stripe网络钩子?
EN

Stack Overflow用户
提问于 2020-06-09 16:45:49
回答 1查看 1.5K关注 0票数 5

我在一个有订阅和一次性收费的应用程序中使用Stripes PHP。

我正在通过网络钩子跟踪以下事件:

代码语言:javascript
复制
// Handle the event
switch ($event->type) {
    // Fired for every payment, including subscriptions and one-offs
    case 'payment_intent.succeeded':
        $payment = $event->data->object;
        $this->handleOneOffPaymentSuccess($payment);
        break;
    // When a one-off payment fails
    case 'charge.failed':
        $payment = $event->data->object;
        $this->handleOneOffPaymentFailed($payment);
        break;
    case 'payment_intent.payment_failed':
        $payment = $event->data->object;
        $this->handleOneOffPaymentFailed($payment, 'The payment was not authorized (#Virtuoso-3)');
        break;
    // Subscription handling
    case 'invoice.payment_succeeded':
        $payment = $event->data->object;
        $this->handleSubscriptionPaymentSuccess($payment);
        break;
    // Subscription failure
    case 'invoice.payment_failed':
        $payment = $event->data->object; 
        $this->handleSubscriptionPaymentFailed($payment);
        break;
    // ... handle other event types
    default:
        // Unexpected event type
        http_response_code(400);
        exit();
}

当一次性付款时,我会得到一个payment_intent.succeeded。这有我的元字段数据,所以我可以标记项目为购买。一切都很好。

当我订阅时,我会得到一个invoice.payment_succeeded事件。这里面有我的元字段数据,所以我可以将订阅标记为已付费。一切都很好。

但是,除了订阅之外,我还得到了一个payment_intent.succeeded事件。我想这是因为有人指控我。我不介意,但它不包含我创建订阅时的任何元字段数据,因此我无法跟踪它的用途。目前,它只是失败,这似乎不对。

下面是我创建订阅的方式:

代码语言:javascript
复制
$subscription = \Stripe\Subscription::create([
    'customer' => $payment_method->stripe_customer_id, 
    'items' => [
        [
            'plan' => App::environment('production') ? $user->userType->stripe_plan : $user->userType->stripe_plan_test,
        ],
    ],
    'expand' => ['latest_invoice.payment_intent'],
    'metadata' => [
        'internal_subscription_id' => $internalSubscription->id,
        'user_id' => $user_id,
    ]
]);

理想情况下,我希望user_id成为收费的一部分,然后我就可以对用户进行登录,并将其与一次性收费一起显示给他们。

你知道我要去哪里吗?

EN

回答 1

Stack Overflow用户

发布于 2020-06-09 19:03:47

你有几个选择:

  1. 检查invoice 支付意图对象上的。这将被设置为与订阅付款相关的发票ID,而对于一次性支付则为null。注意:如果您也使用一次性发票,您也需要处理这个区别(检索发票并检查subscription属性)。
  2. 在一次性付款计划上设置一些metadata。例如,在事件处理程序中设置'metadata' => [ 'onetime' => 'true']并检查它。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62287698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档