【问题标题】:How to make Stripe Checkout V3 SCA ready如何准备好 Stripe Checkout V3 SCA
【发布时间】:2020-01-11 14:19:21
【问题描述】:

我正在使用以下脚本通过 Stripe checkout V3 进行付款。我希望这将使我的付款准备好 SCA,但是我被告知我的付款仍未准备好 SCA。我是否缺少下面的一些代码?

            var stripe = Stripe('XXXX');
            var elements = stripe.elements();
            var card = elements.create('card', {
                style: style
            });
            // Add an instance of the card Element into the `card-element` <div>
            card.mount('#card-element');
            // Handle real-time validation errors from the card Element.
            card.addEventListener('change', function (event) {
                var displayError = document.getElementById('card-errors');
                if (event.error) {
                    displayError.textContent = event.error.message;
                } else {
                    displayError.textContent = '';
                }
            });
            // Handle form submission
            var form = document.getElementById('payment-form');
            form.addEventListener('submit', function (event) {
                event.preventDefault();
                stripe.createToken(card).then(function (result) {
                    if (result.error) {
                        // Inform the user if there was an error
                        var errorElement = document.getElementById('card-errors');
                        errorElement.textContent = result.error.message;
                    } else {
                        stripeTokenHandler(result.token);
                    }
                });
            });
            // Send Stripe Token to Server
            function stripeTokenHandler(token) {
                // Insert the token ID into the form so it gets submitted to the server
                var form = document.getElementById('payment-form');
                // Add Stripe Token to hidden input
                var hiddenInput = document.createElement('input');
                hiddenInput.setAttribute('type', 'hidden');
                hiddenInput.setAttribute('name', 'stripeToken');
                hiddenInput.setAttribute('value', token.id);
                form.appendChild(hiddenInput);
                // Submit form
                form.submit();
            }

这是我的收费代码...

\Stripe\Stripe::setApiKey('XXXX');
  $error = '';
  $success = '';
  try {
    if (!isset($_POST['stripeToken']))
    throw new Exception("The Stripe Token was not generated correctly");
   $charge = \Stripe\Charge::create(
    array(
    'amount' => $_POST['stripeAmount'],
    'currency' => 'gbp',
    'source' => $_POST['stripeToken'],
    "receipt_email" => $_SESSION["email"],
    'description' => 'Booking - ' . $_SESSION['description'],
)
   );

【问题讨论】:

  • 虽然您可以使用 Card (id: card_*****) 和 PaymentIntents,但我建议您关注 stripe.com/docs/payments/payment-intents/web
  • 谢谢,卡ID是如何工作的?
  • 通常当你标记一张卡片(将那个标记保存给客户)你会得到一个card_***对象,它可以用作PaymentIntent.payment_method
  • 我想我现在明白你的意思了。我需要更多地担心实际的收费方面,就像我上面修改过的代码一样。

标签: php jquery stripe-payments


【解决方案1】:

要符合 SCA,您需要使用 paymentIntents API

您当前的代码表明您正在使用charges-api。 有完整的迁移指南here

基本上你需要替换来自客户端的调用:

stripe.createToken(card)

与:

stripe.createPaymentMethod(
  'card',
  cardElement
)

并从以下位置调用服务器:

$charge = \Stripe\Charge::create([
    'source' => $json_obj->token_id,
    'amount' => 1099,
    'currency' => 'eur',
]);

$intent = \Stripe\PaymentIntent::create([
    'payment_method' => $json_obj->payment_method_id,
    'amount' => 1099,
    'currency' => 'eur',
    'confirmation_method' => 'manual',
    'confirm' => true,
]);

之后,您需要按照here 的说明处理可能的其他操作

【讨论】:

  • 可以给我你的邮箱吗?或者这里不允许发邮件?
  • 如果您对我的回答或我提供的链接有具体问题 - 您可以在此处发布,我会尽力回复
猜你喜欢
  • 2021-03-18
  • 2020-06-26
  • 1970-01-01
  • 2020-07-04
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2017-12-14
相关资源
最近更新 更多