执行贝宝付款后如何重定向?

Posted

技术标签:

【中文标题】执行贝宝付款后如何重定向?【英文标题】:How to redirect after an execution of a paypal payment? 【发布时间】:2020-02-05 01:26:20 【问题描述】:

我按照说明如何使用 SDK API 从 PayPal (https://developer.paypal.com/docs/checkout/integrate/) 添加智能支付按钮。一切正常,只是在付款执行后我无法重定向买家。

html页面中的JS代码如下:

paypal.Buttons(
        createOrder: function (data, actions) 
            return actions.order.create(
                purchase_units: [
                    amount: 
                        value: price
                    
                ]
            );
        ,
        onApprove: async function (data, actions) 
            return actions.order.capture().then(function (details) 
                alert('success!');
                return fetch('/paypal-transaction-complete', 
                    method: 'post',
                    headers: 
                        'content-type': 'application/json'
                    ,
                    body: JSON.stringify(
                        orderID: data.orderID,
                    )
                );
            );
        
    ).render('#paypal-button-container');

在服务器端,我使用异步函数执行它并使用箭头函数等待承诺:

app.post('/paypal-transaction-complete', function (req, res) 
    paypalRequestHandler.handleRequest(req, res)
        .then(() => 
            res.redirect('/'); // not working
        ).catch(err => 
        console.log(err);
        res.sendStatus(500);
    );
);

我想知道为什么它不重定向,我可以执行 console.log() 之类的操作,但它不会重定向买家。

【问题讨论】:

【参考方案1】:

回答我自己的问题:在服务器端得到promise后,应该向客户端返回一个响应码,然后在客户端可以更改页面的位置。所以在我的情况下,它在服务器端看起来像这样:

app.post('/paypal-transaction-complete', function (req, res) 
    paypalRequestHandler.handleRequest(req, res)
        .then(() => 
            res.sendStatus(200);
        ).catch(err => 
        console.log(err);
        res.sendStatus(500);
    );
);

在客户端:

paypal.Buttons(
        createOrder: function (data, actions) 
            return actions.order.create(
                purchase_units: [
                    amount: 
                        value: price
                    
                ]
            );
        ,
        onApprove: async function (data, actions) 
            return actions.order.capture().then(function (details) 
                alert('success!');
                const responsePromise = fetch('/paypal-transaction-complete', 
                    method: 'post',
                    headers: 
                        'content-type': 'application/json'
                    ,
                    body: JSON.stringify(
                        orderID: data.orderID,
                    )
                );
                responsePromise.then(function (responseFromServer) 
                    if(responseFromServer.status === 200) 
                        location.href = 'success_page';
                     else 
                        alert('smth went wrong');
                         location.href = '/';
                        )
                    

                );
            );
        
    ).render('#paypal-button-container');

【讨论】:

以上是关于执行贝宝付款后如何重定向?的主要内容,如果未能解决你的问题,请参考以下文章

自动重定向说明

成功支付宝付款后无法重定向商家网站

贝宝定期付款重定向到贝宝的主页

使用 IPN 方法的 Paypal 付款在付款后未重定向

Magento:支付完成后,paypal 标准支付未重定向到 Magento 成功页面

Paypal - 付款后重定向到我自己的页面