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

时间:2013-06-09 16:44:37

标签: php rest paypal

我正在使用PayPal REST SDK进行PayPal付款。完成购买并调用executePayment()方法时,付款对象的状态不会更新,仍然会显示已创建,而不是已批准

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

$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 = 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。*但实际的休息api sdk,版本为0.7。*

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

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()的原因是什么;对象vs返回$ this虽然..也许有人可以启发我?

2 个答案:

答案 0 :(得分:2)

我遇到了没有完成订单的paypal沙箱的问题。

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

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

还要确保开发者选项'在完成之前审核测试付款。'设置为关闭。

答案 1 :(得分:0)

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

当您获得付款时,您会收到付款对象。以前,当您运行execute时,它会再次填充对象,而不会重置它。因此,您可以执行getStatus,但在Execute方法中未返回。当你接到电话时,它已经存在了。

我希望这有助于您了解变化。