2017-02-09 8 views
0

EDIT:エクスプレスチェックアウト決済戻っても実行が成功した後、関連するリソースを空にする

@bluepnumeが、これはバグで、後に固定されるだろう、おそらく述べたように。

私のケースでは、同じことをしました(支払いの作成/支払いの実行)が、checkout.jsを使わずにREST APIを使ってサーバー側で行いましたが、今はすべてうまくいきます。

唯一の違いはcheckout.jsで生成されたオンサイトライトボックスを使用する代わりに、クライアントをPayPal($payment->getApprovalLink())にリダイレクトしていることです。

オリジナル質問:

私は基本的なクライアント統合とPayPalのエクスプレスチェックアウトを統合しました。

すべてうまく見えます。支払いはスムーズに完了し、残りのAPIリクエストとSeller's Account(サンドボックス)の両方から、完了/承認された支払いを見ることができます。

ただし、実行に成功しても支払いが完了しません。注文取り消し後にAPIから払い戻しを行いますが、支払いデータを読み終えた後、支払いのトランザクションで受領できなくなりました。

JSコード(正常に動作します):

paypal.Button.render({ 
    env: $form.find('[name="env"]').val(), 
    client: { 
     sandbox: $form.find('[name="client_id"]').val(), 
     production: $form.find('[name="client_id"]').val() 
    }, 
    locale: 'it_IT', 
    commit: true, // Optional: show a 'Pay Now' button in the checkout flow 
    payment: function() { 
     var env = this.props.env; 
     var client = this.props.client; 
     return paypal.rest.payment.create(env, client, { 
      transactions: [ 
       { 
        custom: $form.find('[name="custom"]').val(), 
        amount: { 
         total: $form.find('[name="subtotal"]').val(), 
         currency: $form.find('[name="currency_code"]').val() 
        }, 
        description: $form.find('[name="item_name"]').val(), 
       } 
      ], 
      redirect_urls: { 
       "return_url": $form.find('[name="return"]').val(), 
       "cancel_url": $form.find('[name="notify_url"]').val() 
      } 
     }); 
    }, 
    onAuthorize: function(data, actions) { 
     return actions.payment.execute().then(function() { 
      actions.payment.get().then(function(data) { 
       pjQ.$.post($form.find('[name="notify_url"]').val(), data).done(function (data) { 
        return actions.redirect(); 
       }); 
      }); 
     }); 
    }, 
    onCancel: function(data, actions) { 
     return actions.redirect(); 
    } 
}, '#paypal-button'); 

PHPコード:

$payment = \PayPal\Api\Payment::get($paymentId, $apiContext); // It's ok 
$transactions = $payment->getTransactions(); // It's ok 
$relatedResources = $transactions[0]->getRelatedResources(); // Empty... 

// I can't use the code below as $relatedResources is empty 
$sale = $relatedResources[0]->getSale(); 
$saleId = $sale->getId(); 

$sale = new \PayPal\Api\Sale(); 
$sale->setId($saleId); 

$refundedSale = $sale->refundSale($refundRequest, $apiContext); 

任意のアイデア?

答えて

0

これは既知の問題です。修正がすぐに予定されています。 https://github.com/paypal/paypal-checkout/issues/143を参照してください。

+1

私はあなたの答えを受け入れますが、修正を待つ時間がないので、checkout.jsを使わずにPayPalにリダイレクトしてサーバ側の支払いを作成し実行しました。 – enenen

+0

FYI、checkout.jsを使用することはできますが、 'onAuthorize'からのajax呼び出しでサーバー側で実行します。そのようにしても、同じページのポップアップウィンドウのメリットが得られます。 – bluepnume

+0

ええ、そうですが、クライアントの最初の要件はPayPalにリダイレクトすることでしたので、リダイレクトでも問題ありません。 – enenen

関連する問題