PayPal REST SDK 未在 execute() 上返回正确状态

Posted

技术标签:

【中文标题】PayPal REST SDK 未在 execute() 上返回正确状态【英文标题】:PayPal REST SDK not returning proper status on execute() 【发布时间】:2013-06-05 09:33:32 【问题描述】:

我正在使用 PayPal REST SDK 进行 PayPal 付款。完成购买并调用 executePayment() 方法时,支付对象的状态没有更新,仍然显示 created 而不是 approved

付款正常进行,如果我在执行后立即查看购买,我会得到预期的批准状态:

$paypal = new PayPal;
$payment = $paypal->executePayment($order_id, $payer_id);
echo $payment->getState(); // "created"

$lookup = Payment::get($order_id, getApiContext());
echo $lookup->getState(); // "approved"

(这里是来自 PayPal 类的相关方法..)

Class PayPal  

    public function executePayment($paymentId, $payerId) 
    
        $payment = Payment::get($paymentId, getApiContext());
        $paymentExecution = new PaymentExecution;
        $paymentExecution->setPayer_id($payerId);   
        $payment->execute($paymentExecution, getApiContext());  

        return $payment;
    

在 PayPal 披萨应用上,executePayment 方法完美运行,返回的 Payment 对象立即显示“已批准”状态..

$payment = executePayment($order['payment_id'], $_GET['PayerID']);
echo $payment->getState(); // "approved"

我的 executePayment() 是the exact, verbatim, code from the pizza app,唯一的区别是我把它放到了一个类中。

那是什么?为什么我不能立即从 executePayment() 方法中获得“批准”?

编辑:

进一步检查,PayPal 比萨应用程序使用的是 rest-api-sdk-php v 0.6.*,但实际的 rest api sdk 版本为 0.7.*

Payment::execute() 方法已更改。在 v0.6 中,它返回 $this 支付对象,如下所示:

class Payment extends PPModel implements IResource 
    ...
    public function execute( $payment_execution, $apiContext=null) 
        ...
        $json = $call->execute( array('PayPal\Rest\RestHandler'),
        $this->fromJson($json);
        return $this;       
    

但现在在 v0.7 中,它正在创建一个新的支付对象并设置新对象的值,这似乎无法正常工作..

class Payment extends PPModel implements IResource 
    ...
    public function execute( $payment_execution, $apiContext=null) 
        ...
        $ret = new Payment();
        $ret->fromJson($json);
        return $ret;
    

所以.. 如果您将这些更改恢复为 v0.6 中的内容而不是 $ret 它可以工作.. 不确定创建新 Payment() 的原因是什么;虽然对象与返回 $this ..也许有人可以启发我?

【问题讨论】:

【参考方案1】:

Paypal 沙盒无法完成订单,我遇到了问题。

我能够在不修改 paypal api 代码的情况下解决此问题。

为 xxx-facilitator@xxx 帐户登录沙盒帐户。 单击菜单项 > 个人资料 - 更新电子邮件 点击“确认”,表示已经确认,但现在可以了。

还要确保在开发者选项“完成测试付款之前查看它们”。设置为关闭。

【讨论】:

【参考方案2】:

在 0.7 中进行更改的原因是,您之前获得的状态是因为一个错误。

当您执行 get Payment 时,您将获得一个付款对象。以前,当您运行执行时,它会再次填充对象,而不会重置它。因此,您可以执行 getStatus,但未在 Execute 方法中返回。当您拨打电话时,它已经在那里了。

我希望这可以帮助您了解更改。

【讨论】:

以上是关于PayPal REST SDK 未在 execute() 上返回正确状态的主要内容,如果未能解决你的问题,请参考以下文章

PayPal REST API (PHP SDK) 成功交易未在沙盒模式下显示,在实时模式下显示

贝宝 sdk '类 'PayPal\Rest\ApiContext' 未找到'

使用 paypal-rest-sdk 时出错。请帮助我

PayPal REST SDK 已弃用

使用 PayPal REST SDK 和 PayPal-Python-SDK 时未发送或接收资金

使用 paypal/rest-api-sdk-php 的 laravel paypal 集成错误