使用节点js运行Paypal API时出错

时间:2017-08-24 14:33:00

标签: javascript node.js paypal webpack paypal-rest-sdk

我在名为pp.js的脚本中运行以下代码。我正在我的index.html上运行这个加载页面进行测试。我正在使用最新的webpack模块捆绑每个源文件。

    var paypal = require('paypal-rest-sdk');

    var user_config ={
        'mode': 'sandbox', //sandbox or live
        'client_id': 'xxxxxxx',
        'client_secret': 'xxxxxxx'
      }; 

    paypal.configure(user_config);

    var create_payment_json = {
        "intent": "sale",
        "payer": {
            "payment_method": "paypal"
        },
        "redirect_urls": {
            "return_url": "http://return.url",
            "cancel_url": "http://cancel.url"
        },
        "transactions": [{
            "item_list": {
                "items": [{
                    "name": "item",
                    "sku": "item",
                    "price": "1.00",
                    "currency": "USD",
                    "quantity": 1
                }]
            },
            "amount": {
                "currency": "USD",
                "total": "1.00"
            },
            "description": "This is the payment description."
        }]
    };

// TILL HERE THERE IS NO ERROR

    paypal.payment.create(create_payment_json, function (error, payment) {
        if (error) {
            console.log("There seems to be some error... I hope it can be corrected.");
            throw error;
        } else {
            console.log("Create Payment Response");
            console.log(payment);
        }
    });

当代码的最后一位运行时,paypal.payment.create(create_ ...我在浏览器的控制台中收到以下错误。

Error thrown into the console

我如何纠正这个问题?

1 个答案:

答案 0 :(得分:1)

此代码应在服务器端运行。 PayPal SDK跟踪器中的相同问题:https://github.com/paypal/PayPal-node-SDK/issues/220

引用1(来自链接的票证)

  

请参阅#149 (comment)。您似乎试图在浏览器中运行此代码,这可能是一个安全问题。如果用户有权访问您的凭据或拥有访问令牌,他们可以执行您作为商家可以执行的任何操作(例如,创建更多付款,退款等等)。

引用2(来自#149 ticket):

  

我做了一些调查。显然,此request.js:54 Uncaught Error: Invalid value for opts.mode.错误来自stream-http/request.js版本。我猜你正在尝试使用browserify并在浏览器中使用stream-http来模拟node.js的内置http模块。

     

您是否尝试在浏览器中运行此SDK代码(而不是在服务器端node.js进程中)?

     

此node.js SDK只能在安全的服务器上使用。我使用browserify的经验非常有限。除非我弄错了,否则您需要让此SDK访问您的客户端ID和客户端密码以使此​​SDK工作,如果您的代码在浏览器中运行,您将向任何浏览器客户端公开凭据。这样,任何客户都可以对您的帐户执行任何操作(例如,退还所有付款)。

     

如果只是代码的一部分打算在浏览器中运行而另一部分在服务器中,但代码全部在一个项目中,我建议将代码分成两个不同的项目{{1文件,所以你可以有单独的依赖。