订阅类型为尾时如何使用Stripe 3d Secure授权

时间:2019-08-30 05:46:44

标签: php laravel stripe-payments 3d-secure stripe-subscriptions

我想要订阅类型=试用版的3d安全模式授权检查。

我正在关注this link来设置条纹订阅。当我创建不带“ trial_period_days”的订阅时,由于订阅状态变为“不完整”,会弹出3d安全授权模式。

但是当我通过> trial_period_days和'payment_behavior'=>'allow_incomplete'时,由于订阅状态变为“活动”,模态无效。

在订阅试用期间,如何显示授权模式? 我也看到了此链接https://stripe.com/docs/payments/3d-secure#manual-three-ds,但没有任何进展。

建议我实施此方法。

这是我的代码:

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安全授权检查模式。

1 个答案:

答案 0 :(得分:0)

您所描述的是Stripe doc

中的一种情况

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

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

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

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

如果订阅位于trialing中,请检查是否有pending_setup_intent,如果存在,则将pending_setup_intent.client_secret传递到客户订阅您产品的前端,然后致电{ {1}} Stripe.js

handleCardSetup

设置卡并结束试用期后,将不太可能需要再次通过3DS身份验证进行收费。

您可以使用Stripe Test Cardstripe.handleCardSetup(psi.client_secret) .then(siResult => { log({siResult}); }).catch(err => { log({siErr: err}); }); 适合此测试。 您可以通过使用

更新订阅来模拟试用期
4000002500003155

希望以上帮助