3

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 を返す..多分誰かが私を啓発することができますか?

4

2 に答える 2

2

PayPal サンドボックスで注文が完了しないという問題がありました。

Paypal の API コードを変更することなく、この問題を解決できました。

  • xxx-facilitator@xxx アカウントのサンドボックス アカウントにログインします。
  • メニュー項目 > プロファイル - メールの更新をクリックします
  • 「確認」をクリックすると、すでに確認済みと表示されますが、現在は機能しています。

また、開発者向けオプション「完了前にテスト支払いを確認する」を確認してください。オフに設定されています。

于 2013-10-07T09:04:59.033 に答える
0

0.7 で変更を行った理由は、以前のステータスがバグだったからです。

get Payment を実行すると、支払いオブジェクトが取得されます。以前は、execute を実行すると、オブジェクトはリセットされずに再度埋められていました。そのため、getStatus を行うことはできましたが、それが Execute メソッドで返されませんでした。get 呼び出しを行ったとき、それはすでにそこにありました。

この変更を理解するのに役立つことを願っています。

于 2015-01-28T20:36:20.760 に答える