php - 如何为 Stripe/PHP 指定 MOTO(邮购电话订单)?
问题描述
我正在努力弄清楚如何使用 Stripe API 和 PHP 指定 MOTO 付款。我相信我在payment_method_options
confirm(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。我已将其放入付款意图脚本的输出中,但这不起作用。有任何想法吗?谢谢你。
解决方案
如果要进行MOTO条带支付,有以下要求:
- 您需要直接使用条纹激活 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 确认意图(避免直接发送卡详细信息并使用条带卡输入 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
推荐阅读
- javascript - 如何将 PHP 数组索引转换为 javascript 变量
- discord - Discord Python 重写 - 广播
- python - 给出大量数字时如何解决python应用程序无响应问题
- javascript - 为什么一段时间后 Cookie 没有变化?还是返回最后一个值?
- laravel - 如何返回到分页页面?
- xcode - 我可以在安装在外置硬盘中的 Xcode 中使用颤振吗?
- data-structures - 为什么我的代码给我“形式参数列表不匹配”?
- python - 使用 Python 为 SAS 数据集生成 JSON 文件
- reactjs - 使用 React 中的 props 将图像和锚标记添加到数组中的元素
- java - 查找数组中的 K 个最小元素