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

问题描述:

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

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

如何纠正呢?

这段代码应该在服务器端运行。在贝宝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正常工作,并且如果您的代码在浏览器中运行,则您将向任何浏览器客户端公开证书。这将允许任何客户能够对您的帐户执行任何操作(例如,退还您的所有付款)。

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

+0

你是对的!当我在DOS命令行中运行包含来自节点运行时环境的API代码的javascrip文件时,它完美地工作。感谢您的参考。感谢您的帮助@jannis! –