php - Stripe PHP API:您无法确认此 PaymentIntent,因为它缺少付款方式
问题描述
我正在尝试实现 Stripe PHP API,但自上周以来我被困住了。起初我以为我没有以正确的符号方式正确提及付款方式。然而,情况似乎并非如此。
我创建了一个包装类,它加载所有条带 API 文件并处理我所需的所有调用。
因此,这就是代码布局的原因。
当我执行我的脚本时,我收到以下错误:
致命错误:未捕获(状态 400)(请求 req_AQbkjKFB4mo31Z)您无法确认此 PaymentIntent,因为它缺少付款方式。您可以使用付款方式更新 PaymentIntent,然后再次确认,也可以直接使用付款方式再次确认。在第 38 行抛出 /var/www/vhosts/example.com/httpdocs/stripe/stripe/lib/Exception/ApiErrorException.php
我已经联系了 Stripe 帮助台,但是他们一直向我介绍他们的手册,但这也没有让我更进一步。
iDeal 付款方式已在其仪表板中启用。所以这不是失败的原因。它可能是我设置付款的方式。但就我而言,我没有正确设置付款方式。但据我所知,他们的手册已经相应地完成了。
此外,我找不到任何有关使用检索调用的确认文档。我应该这样做吗?或者这只是双重和不需要的。
public function create_payment($amount, $order_id, $method = 'ideal', $return_url = NULL, $currency = 'eur'){
///######## CHECK IF CURRENCY IS ALLOWED
if(!$this->currency_supported($currency)) exit('<strong>error</strong>, stripe currency not supported : '.$currency);
///######## SETUP PAYMENT
$result = $this->obj->paymentIntents->create(
array(
'amount' => $amount,
'currency' => $currency,
'payment_method_types' => array($method)
)
);
///######## IF ERROR
if(!is_object($result) || !isset($result->id)) exit('<strong>error</strong>, something went wrong during stripe payment intend creation');
///######## SETUP PAYMENT ID
$payment_id = $result->id;
///######## RETRIEVE PAYMENT INTEND DETAILS
$result = $this->obj->paymentIntents->retrieve($payment_id, []);
///######## SET AN ORDER ID
$result = $this->obj->paymentIntents->update($payment_id, array(
'metadata' => array(
'order_id' => $order_id,
),
'payment_method_types' => array($method),
));
///######## SETUP PARAMETRES
$params = array('payment_method_types' => array($method));
///######## IF THE RETURN URL HAS BEEN SET
if($return_url) $params['return_url'] = $return_url;
///######## CONFIRM A PAYMENT INTEND
$result = $this->obj->paymentIntents->confirm($payment_id, $params);
exit(print_r($result));
}
我希望有人能指出我的错误。因为我完全被困在这里。
解决方案
您正在设置payment_method_types
,它决定了此付款意图接受哪些类型的付款方式。为了确认和收款,您需要提供具体的payment_method
. 您可以自己直接提供,但我建议使用Stripe.js 和 Elements来收集 iDEAL 付款详细信息。在服务器上创建付款意图后,您将发送client_secret
回您的客户端并将其与收集的详细信息一起使用:
HTML:
<div id="ideal-bank-element">
<!-- A Stripe Element will be inserted here. -->
</div>
JS:
var idealBank = elements.create('idealBank', options);
idealBank.mount('#ideal-bank-element');
...
stripe.confirmIdealPayment(
'{{PAYMENT_INTENT_CLIENT_SECRET}}',
{
payment_method: {
ideal: idealBank,
billing_details: {
name: accountholderName.value,
},
},
return_url: 'https://your-website.com/checkout/complete',
}
);
像这样使用confirmIdealPayment
将自动设置payment_method
付款意图并确认它。
推荐阅读
- html - 如何从右侧缩进文本?
- react-native - Expo android构建到脚本中
- flask - SQLAlchemy/Flask MSSQL Query 在 Apache 下运行时无限期挂起
- php - 类名必须是有效的对象或字符串
- c# - 如何在 C# 中为私有集设置值
- jpa - 如果 id 不在数据库中,如何在 Transaction-Scoped Persistence 上下文中找到它
- cordova - 无法在表中插入记录
- spring-boot - Spring Boot JMS Producer 中的错误:AMQ212054 目标地址被阻止
- javascript - 使用 lodash 合并数组
- mitmproxy - 在 mitmweb 中不保存捕获数据