我正在努力弄清楚如何使用 Stripe API 和 PHP 指定 MOTO 付款。我相信我在确认 (javascript) 上的 payment_method_options
中指定了 MOTO,并且我必须在创建 (PHP) 中指定confirm = true。我正在努力从 here 获取示例与 MOTO 一起工作,尽管没有 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 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 支付,有以下要求:
- 您需要直接使用 stripe 激活 MOTO 支付选项。
- 您需要执行一次付款操作,即确认 = 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/