首页 > 解决方案 > 使用 Stripe 时的 handleCardPayment 错误

问题描述

我目前收到错误:

stripe.handleCardPayment intent secret 的值无效:值应该是格式为 ${id} secret ${secret} 的客户端密码。您指定:pi_1FCNbuIxBpL3Mx4OJYi5hKML。

我首先从我在 Vue.js 中完成的前端向我在 Laravel 中完成的后端发出 axios 请求,这会创建一个支付意图(即 pi_1FCNbuIxBpL3Mx4OJYi5hKML)。

 StripePackage::setApiKey('sk_test_xxxxxxxxxxx');

    $intent = \Stripe\PaymentIntent::create([
        'amount' => 1099,
        'currency' => 'eur',
    ]);

    return $intent;

我将此付款意图设置为一个名为 data_secret 的全局定义数据变量,该变量在按钮中用于提交付款:

<button id='test' class='pay-with-stripe' @click='pay' type="button" style="margin-top:20px;" :data-secret="data_secret">Pay with card</button>

单击此按钮时,将调用支付方法,该方法又使用条带句柄CardPaymentMethod:

var cardButton = document.getElementById("test");
    var clientSecret = cardButton.dataset.secret;

    this.stripe.handleCardPayment(
      clientSecret, this.card, {
        payment_method_data: {
          billing_details: {name: 'Test Name'}
        }
      }
    ).

这会触发前面提到的错误。

我一直在关注此文档,但无法看到问题:https ://stripe.com/docs/payments/payment-intents/web

标签: javascriptphpstripe-payments

解决方案


Stripe.js 的handleCardPayment方法使用 PaymentIntent 的client_secret字段 [0](看起来像“pi_123_secret_123”),而不是 PaymentIntent 的 ID(即“pi_123”)。

看起来您的代码正在设置 PaymentIntent ID 而不是前端的 client_secret。

[0] https://stripe.com/docs/api/payment_intents/object#payment_intent_object-client_secret


推荐阅读