Как авторизоваться с помощью Stripe 3d Secure, когда тип подписки трейлинг

Мне нужна проверка модальной авторизации 3d-secure с подпиской type = trialing.

Я перехожу по этой ссылке, чтобы настроить полосу подписки. Когда я создаю подписку без "trial_period_days", появляется модал авторизации 3d-secure, когда статус подписки становится "неполным".

Но когда я передаю>trial_period_days и 'payment_behavior' => 'allow_incomplete', модальный режим не работает, так как статус подписки становится 'активным'.

Как я могу показать модальность авторизации, когда подписка пробует? Я тоже видел эту ссылку https://stripe.com/docs/payments/3d-secure, но прогресса нет.

Предложите мне способ реализовать это.

Вот мой код:

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 ответ

То, что вы описываете, это сценарий в Stripe doc

В основном, когда вы создаете подписку с пробным периодом, поскольку немедленной оплаты не происходит, аутентификация 3DS не требуется.

Аутентификация задерживается до конца пробного периода.

Запросить у пользователя аутентификацию, чтобы после завершения пробной версии не требовалась аутентификация 3DS, когда подписка создается с пробным периодом, подписка будет иметь pending_setup_intent атрибут

Вы могли бы использовать это pending_setup_intent попросить пользователя завершить аутентификацию. Вам не нужно создавать намерение настройки явно. Что вы можете сделать, это проверить статус в рамках подписки.

Если подписка в trialingпроверьте, есть ли pending_setup_intentесли да, переходите к pending_setup_intent.client_secret на сайт, где ваш клиент подписывается на ваш продукт, и позвоните Stripe.jshandleCardSetup

stripe.handleCardSetup(psi.client_secret)
  .then(siResult => {
     log({siResult});
  }).catch(err => {
     log({siErr: err});
  });

Когда карта настроена и пробная версия заканчивается, вероятность того, что заряд снова понадобится пройти проверку подлинности 3DS, будет меньше.

Вы можете использовать тест- полоску, 4000002500003155 хорошо для этого тестирования. Вы можете смоделировать окончание пробной версии, обновив подписку с помощью

trial_end: "now"
off_session: true // This is needed because by default, subscription update is considered on_session

Надеюсь, что выше помогает

Другие вопросы по тегам