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 オブジェクトはすぐに「承認済み」の状態を示します。
$payment = executePayment($order['payment_id'], $_GET['PayerID']);
echo $payment->getState(); // "approved"
私の executePayment() は、ピザアプリの正確な、逐語的なコードです。唯一の違いは、それをクラスに入れたことです。
それで、何が得られますか?executePayment() メソッドからすぐに「承認」を得られないのはなぜですか?
編集 :
さらに調べてみると、PayPal ピザ アプリは rest-api-sdk-php v 0.6.* を使用していますが、実際の rest api sdk はバージョン 0.7.* です。
Payment::execute() メソッドが変更されました。v0.6 では、次のように $this payment オブジェクトを返します。
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;
}
}
したがって、これらの変更を $ret の代わりに v0.6 の状態に戻すと、機能します。新しい Payment(); を作成する理由がわかりません。object vs $this を返す..多分誰かが私を啓発することができますか?