2017-05-04 122 views
0

後,我加入快速結帳按鈕,我的網頁和設置服務器端程序與客戶端代碼:PayPal快速結帳重載頁面付款

<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創建通過和支付過程通用的處理程序和它的工作正常,但在支付執行被調用後,整個頁面被重新加載。

我想通過執行監聽器處理結果/錯誤 - 使用.then()和.catch()方法定義的paypal.request.post(EXECUTE_PAYMENT_URL,...)回調函數。

對於PayPal的交互式演示https://developer.paypal.com/demo/checkout/#/pattern/server偵聽器按預期工作。

感謝您的建議。

+0

您是否看到任何控制檯錯誤?這不應該重定向或重新加載頁面。 – bluepnume

+0

不,我不知道。但是,當我在CREATE_PAYMENT_URL腳本中使用正確的redirect_urls時,其行爲與預期相同。詳細內容在我對這個問題的回答。 –

回答

0

問題是我在創建支付處理程序(CREATE_PAYMENT_URL)中使用了默認的redirect_urls,因爲我不需要它們 - 響應由JavaScript監聽器處理。但redirect_urls是Payment對象的必需參數。但是,似乎這些重定向和取消網址並不需要是正確的,只有服務器端口應該響應。

我的服務器端代碼如下所示:

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)時,可以將付款方式更改爲綁定到Paypal中這些帳戶的信用卡。我爲這兩個測試使用相同的沙箱帳戶。

謝謝。