【问题标题】:Stripe PHP API : You cannot confirm this PaymentIntent because it's missing a payment methodStripe PHP API:您无法确认此 PaymentIntent,因为它缺少付款方式
【发布时间】:2021-02-27 14:12:59
【问题描述】:

我正在尝试实现 Stripe PHP API,但从上周开始我就陷入了困境。 起初我以为我没有以正确的符号方式正确提及付款方式。 然而,情况似乎并非如此。

我创建了一个包装类,它加载所有条带 API 文件并处理我所需的所有调用。

这就是代码布局的原因。

当我执行我的脚本时,我收到以下错误:

致命错误:未捕获(状态 400)(请求 req_AQbkjKFB4mo31Z)您 无法确认此 PaymentIntent,因为它缺少付款 方法。您可以使用付款方式更新 PaymentIntent 然后再次确认,或者直接付款再次确认 方法。投入 /var/www/vhosts/example.com/httpdocs/stripe/stripe/lib/Exception/ApiErrorException.php 第 38 行

我已经联系了 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));
}

我希望有人能指出我的错误。因为我完全被困在这里了。

【问题讨论】:

标签: php stripe-payments


【解决方案1】:

您正在设置payment_method_types,它决定了此付款意图接受哪些类型的付款方式。为了确认和收款,您需要提供具体的payment_method。您可以自己直接提供,但我建议使用 Stripe.js and Elementscollect the iDEAL payment details。在服务器上创建付款意图后,您会将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 Intent上设置payment_method并确认。

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2022-11-08
    • 2021-05-17
    • 2023-04-11
    相关资源
    最近更新 更多