2011-11-11 16 views
2

最初の質問に、それは非常に明白なものここでNode.jsのPayPalのHTTPSリクエスト

であることが判明した場合、私はNode.jsの経由でPayPalの適応支払い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&[email protected]&receiverList.receiver(0)[email protected]& 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); 
      }); 
     }); 
    }); 

答えて

2

私はそれが唯一のコピーペーストの問題だかはわからないが、あなたのメッセージ変数が適切にフォーマットされた文字列が含まれていないようです。空白があり、特殊文字はエンコードされません。

requestEnvelope.errorLanguage=en_US&actionType=PAY&[email protected]&receiverList.receiver(0)[email protected]&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 
+0

おかげで、それはコピーペースト問題であり、コメントアウト機能を解析し、特別の世話を文字列化:あなたは持っている必要があり

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

:よりもむしろ文字 – user1041113

+0

ええ、コメントアウトされた関数はエンコードされたバージョンを 'params'変数に格納し、メッセージは格納しません。また、元のmessage.lengthをコンテンツの長さとして使用することはできません。これは、エンコーディングが長い文字列になるためです。 –

1

あなたのヘッダフィールドの1の末尾のコロンがあります。お返事のための

'X-PAYPAL-REQUEST-DATA-FORMAT'

関連する問題