【问题标题】:Express server, paypal checkout, res.redirect and Uncaught SyntaxError: Unexpected token < in JSON at position 0Express server、paypal checkout、res.redirect 和 Uncaught SyntaxError: Unexpected token < in JSON at position 0
【发布时间】:2017-02-14 08:43:56
【问题描述】:

我正在尝试使用 Paypals 节点 SDK 按照他们的示例代码进行支付重定向:

router.post('/', (req,res,next) => {

    //create a payment: 
    var payReq = JSON.stringify({
        intent:'sale',
        payer:{
            payment_method:'paypal'
        },
        redirect_urls:{
            return_url:'http://localhost:3000/pay/payment', // this is where they get redirected after paying.
            cancel_url:'http://localhost:3000/'
        },
        transactions:[{
            amount:{
            total: req.headers.amount,
            currency:'AUD'
            },
            description:'eventID: ' + req.headers.eventid + ' userID: ' + req.headers.userid
        }]
    });

    paypal.payment.create(payReq, (error, payment) => {
        var links = {};

        if(error){
            console.log('something went wrong with paypal');
            console.error(JSON.stringify(error));
        } else {
            // Capture HATEOAS links
            payment.links.forEach(function(linkObj){
                links[linkObj.rel] = {
                    href: linkObj.href,
                    method: linkObj.method
                };
            })

            // If redirect url present, redirect user
            if (links.hasOwnProperty('approval_url')){
                //REDIRECT USER TO links['approval_url'].href
                console.log('redirecting to ' + JSON.stringify(links['approval_url']));
                var redirectUrl = JSON.stringify(links['approval_url'].href);
                res.redirect(301, redirectUrl);
            } else {
                console.error('no redirect URI present');
            }
        }
     });
});

Paypal 的授权正在工作,他们以 JSON 格式向我发送此消息,我将其用作重定向路由,该路由是从上面的语句中记录的 console.logged:

重定向到 {"href":"https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-The-token-goes-here","method":"REDIRECT"}

但在我执行 res.redirect 之后,我的浏览器控制台立即显示此错误并且没有发生重定向,它指向我的 vendor.ca6865e….bundle.js:1787 中的此代码:

t.prototype.json=function(){return"string"==typeof this._body?JSON.parse(this._body):this._body instanceof ArrayBuffer?JSON.parse(this.text()):this._body},t.prototype.text=function(){return this._body instanceof i.a?this._body.toString():this._body instanceof ArrayBuffer?String.fromCharCode.apply....

Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at e.t.json (vendor.ca6865e….bundle.js:1787)
    at e.project (main.c0aa810….bundle.js:1)
    at e._next (vendor.ca6865e….bundle.js:474)
    at e.next (vendor.ca6865e….bundle.js:1)
    at XMLHttpRequest.h (vendor.ca6865e….bundle.js:1780)
    at t.invokeTask (vendor.ca6865e….bundle.js:2950)
    at Object.onInvokeTask (vendor.ca6865e….bundle.js:854)
    at t.invokeTask (vendor.ca6865e….bundle.js:2950)
    at e.runTask (vendor.ca6865e….bundle.js:2950)
    at XMLHttpRequest.invoke (vendor.ca6865e….bundle.js:2950)


ORIGINAL STACKTRACE:
    t.handleError   @   vendor.ca6865e….bundle.js:1640
next    @   vendor.ca6865e….bundle.js:1068
e.object.i  @   vendor.ca6865e….bundle.js:1117
e.__tryOrUnsub  @   vendor.ca6865e….bundle.js:1
e.next  @   vendor.ca6865e….bundle.js:1
e._next @   vendor.ca6865e….bundle.js:1
e.next  @   vendor.ca6865e….bundle.js:1
e.next  @   vendor.ca6865e….bundle.js:35
e.emit  @   vendor.ca6865e….bundle.js:1117
t.triggerError  @   vendor.ca6865e….bundle.js:854
onHandleError   @   vendor.ca6865e….bundle.js:854
t.handleError   @   vendor.ca6865e….bundle.js:2950
e.runTask   @   vendor.ca6865e….bundle.js:2950
invoke  @   vendor.ca6865e….bundle.js:2950


SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at e.t.json (vendor.ca6865e….bundle.js:1787)
    at e.project (main.c0aa810….bundle.js:1)
    at e._next (vendor.ca6865e….bundle.js:474)
    at e.next (vendor.ca6865e….bundle.js:1)
    at XMLHttpRequest.h (vendor.ca6865e….bundle.js:1780)
    at t.invokeTask (vendor.ca6865e….bundle.js:2950)
    at Object.onInvokeTask (vendor.ca6865e….bundle.js:854)
    at t.invokeTask (vendor.ca6865e….bundle.js:2950)
    at e.runTask (vendor.ca6865e….bundle.js:2950)
    at XMLHttpRequest.invoke (vendor.ca6865e….bundle.js:2950)

【问题讨论】:

    标签: node.js express paypal


    【解决方案1】:

    Derp,是 JSON.stringify 破坏了它。事实证明没有必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2018-04-28
      • 2021-03-02
      • 2022-01-13
      • 2019-08-14
      • 2020-10-10
      相关资源
      最近更新 更多