node.js paypal https请求

这里第一个问题,如果事实certificate是非常明显的道歉

我试图通过node.js调用贝宝自适应付款API,我得到一个580001无效的请求错误。 我可以用下面的消息和头文件通过curl做成功的调用,但不能通过节点。

任何帮助将非常感激。

var API_endpoint = "svcs.sandbox.paypal.com"; var API_user = ''; var API_pass = ''; var API_sig = ''; message='requestEnvelope.errorLanguage=en_US&actionType=PAY&senderEmail=test_1320882990_per@gmail.com&receiverList.receiver(0).email=test2_1320887729_biz@gmail.com& receiverList.receiver(0).amount=100.00&currencyCode=USD&cancelUrl=http://your_cancel_url& returnUrl=http://your_return_url' //var params = qs.parse(message); //params = qs.stringify(params); var req_options = { host: API_endpoint, method: 'POST', path: '/AdaptivePayments/Pay', headers: { 'Host': API_endpoint, 'Content-Type': 'application/x-www-form-urlencoded', //'Content-Type': 'text/namevalue', 'Content-Length': message.length, 'X-PAYPAL-REQUEST-DATA-FORMAT:':'NV', 'X-PAYPAL-RESPONSE-DATA-FORMAT':'NV', 'X-PAYPAL-SECURITY-USERID':API_user, 'X-PAYPAL-SECURITY-PASSWORD':API_pass, 'X-PAYPAL-SECURITY-SIGNATURE':API_sig, 'X-PAYPAL-APPLICATION-ID':'APP-80W284485P519543T' } } fs.readFile('/home/dev/.ssh/sandbox-paypal-private.pem', 'ascii', function(err, key){ fs.readFile('/home/dev/.ssh/sandbox-paypal-public.pem', 'ascii', function(err, cert){ req_options.key=key req_options.cert=cert var req = https.request(req_options, function(res){ console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.on('data', function(d){ var response = d.toString(); console.log(response) }); }); req.write(message); req.end(); req.on('error', function request_error(e) { console.log(e); }); }); }); 

我不知道这是否只是一个复制粘贴问题,但您的消息variables似乎并不包含格式正确的string。 它有空格,特殊字符不被编码。

 requestEnvelope.errorLanguage=en_US&actionType=PAY&senderEmail=test_1320882990_per@gmail.com&receiverList.receiver(0).email=test2_1320887729_biz@gmail.com&receiverList.receiver(0).amount=100.00&currencyCode=USD&cancelUrl=http://your_cancel_url& returnUrl=http://your_return_url'. 

它应该是这样的:

 requestEnvelope.errorLanguage=en_US&actionType=PAY&senderEmail=test_1320882990_per%40gmail.com&receiverList.receiver(0).email=test2_1320887729_biz%40gmail.com& receiverList.receiver(0).amount=100.00&currencyCode=USD&cancelUrl=http%3A%2F%2Fyour_cancel_url&returnUrl=http%3A%2F%2Fyour_return_url 

在你的一个头域中有一个尾随的冒号。 而不是:

'X-PAYPAL-REQUEST-DATA-FORMAT:'

你应该有:

'X-PAYPAL-REQUEST-DATA-FORMAT'