我正在使用Omnipay 2.1和CodeIgniter 2.1.4来接收PayPal付款。
我使用此行完成购买并检查付款是否已发送:
$bool = $gateway->completePurchase(array('amount' => $total, 'currency' => 'EUR'))
->send()
->isSuccessful();
但我注意到,如果付款处于待处理状态,方法isSuccessful()
也会返回true
。
如何使用omnipay检查是否为待付款?
答案 0 :(得分:6)
查看原始响应数据,重要的一行是:
[ACK] => Success
[PAYMENTINFO_0_CURRENCYCODE] => EUR
[PAYMENTINFO_0_PAYMENTSTATUS] => Pending
[PAYMENTINFO_0_PENDINGREASON] => multicurrency
因此付款已成功处理,但处于Pending
状态。 Omnipay没有明确检查这一点,但我不确定无论如何都是明智的。从客户的角度来看,付款是成功的,而且资金已经离开了他们的帐户。
查看PAYMENTINFO_0_PENDINGREASON
的{{3}}:
多种货币 - 您发送的货币没有余额,并且您没有将“付款接收首选项”设置为自动转换并接受此付款。您必须手动接受或拒绝此付款。
所以基本上付款是成功的,唯一的原因就是您正在向您的PayPal帐户中未明确启用的货币(EUR)收取费用。
答案 1 :(得分: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);
}
否则您可能会获得bool
等send()
;
答案 2 :(得分:0)
最新版本的OmniPay
在isPending
课程中有一个Response
方法,您可以使用该方法检查付款是否有待处理。
如果您看到可能reasons的付款状态正在等待处理,其中一些可能会导致付款失败。
E.g。
我建议在检查之前发送或确认订单不是一个好主意,这不会依赖于自己返回isSuccessful
的响应true
方法。