Как создать платежный отступ для платежной карты с помощью 3D Secure на полосе размещенного счета

Нет проблем, когда я создаю сеансовый платеж, не могу сделать второй платеж, когда требуется аутентификация, не понимаю подход, когда Stripe должен отправить письмо клиенту со ссылкой для подтверждения, ссылка ведет на страницу, размещенную на Stripe как в Документах

При запросе с SCA требуемой карты я получил ошибку карты (authorization_required).

        $intent = PaymentIntent::create([
            'amount'               => 1100,
            'currency'             => 'usd',
            'payment_method_types' => ['card'],
            'customer'             => $customerId,
            'payment_method'       => $paymentMethodId,
            'off_session'          => true,
            'confirm'              => true,
        ]);

Я нашел этот подход здесь. Настройте параметры на панели инструментов Stripe для электронной почты. Может быть, это должно быть отношение к API счетов, но я не вижу потока в документах.

Ожидается успешное создание PaymentIndent со статусом require_confirmation. Письмо отправлено клиенту с кнопкой подтверждения.

1 ответ

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

Передать намерение для этой функции (код сервера)

    const generate_payment_response = (intent) => {
    if (
      intent.status === 'requires_action' &&
      intent.next_action.type === 'use_stripe_sdk'
    ) {
      // Tell the client to handle the action
      return {
        requires_action: true,
        payment_intent_client_secret: intent.client_secret
      };
    } else if (intent.status === 'succeeded') {
      // The payment didn’t need any additional actions and completed!
      // Handle post-payment fulfillment
      return {
        success: true
      };
    } else {
      // Invalid status
      return {
        error: 'Invalid PaymentIntent status'
      }
    }
  };

Запросить дополнительное безопасное 3D-всплывающее окно (Front-End Code)

function handleServerResponse(response) {
    console.log(response, "handling response");

    if (response.data.success) {
      // Show error from server on payment form
      alert("Paymemt successful");

    } else if (response.data.requires_action) {
        alert("require additional action");
        // Use Stripe.js to handle required card action
        stripe.handleCardAction(
            response.data.payment_intent_client_secret
            ).then(function(result) {
                if (result.error) {
                    // Show error in payment form
                } else {
                    // The card action has been handled
                    // The PaymentIntent can be confirmed again on the server
                    let data = {
                        payment_intent_id: result.paymentIntent.id 

                    }
                    axios.post(`${baseUrl}/confirmPayment`, data).then(response => {
                        handleServerResponse(response);
                    });
                }
            }).catch(error => {
                console.log(error, "error");

                alert("rejected payment");
            })
        } else {
            // Show failed
            alert("Failed transaction");
            alert(response.data.message);
            console.log(response.data, "error during payment confirmation");
    }
  }
Другие вопросы по тегам