首页 > 解决方案 > 如何为 Stripe/PHP 指定 MOTO(邮购电话订单)?

问题描述

我正在努力弄清楚如何使用 Stripe API 和 PHP 指定 MOTO 付款。我相信我在payment_method_optionsconfirm(javascript)中指定了MOTO,并且我必须在create(PHP)中指定confirm = true。我正在努力从这里获取示例以与 MOTO 一起使用,尽管没有它也可以正常工作。

script.js(我添加payment_method_options: { card: {moto:true} })到confirmCardPayment...

var pay = function(stripe, card, clientSecret) {
    changeLoadingState(true);

    // Initiate the payment.
    // If authentication is required, confirmCardPayment will automatically display a modal
    stripe
        .confirmCardPayment(clientSecret, { payment_method: { card: card }, payment_method_options: { card: {moto:true} } })
        .then(function(result) {
            if (result.error) {
                // Show error to your customer
                showError(result.error.message);
            } else {
                // The payment has been processed!
                orderComplete(clientSecret);
            }
        });
};

confirm-intent.php我指定 confirm=true 并包含payment_method在输出中...

use Stripe\PaymentIntent;
use Stripe\Stripe;

require '../vendor/autoload.php';

header('Content-Type: application/json');

Stripe::setApiKey('sk_test_xxxxxxxxxxxxx');

$paymentIntent = PaymentIntent::create([
   'amount' => 2000,
   'currency' => 'gbp',
   'payment_method_types' => ['card'],
   'confirm' => true
]);

$output = [
    'publishableKey' => 'pk_test_xxxxxxxxxxxxx',
    'clientSecret' => $paymentIntent->client_secret,
    'payment_method' => $paymentIntent->id,
];

echo json_encode($output);

我目前得到的错误是......

PHP 消息:PHP 致命错误:未捕获(状态 400)(请求 req_1D9UTDO2IIp8zI)您无法确认此 PaymentIntent,因为它缺少付款方式。您可以使用付款方式更新 PaymentIntent,然后再次确认,也可以直接使用付款方式再次确认。

我认为付款方式是付款意图的ID。我已将其放入付款意图脚本的输出中,但这不起作用。有任何想法吗?谢谢你。

标签: phpstripe-payments

解决方案


如果要进行MOTO条带支付,有以下要求:

  1. 您需要直接使用条纹激活 MOTO 付款选项。
  2. 您需要执行一个支付操作,这是一个确认=true 的 paymentIntent。在这种情况下,先使用 confirmCardPayment 进行 paymentIntent 是行不通的。

在这种情况下,paymentIntent 操作如下所示:(以下是 curl 请求,您可以将其转换为您的后端语言)

curl https://api.stripe.com/v1/payment_intents \
  -u sk_test_NfCI7U9wkvqjrgJRFirEuwjN \
  -d amount=1099 \
  -d currency=eur \
  -d "payment_method_data[type]"=card \
  -d "payment_method_data[card][number]"=4242424242424242 \
  -d "payment_method_data[card][exp_month]"=4 \
  -d "payment_method_data[card][exp_year]"=24 \
  -d "payment_method_data[card][cvc]"=242 \
  -d "payment_method_options[card][moto]"=true \
  -d confirm=true

它将返回错误或成功的付款结果,您可以将其用于进一步的操作。

或者,您可以先创建 paymentMethod,然后使用 paymentMethod ID 确认意图(避免直接发送卡详细信息并使用条带卡输入 UI 元素)。在此处首先查看有关如何创建付款方式的更多信息:https ://stripe.com/docs/payments/accept-a-payment-synchronously#create-a-paymentmethod

如果这样做,您的 MOTO API 调用将如下所示:

curl https://api.stripe.com/v1/payment_intents \
  -u sk_test_NfCI7U9wkvqjrgJRFirEuwjN \
  -d amount=1099 \
  -d currency=eur \
  -d "payment_method"=<YOUR paymentMethodID> \
  -d "payment_method_options[card][moto]"=true \
  -d confirm=true

推荐阅读