0

我正在将 PayUmoney 支付网关集成到我的 MEAN 堆栈应用程序中。我正在获取从角度控制器到节点的每个必填字段,并且还生成了哈希键。之后,我不会重定向到“ https://test.payu.in/_payment ”。我试过如下

应用程序.js

router.post('/buyItem',function(req,res){
    var KEY = "OygoFs";
    var SALT = "BV1QBwCv";

    var shasum = crypto.createHash('sha512'),
        reqData = req.body;
        dataSequence = KEY + '|' + reqData.txnid + '|' + reqData.amount + '|' + reqData.productinfo + '|' + reqData.firstname + '|' + reqData.email + '|||||||||||' + SALT;
        resultKey = shasum.update(dataSequence).digest('hex');
    res.redirect('https://test.payu.in/_payment');
});

当我运行这个错误来了。

XMLHttpRequest cannot load http://locahost:3000/api/buyItem. Redirect from 'http://locahost:3000/api/buyItem' to 'https://test.payu.in/_payment' has been blocked by CORS policy: Request requires preflight, which is disallowed to follow cross-origin redirect.
4

2 回答 2

0

在 payUmoney 本身授权您之前,您的 NodeJs-Express 无法向 payu money 发送请求,这就是您收到 CORS 错误的原因,CORS 意味着 - 跨域资源共享这意味着当您尝试访问 www。示例 1 .com 来自 www。示例 2 .com。

所以这个问题的解决方案是你必须在你重定向到的 PayUmoney 服务器中设置 CORS 过滤器。您不能只将其发送到已部署的任何服务器或应用程序,因为它们总是禁用 CORS 过滤器以采取安全措施。如果你想检查你的重定向功能,这就是你可以做的,让另一个 NodeJs 服务器运行,它正在监听 API 调用。并在 app.js(服务器端)中添加这些行:

    app.all('/*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "GET, POST, PUT");
    next();
});

注意:其中 app 是对 express 的引用 (var app = require('express');)。

现在重定向到这个新创建的 NodeJs 应用程序,您的重定向功能肯定会起作用。

希望这会有所帮助,问候肖希尔

于 2016-11-23T11:50:48.300 回答
0

您需要将重定向 URL 配置为白名单资源,以确保用于采购 Angular 模板的 URL 是安全的。

app.config(['$sceDelegateProvider', function($sceDelegateProvider) {
         $sceDelegateProvider.resourceUrlWhitelist(['self', 'https://test.payu.in/_payment/**']);

}]);

来自文档:https : //docs.angularjs.org/api/ng/provider/$sceDelegateProvider

于 2016-11-23T11:30:34.883 回答