php - 如何为 Stripe/PHP 指定 MOTO(邮购电话订购)?

标签 php stripe-payments

我正在努力弄清楚如何使用 Stripe API 和 PHP 指定 MOTO 付款。我相信我在确认 (javascript) 上的 payment_method_options 中指定了 MOTO,并且我必须在创建 (PHP) 中指定confirm = true。我正在努力从 here 获取示例与 MOTO 一起工作,尽管没有 MOTO 也能正常工作。

script.js(我将 payment_method_options: { car​​d: {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 message: PHP Fatal error: Uncaught (Status 400) (Request req_1D9UTDO2IIp8zI) You cannot confirm this PaymentIntent because it's missing a payment method. You can either update the PaymentIntent with a payment method and then confirm it again, or confirm it again directly with a payment method.

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

最佳答案

如果您想进行MOTO Stripe 支付,有以下要求:

  1. 您需要直接使用 stripe 激活 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 确认意图(以避免直接发送卡详细信息并利用 strip 卡输入 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

关于php - 如何为 Stripe/PHP 指定 MOTO(邮购电话订购)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65026747/

相关文章:

php - PHP解析/语法错误;以及如何解决它们

php - 关闭 session 而不写入或销毁它

php - 直接流式上传到 Amazon S3 时无 HTTP 响应

php - Stripe PHP 订阅 Webhook

javascript - 热用 createToken 和 stripe.js [LEGACY]

php - 向数据库添加新值,没有错误但不输入

php - 使用 PHP 发送自定义非标准 HTTP 状态代码

java - 我没有在 webhook url 中使用 stripe 获取任何事件

Python Stripe SDK 身份验证错误( key 至少包含一个空格)

paypal - 如何在 Shopify 中设置销售订阅产品的定期付款