繁体   English   中英

如何使用omnipay检查是否为待付款

[英]How do I use omnipay to check if it's a pending payment or not

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

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

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

但我注意到,如果付款处于挂起状态,方法isSuccessful()也将返回true

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

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

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

因此付款已成功处理,但处于Pending状态。 Omnipay没有明确检查这一点,但我不确定无论如何都是明智的。 从客户的角度来看,付款是成功的,资金已经离开了他们的帐户。

查看PAYMENTINFO_0_PENDINGREASONPayPal API文档

多种货币 - 您所发送的货币没有余额,并且您没有将“付款接收首选项”设置为自动转换并接受此付款。 您必须手动接受或拒绝此付款。

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

我相信你不应该链接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);
}

否则你可能会得到一个bool for send()等;

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

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

例如

  • paymentreview
  • regulatory_review
  • 电子支票。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM