3

我正在使用 Omnipay 2.1 和 CodeIgniter 2.1.4 来接收 Paypal 付款。

我使用此行完成购买并检查是否已发送付款:

$bool = $gateway->completePurchase(array('amount' => $total, 'currency' => 'EUR'))
                ->send()
                ->isSuccessful();

但我注意到,如果付款处于待处理状态,该方法isSuccessful()也会返回。true

我如何使用omnipay 来检查它是否是待付款?

4

3 回答 3

6

查看您的原始响应数据,重要的几行是:

[ACK] => Success
[PAYMENTINFO_0_CURRENCYCODE] => EUR
[PAYMENTINFO_0_PAYMENTSTATUS] => Pending
[PAYMENTINFO_0_PENDINGREASON] => multicurrency

因此付款已成功处理,但处于Pending状态。Omnipay 没有明确检查这一点,但我不确定这是否明智。从客户的角度来看,付款成功,钱已经离开他们的账户。

查看PayPal APIPAYMENTINFO_0_PENDINGREASON文档:

多币种 – 您在发送的币种中没有余额,并且您没有将收款偏好设置为自动转换并接受此付款。您必须手动接受或拒绝此付款。

所以基本上付款是成功的,它待定的唯一原因是您以您未在您的 PayPal 帐户中明确启用的货币 (EUR) 向客户收费。

于 2014-01-02T23:27:19.240 回答
0

我相信你不应该链接isSuccessful()fn。然后尝试send()检查来自网关的响应:

$response = $gateway->purchase(['amount' => '10.00', 'currency' => 'USD')->send();

if ($response->isSuccessful()) {
    // payment was successful: update database
    print_r($response);
} else {
    // debug etc;
    print_r($response);
}

否则你可能会得到一个boolforsend()等;

于 2013-12-30T23:49:13.037 回答
0

最新版本的类中OmniPay有一个isPending方法Response,您可以使用它来检查付款是否处于待处理状态。

如果您看到付款状态处于待处理状态的可能原因,其中一些可能会导致付款失败。

例如

  • 付款审查
  • 监管审查
  • 电子支票。

我建议在检查之前发货或确认订单不是一个好主意,这不会依赖于自身isSuccessful返回的响应方法true

于 2016-05-04T13:16:21.867 回答