node.js paypal https请求
这里的第一个问题,如果这是很明显的事情,我道歉 我试图通过node.js调用paypal adaptive payments api,但收到一个580001无效请求错误。我可以使用下面的消息和标题通过curl进行成功调用,但不能通过node 任何帮助都将不胜感激node.js paypal https请求,node.js,https,ssh,paypal,Node.js,Https,Ssh,Paypal,这里的第一个问题,如果这是很明显的事情,我道歉 我试图通过node.js调用paypal adaptive payments api,但收到一个580001无效请求错误。我可以使用下面的消息和标题通过curl进行成功调用,但不能通过node 任何帮助都将不胜感激 var API_endpoint = "svcs.sandbox.paypal.com"; var API_user = ''; var API_pass = ''; var API_sig = '
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¤cyCode=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);
});
});
});
我不确定这是否只是一个复制粘贴问题,但您的消息变量似乎没有包含正确格式的字符串。它有空格,特殊字符不编码
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¤cyCode=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¤cyCode=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'
谢谢您的回复,这是一个复制粘贴问题,注释掉的函数parse和stringify负责特殊字符summ,但是注释掉的函数将编码版本存储到“params”变量,而不是消息。此外,您不能将原始message.length用作内容长度,因为编码会使其字符串变长。