node.js PayPal https запрос - PullRequest
       32

node.js PayPal https запрос

2 голосов
/ 11 ноября 2011

первый вопрос здесь, поэтому извиняюсь, если это оказывается чем-то очень очевидным

Я пытаюсь вызвать api адаптивных платежей paypal через node.js и получаю ошибку неверного запроса 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);
            });
        });
    });

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Я не уверен, что это только проблема с копированием, но ваша переменная сообщения не содержит правильно отформатированной строки.Он имеет пробелы и специальные символы не кодируются.

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
1 голос
/ 16 февраля 2012

В одном из полей заголовка есть конечная двоеточие; Вместо:

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

Вы должны иметь:

'X-PAYPAL-REQUEST-DATA-FORMAT'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...