首页 > 解决方案 > 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));
}

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

标签: phpstripe-payments

解决方案


您正在设置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付款意图并确认它。


推荐阅读