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

时间:2013-12-30 22:49:24

标签: php codeigniter paypal omnipay

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

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

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

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

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

3 个答案:

答案 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);
}

否则您可能会获得boolsend();

答案 2 :(得分:0)

最新版本的OmniPayisPending课程中有一个Response方法,您可以使用该方法检查付款是否有待处理。

如果您看到可能reasons的付款状态正在等待处理,其中一些可能会导致付款失败。

E.g。

  • paymentreview
  • regulatory_review
  • 电子支票。

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