付款后Paypal Express结帐重新加载页面

时间:2017-05-04 15:15:13

标签: javascript .net paypal

我将Express checkout按钮添加到我的页面并使用客户端代码设置服务器端进程:

<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听众的互动演示按预期工作。

感谢您的建议。

1 个答案:

答案 0 :(得分: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中的那些帐户的信用卡。我在两个测试中使用相同的沙盒帐户。

感谢。