首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在订阅类型处于拖尾状态时使用条纹3d Secure进行授权

如何在订阅类型处于拖尾状态时使用条纹3d Secure进行授权
EN

Stack Overflow用户
提问于 2019-08-30 13:46:45
回答 1查看 1.2K关注 0票数 2

我想要3d-secure模式授权检查,订阅类型= trialing。

我正在跟随this link设置条带订阅。当我在没有'trial_period_days‘的情况下创建订阅时,当订阅状态变为’未完成‘时,3d-secure授权模式弹出。

但是当我传递>trial_period_days和'payment_behavior‘=> 'allow_incomplete’时,当订阅状态变为'active‘时,模式就不起作用了。

当订阅正在试用时,如何显示授权模式?我也看过这个链接https://stripe.com/docs/payments/3d-secure#manual-three-ds,但没有任何进展。

建议我实现这一点的方法。

下面是我的代码:

代码语言:javascript
复制
public function createCustomer($token) {
    \Stripe\Stripe::setApiKey(secretKey);

    $customer = \Stripe\Customer::create([
      'email' => 'any_email@domain.com',
      'source' => $token,
    ]);

    return $this->createSubscription($customer, $token);    
}

public function createSubscription($customer, $token) {
    $plan_id = $this->getPlanId();
    $payment_intent = $this->createSetupIntent($customer->id, $token);
    $subscription = \Stripe\Subscription::create([
      'customer' => $customer->id,
      'items' => [
        [
          'plan' => $plan->id, 
        ],
      ],
      'trial_period_days' => 14,
      'expand' => ['latest_invoice.payment_intent'],
      'payment_behavior' => 'allow_incomplete',
    ]);

    return [
       'subscription' => $subscription, 
       'payment_intent' => $payment_intent
    ];
}

public function createSetupIntent($customer_id, $token) {
    $client = new Client();
    $url = "https://api.stripe.com/v1/setup_intents";
    $response = $client->request('POST', $url, [
      'auth' => ['sk_test_key', ''],
      'form_params' => [
        'customer' => $customer_id,
        'payment_method_types' => ["card"],
        'payment_method_options' => [
            "card" => [
              "request_three_d_secure" => "any"
            ]
          ]
      ],
      'timeout' => 10.0
    ]);
    $setup_intent = $response->getBody()->getContents();
    return json_decode($setup_intent, true);
  }

当我将订阅设置为试用时,我也期望3d-secure授权检查模式。

EN

回答 1

Stack Overflow用户

发布于 2019-08-30 19:25:21

您正在描述的是Stripe doc中的一个场景

基本上,当您创建具有试用期的订阅时,由于不会立即付款,因此不需要3DS身份验证。

身份验证将延迟到试用期结束。

要求用户进行身份验证,以便试用期结束时不需要3DS身份验证,在创建具有试用期的订阅时,订阅将具有pending_setup_intent attribute

您可以使用该pending_setup_intent要求用户完成身份验证。您不必显式地创建设置意图。您可以做的是检查订阅中的状态。

如果订阅是trialing格式,请检查是否有pending_setup_intent,如果有,请将pending_setup_intent.client_secret传递到客户订阅您的产品的前端,然后调用Stripe.js handleCardSetup

代码语言:javascript
复制
stripe.handleCardSetup(psi.client_secret)
  .then(siResult => {
     log({siResult});
  }).catch(err => {
     log({siErr: err});
  });

卡设置完成且试用结束后,费用将不再需要再次通过3DS身份验证。

你可以使用条纹Test Card4000002500003155对于这个测试是很好的。您可以通过更新订阅来模拟试验结束。

代码语言:javascript
复制
trial_end: "now"
off_session: true // This is needed because by default, subscription update is considered on_session

希望上面的内容能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57721102

复制
相关文章

相似问题

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