使用 nodejs、angularjs 和 paypal sdk 付款结果 cors 错误

Posted

技术标签:

【中文标题】使用 nodejs、angularjs 和 paypal sdk 付款结果 cors 错误【英文标题】:Make payment with nodejs, angularjs and paypal sdk results cors error 【发布时间】:2018-07-08 06:45:45 【问题描述】:

我正在尝试使用 paypal sdk 进行付款。 我的前端是angularjs,后端是nodejs。

在我的前端,我只是在我的节点服务器中调用一个路由:

$http.post('/paypal/pay', cart)

我在节点服务器中配置了 CORS。

CORS 问题发生在“res.redirect”行中。

我还将 CORS 也配置到 paypal 配置的标题中以尝试解决问题,但没有成功。

我正在 localhost 中使用 nodejs 测试 paypal 支付。

当我尝试付款时,我收到下一个错误:

我做错了什么?

//错误

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-YYYYYY: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

//节点服务器

const express = require('express');
const app = express();
const PaypalAPI=require('./routes/paypal-checkout');     
app.all('*', function(req, res, next)  
      res.setHeader('Access-Control-Allow-Origin', '*');
      res.setHeader('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
      res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
      next();
    );


app.use('/paypal',PaypalAPI)

var server = app.listen(app.get('port'), function () 
            console.log('Servidor rodando em ' +app.get('host') + ' Porta: '+app.get('port'));
);

//节点路由器 - paypal-checkout.js

const express = require('express');
const paypal = require('paypal-rest-sdk');
const router = express.Router();
paypal.configure(
  'mode': 'sandbox', //sandbox or live
  'client_id': 'XXXX',
  'client_secret': 'YYYYYY',
  'headers' : 
     'Access-Control-Allow-Origin': '*',
     'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
     'Access-Control-Allow-Headers': 'Content-Type, Authorization'
    
);

router.post('/pay', (req, res) => 
  const create_payment_json = 
    "intent": "sale",
    "payer": 
        "payment_method": "paypal"
    ,
    "redirect_urls": 
        "return_url": "http://localhost/paypal/success",
        "cancel_url": "http://localhost/paypal/cancel"
    ,
    "transactions": [
        "item_list": 
            "items": [
                "name": "Red Sox Hat",
                "sku": "001",
                "price": "25.00",
                "currency": "BRL",
                "quantity": 1
            ]
        ,
        "amount": 
            "currency": "BRL",
            "total": "25.00"
        ,
        "description": "Hat for the best team ever"
    ]
;

paypal.payment.create(create_payment_json, function (error, payment) 
  if (error) 
      throw error;
   else 
      for(let i = 0;i < payment.links.length;i++)
        if(payment.links[i].rel === 'approval_url')
          res.redirect(payment.links[i].href);
        
      
  
);

);

【问题讨论】:

【参考方案1】:

我也遇到了这个问题。虽然这对于 OP 来说可能已经晚了,但我想指出这是浏览器中的一个问题。答案已发布before,但这里又是选项:

    关闭 CORS 使用chrome extension 设置反向代理

【讨论】:

以上是关于使用 nodejs、angularjs 和 paypal sdk 付款结果 cors 错误的主要内容,如果未能解决你的问题,请参考以下文章

在哪里以及如何将 nodejs 与 angularjs 一起使用

在 AngularJS 和 Nodejs 之间共享代码

使用 Angularjs 和 Nodejs 从 HTML 表单另存为 JSON 文件

如何使用 PostgreSQL 将数据从 AngularJS 前端传递到 Nodejs 后端?

如何使用 NodeJS + AngularJS 从文件中删除一些奇怪的错误

使用 AngularJS 和外部 NodeJS 服务器启用 html5 模式