Node.js中的PayPal自适应付款问题

时间:2012-11-05 11:56:37

标签: node.js paypal paypal-adaptive-payments

我不能为我的生活找出正在发生的事情。我只是尝试对PayPal的自适应支付API进行基本调用,具体是Pay来电。我正在尝试使用node.js来实现这一点。我可以使用curl成功调用,但节点只是拒绝工作。我不断收到'Invalid request: {0}'错误消息,errorId 580001。我已经找了很长时间寻找解决方案,尽管很多人看似有类似的问题,但他们的问题与我的不同,所以他们的解决方案没有用。

您可以提供的任何帮助很多赞赏。

以下是我一直得到的回应(美化):

{ 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}' } ] }

这是我的节点代码:(注意:我正在使用request模块:https://github.com/mikeal/request

request = require 'request'

body = JSON.stringify

  actionType: "PAY"
  senderEmail: "happy_1349101075_biz@onehappystudent.com"
  receiverList:
    receiver: [
      email: "luke_1346604373_biz@onehappystudent.com"
      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

以下是运行上述代码的输出:

{"actionType":"PAY","senderEmail":"happy_1349101075_biz@onehappystudent.com","receiverList":{"receiver":[{"email":"luke_1346604373_biz@onehappystudent.com","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}"}]}

这是成功的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":"happy_1349101075_biz@onehappystudent.com",
  "receiverList":{
    "receiver":[{
      "email":"luke_1346604373_biz@onehappystudent.com",
      "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"
  }
}'

以下是回复:(为了您的方便而美化)

{ responseEnvelope: 
   { timestamp: '2012-11-05T03:40:10.613-08:00',
     ack: 'Success',
     correlationId: 'abaf5b13c5515',
     build: '4110101' },
  payKey: 'AP-4B1870921M506553S',
  paymentExecStatus: 'COMPLETED' }

同样,您可以提供的任何帮助很多赞赏。

2 个答案:

答案 0 :(得分:4)

不确定您是否正确粘贴了代码,但此代码对我有用 - 看看您是否能找到差异:

var request = require('request');
body = JSON.stringify(
  {actionType: "PAY",
  senderEmail: "happy_1349101075_biz@onehappystudent.com",
  receiverList: { receiver:
    [{
      email: "luke_1346604373_biz@onehappystudent.com",
      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);
    });

答案 1 :(得分:4)

哦,上帝,我感到愚蠢......我错过了一条线......

method: 'POST'

经验教训 - 累了时不要编码

(除非您有大量的咖啡供应)