I cannot for the life of me figure out what's going on. I'm just trying to do a basic call to PayPal's Adaptive Payments API, the Pay
call specifically. I'm trying to achieve this with node.js. I can make successful calls with curl
, but node simply refuses to work. I keep getting a 'Invalid request: {0}'
error message, errorId 580001
. I've searched for a long time for a solution, and although many people have had seemingly similar issues, their problems were different from mine, and so their solutions haven't worked.
Any help you can offer is MUCH appreciated.
Here is the response I keep getting (prettified):
{ responseEnvelope:
{ timestamp: '2012-11-05T03:50:08.216-08:00',
ack: 'Failure',
correlationId: 'b1dbb6fea8378',
build: '4110101' },
error:
[ { errorId: '580001',
domain: 'PLATFORM',
subdomain: 'Application',
severity: 'Error',
category: 'Application',
message: 'Invalid request: {0}' } ] }
Here's my node code: (Note: I'm using the request
module: https://github.com/mikeal/request)
request = require 'request'
body = JSON.stringify
actionType: "PAY"
senderEmail: "[email protected]"
receiverList:
receiver: [
email: "[email protected]"
amount: "1.00"
]
currencyCode: "USD"
feesPayer: "EACHRECEIVER"
memo: "This is a test"
cancelUrl: "http://cancelurl"
returnUrl: "http://returnUrl"
ipnNotificationUrl: "http://your_ipn_notification_url"
requestEnvelope:
errorLanguage: "en_US"
console.log body
console.log request
url: 'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay'
headers:
"X-PAYPAL-SECURITY-USERID": "happy_1349101075_biz_api1.onehappystudent.com"
"X-PAYPAL-SECURITY-PASSWORD": "1349101103"
"X-PAYPAL-SECURITY-SIGNATURE": "AFcWxV21C7fd0v3bYYYRCpSSRl31Avw12OuF33eJo9IbQpXMS6wrOp1."
"X-PAYPAL-REQUEST-DATA-FORMAT": "JSON"
"X-PAYPAL-RESPONSE-DATA-FORMAT": "JSON"
"X-PAYPAL-APPLICATION-ID": "APP-80W284485P519543T"
"Content-Type": "application/json"
body: body
, (err, res, bod) ->
console.log bod
Here's the output from running the above code:
{"actionType":"PAY","senderEmail":"[email protected]","receiverList":{"receiver":[{"email":"[email protected]","amount":"1.00"}]},"currencyCode":"USD","feesPayer":"EACHRECEIVER","memo":"This is a test","cancelUrl":"http://cancelurl","returnUrl":"http://returnUrl","ipnNotificationUrl":"http://your_ipn_notification_url","requestEnvelope":{"errorLanguage":"en_US"}}
{ readable: true,
writable: true,
headers:
{ 'X-PAYPAL-SECURITY-USERID': 'happy_1349101075_biz_api1.onehappystudent.com',
'X-PAYPAL-SECURITY-PASSWORD': '1349101103',
'X-PAYPAL-SECURITY-SIGNATURE': 'AFcWxV21C7fd0v3bYYYRCpSSRl31Avw12OuF33eJo9IbQpXMS6wrOp1.',
'X-PAYPAL-REQUEST-DATA-FORMAT': 'JSON',
'X-PAYPAL-RESPONSE-DATA-FORMAT': 'JSON',
'X-PAYPAL-APPLICATION-ID': 'APP-80W284485P519543T',
'Content-Type': 'application/json',
host: 'svcs.sandbox.paypal.com',
'content-length': 409 },
body: <Buffer 7b 22 61 63 74 69 6f 6e 54 79 70 65 22 3a 22 50 41 59 22 2c 22 73 65 6e 64 65 72 45 6d 61 69 6c 22 3a 22 68 61 70 70 79 5f 31 33 34 39 31 30 31 30 37 35 ...>,
callback: [Function],
pool: {},
dests: [],
__isRequestRequest: true,
_callback: [Function],
_events:
{ error: [Function],
complete: [Function],
pipe: { [Function: g] listener: [Function] } },
uri:
{ protocol: 'https:',
slashes: true,
host: 'svcs.sandbox.paypal.com',
hostname: 'svcs.sandbox.paypal.com',
href: 'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay',
pathname: '/AdaptivePayments/Pay',
path: '/AdaptivePayments/Pay',
port: 443 },
_redirectsFollowed: 0,
maxRedirects: 10,
followRedirect: true,
followAllRedirects: false,
redirects: [],
setHost: true,
originalCookieHeader: undefined,
_jar: undefined,
port: 443,
host: 'svcs.sandbox.paypal.com',
clientErrorHandler: [Function],
_parserErrorHandler: [Function],
path: '/AdaptivePayments/Pay',
httpModule:
{ Server: { [Function: Server] super_: [Object] },
createServer: [Function],
globalAgent:
{ options: {},
requests: {},
sockets: {},
maxSockets: 5,
_events: [Object],
createConnection: [Function: createConnection] },
Agent: { [Function: Agent] super_: [Object] },
request: [Function],
get: [Function] },
agentClass:
{ [Function: Agent]
super_: { [Function: Agent] super_: [Function: EventEmitter], defaultMaxSockets: 5 } },
agent:
{ options: {},
requests: {},
sockets: {},
maxSockets: 5,
_events: { free: [Function] },
createConnection: [Function: createConnection] } }
{"responseEnvelope":{"timestamp":"2012-11-05T03:50:08.216-08:00","ack":"Failure","correlationId":"b1dbb6fea8378","build":"4110101"},"error":[{"errorId":"580001","domain":"PLATFORM","subdomain":"Application","severity":"Error","category":"Application","message":"Invalid request: {0}"}]}
Here's the successful curl
:
curl -s --insecure \
-H "X-PAYPAL-SECURITY-USERID: happy_1349101075_biz_api1.onehappystudent.com" \
-H "X-PAYPAL-SECURITY-PASSWORD: 1349101103" \
-H "X-PAYPAL-SECURITY-SIGNATURE: AFcWxV21C7fd0v3bYYYRCpSSRl31Avw12OuF33eJo9IbQpXMS6wrOp1." \
-H "X-PAYPAL-REQUEST-DATA-FORMAT: JSON" \
-H "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON" \
-H "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" \
-H "host: svcs.sandbox.paypal.com" \
https://svcs.sandbox.paypal.com/AdaptivePayments/Pay -d '{
"actionType":"PAY",
"senderEmail":"[email protected]",
"receiverList":{
"receiver":[{
"email":"[email protected]",
"amount":"1.00"
}]
},
"currencyCode":"USD",
"feesPayer":"EACHRECEIVER",
"memo":"This is a test",
"cancelUrl":"http://cancelurl",
"returnUrl":"http://returnUrl",
"ipnNotificationUrl":"http://your_ipn_notification_url",
"requestEnvelope":{
"errorLanguage":"en_US"
}
}'
And here's the response: (prettified for your convenience)
{ responseEnvelope:
{ timestamp: '2012-11-05T03:40:10.613-08:00',
ack: 'Success',
correlationId: 'abaf5b13c5515',
build: '4110101' },
payKey: 'AP-4B1870921M506553S',
paymentExecStatus: 'COMPLETED' }
Again, any help you can offer is MUCH appreciated.
not sure if you have pasted your code correct but this code works for me - see if you can find the difference :
var request = require('request');
body = JSON.stringify(
{actionType: "PAY",
senderEmail: "[email protected]",
receiverList: { receiver:
[{
email: "[email protected]",
amount: "1.00"
}]},
currencyCode: "USD",
feesPayer: "EACHRECEIVER",
memo: "This is a test",
cancelUrl: "http://cancelurl",
returnUrl: "http://returnUrl",
ipnNotificationUrl: "http://your_ipn_notification_url",
requestEnvelope: {
errorLanguage: "en_US" }
})
console.log(body)
request.post({
headers: {"X-PAYPAL-SECURITY-USERID": "happy_1349101075_biz_api1.onehappystudent.com", "X-PAYPAL-SECURITY-PASSWORD": "1349101103", "X-PAYPAL-SECURITY-SIGNATURE": "AFcWxV21C7fd0v3bYYYRCpSSRl31Avw12OuF33eJo9IbQpXMS6wrOp1.", "X-PAYPAL-REQUEST-DATA-FORMAT": "JSON", "X-PAYPAL-RESPONSE-DATA-FORMAT": "JSON", "X-PAYPAL-APPLICATION-ID": "APP-80W284485P519543T", "Content-Type": "application/json"},
url: 'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay',
body: body
}, function(error, response, body){
console.log(body);
});
Oh God I feel stupid... I was missing one line...
method: 'POST'
Lesson learnt - don't code when tired
(unless perhaps you have a large supply of coffee)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With