2017-05-04 5 views
0

後、私は自分のページにエクスプレスチェックアウトボタンを追加し、セットアップサーバ側プロセスをクライアントコードで:ペイパルエクスプレスチェックアウトをリロードページ支払

<script src="https://www.paypalobjects.com/api/checkout.js"></script> 
<script> 
    var CREATE_PAYMENT_URL = "<create_payment_url>"; 
    var EXECUTE_PAYMENT_URL = "<execute_payment_url>"; 

    paypal.Button.render({ 
     env: "sandbox", 
     payment: function (resolve, reject) { 
      return paypal.request.post(CREATE_PAYMENT_URL) 
       .then(function (data) { 
        resolve(data.id); 
       }) 
       .catch(function (err) { 
        reject(err); 
       }); 
     }, 
     onAuthorize: function (data) { 
      return paypal.request.post(EXECUTE_PAYMENT_URL, { paymentID: data.paymentID, payerID: data.payerID }) 
       .then(function (data) { 
        document.querySelector('#paypal-button').innerText = 'Payment Complete!'; 
        console.log("Success", data); 
       }) 
       .catch(function (err) { 
        console.log("Error", err); 
       }); 
     } 
    }, "#paypal-button"); 
</script> 

私は経由で作成するために、サーバー側.NET SDKを使用して、プロセスの支払いジェネリックハンドラは正常に動作しますが、支払い実行が呼び出された後、ページ全体がリロードされます。

実行リスナ--perp.request.post(EXECUTE_PAYMENT_URL、...)でコールバックを処理したい場合は、.then()メソッドと.catch()メソッドで定義します。

https://developer.paypal.com/demo/checkout/#/pattern/serverのPayPalのインタラクティブデモのリスナーは、期待通りに動作します。

ありがとうございます。

+0

コンソールエラーはありますか?これは、ページのリダイレクトやリロードを行うべきではありません。 – bluepnume

+0

いいえ、私はしません。しかし、私がCREATE_PAYMENT_URLスクリプトで正しいredirect_urlsを使用すると、期待通りに動作します。この質問に対する私の答えの詳細。 –

答えて

0

問題は、支払いリダイレクタ(CREATE_PAYMENT_URL)を作成する際にデフォルトのredirect_urlsを使用しています。なぜなら、レスポンスはJavaScriptリスナーによって処理されるからです。 redirect_urlsはPaymentオブジェクトの必須パラメータです。しかし、リダイレクトURLとキャンセルURLは正確である必要はなく、サーバーポートだけが応答する必要があります。私がお願いしたいと思い、別の質問があります

Dictionary<string, string> config = ConfigManager.Instance.GetProperties(); 
string accessToken = new OAuthTokenCredential(config).GetAccessToken(); 
APIContext apiContext = new APIContext(accessToken); 
Payer payer = new Payer() 
{ 
    payment_method = "paypal" 
}; 
RedirectUrls redirUrls = new RedirectUrls() 
{ 
    cancel_url = "http://localhost:<correct_port>/some_cancel.ashx", 
    return_url = "http://localhost:<correct_port>/some_return.ashx" 
}; 
ItemList itemList = new ItemList() 
{ 
    items = new List<Item>() { 
    // Some items 
} 
}; 
Amount amount = new Amount() 
{ 
    currency = "EUR", 
    total = "##.##", 
}; 
List<Transaction> transList = new List<Transaction>() 
{ 
    new Transaction() { 
     amount=amount, 
     description="Desc...", 
     invoice_number="#####", 
     item_list=itemList 
    } 
}; 
Payment payment = new Payment() 
{ 
    intent = "sale", 
    payer = payer, 
    transactions = transList, 
    redirect_urls = redirUrls 
}; 
Payment createdPayment = payment.Create(apiContext); 
context.Response.Write(/*<Serialized response>*/); 

:よう

私のサーバー側のコードが見えます。サンドボックス購入者のPaypalアカウントでログインすると、支払い方法を変更できません。Paypalの残高のみが利用可能です。ただし、デモ(https://developer.paypal.com/demo/checkout/#/pattern/server)を試してみると、ペイパルのアカウントにバインドされたクレジットカードに支払い方法を変更する可能性があります。私は両方のテストで同じサンドボックスアカウントを使用します。

ありがとうございました。

関連する問題