【问题标题】:Paypal Express checkout reloads page after payment付款后 Paypal Express 结帐重新加载页面
【发布时间】:2017-05-04 15:15:12
【问题描述】:

我在页面中添加了快速结帐按钮,并使用客户端代码设置了服务器端进程:

<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 通过通用处理程序创建和处理支付,它工作正常,但在调用支付执行后,整个页面被重新加载。

我想通过执行侦听器处理结果/错误 - paypal.request.post(EXECUTE_PAYMENT_URL, ...) 使用 .then() 和 .catch() 方法定义的回调。

对于https://developer.paypal.com/demo/checkout/#/pattern/server 上的 PayPal 交互式演示,侦听器按预期工作。

感谢您的建议。

【问题讨论】:

  • 您是否看到任何控制台错误?这不应重定向或重新加载页面。
  • 不,我不知道。但是,当我在 CREATE_PAYMENT_URL 脚本中使用正确的 redirect_urls 时,它的行为符合预期。我对这个问题的回答中的详细信息。

标签: javascript .net paypal


【解决方案1】:

问题是我在创建支付处理程序 (CREATE_PAYMENT_URL) 中使用了默认的 redirect_urls,因为我不需要它们 - 响应由 JavaScript 侦听器处理。但是 redirect_urls 是 Payment 对象的必需参数。但是,似乎那些重定向和取消 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) 时,有可能将付款方式更改为绑定到 Paypal 中这些帐户的信用卡。我对这两个测试使用相同的沙盒帐户。

谢谢。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 2011-07-18
    • 2021-01-26
    • 2018-07-18
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多