【发布时间】: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 ..也许有人可以启发我?
【问题讨论】: