Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用omnipay检查它是否';这是不是一笔待付款_Php_Codeigniter_Paypal_Omnipay - Fatal编程技术网

Php 如何使用omnipay检查它是否';这是不是一笔待付款

Php 如何使用omnipay检查它是否';这是不是一笔待付款,php,codeigniter,paypal,omnipay,Php,Codeigniter,Paypal,Omnipay,我使用Omnipay 2.1和CodeIgniter 2.1.4来接收Paypal付款 我使用此行完成购买并检查付款是否已发送: $bool = $gateway->completePurchase(array('amount' => $total, 'currency' => 'EUR')) ->send() ->isSuccessful(); 但是我注意到,如果付款处于挂起状态,方法issuscc

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

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

$bool = $gateway->completePurchase(array('amount' => $total, 'currency' => 'EUR'))
                ->send()
                ->isSuccessful();
但是我注意到,如果付款处于挂起状态,方法
issusccessful()
也将返回
true


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

我认为您不应该链接
issusccessful()
fn。尝试发送(),然后检查网关的响应:

$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);
}

否则,您可能会收到
send()
等的
bool

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

[ACK] => Success
[PAYMENTINFO_0_CURRENCYCODE] => EUR
[PAYMENTINFO_0_PAYMENTSTATUS] => Pending
[PAYMENTINFO_0_PENDINGREASON] => multicurrency
因此,付款已成功处理,但处于“挂起”状态。Omnipay没有明确检查这一点,但我不确定这是否明智。从客户的角度来看,付款是成功的,钱已经离开了他们的账户

查看付款信息的等待原因:

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


因此,基本上,付款是成功的,它被搁置的唯一原因是您正在以一种货币(欧元)向客户收费您尚未在PayPal帐户中明确启用。

最新版本的
OmniPay
响应
类中有一个
isPending
方法,您可以使用该方法检查付款是否挂起

如果您看到付款状态可能处于挂起状态,其中一些可能会导致付款失败

例如

  • 工资审查
  • 监管审查
  • 埃切克

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

谢谢,但它会给我
true
,即使
$response
包含
挂起的
。也许我不能用Omnipay这样做,我必须手动检查它。
print\r($response->getData())
返回什么?所以我想我必须检查
PAYMENTINFO\u 0\u PAYMENTSTATUS
是否等于
Completed