2014-11-02 2 views
0

Я учусь, как обрабатывать платежи по кредитным картам .. Вот тест CURL ...Преобразование запроса Curl на сервер Node.JS. Присоединить данные к запросу?

curl -k -v -X POST -H "Content-Type:application/json" -H "Authorization: Basic Mxxxxxxxxxxxxxxxxxx=" -d "@json_file.txt" -o output.txt https://w1.xxxxxxxxxxxx.net/PaymentsAPI/Credit/Sale 

Где json_file.txt содержит

{ 
    "InvoiceNo":"1", 
    "RefNo":"1", 
    "Memo":"TEST_TEST_PHONY", 
    "Purchase":"1.00", 
    "AccountSource":"Swiped", 
    "AcctNo":"5xxxxxxxxxxxxxxxxx1", 
    "ExpDate":"0816", 
    "OperatorID":"xxxxxxxxxx", 
} 

Я обратился к узлу модуля HTTPS

var https = require("https"); 

var options = { 
    host: 'w1.xxxxxxxxxxxxxx.net', 
    port: 443, 
    path: '/PaymentsAPI/Credit/Sale', 
    headers: { "Content-Type" :"application/json", 
    "Authorization" : "Basic Mxxxxxxxxxxxxxxxxxxxxxxxxxxx="} , 
    data: { 
    "InvoiceNo":"1", 
    "RefNo":"1", 
    "Memo":"xxxxxxxxxxxxxxx", 
    "Purchase":"1.00", 
    "AccountSource":"Swiped", 
    "AcctNo":"5xxxxxxxxxxxxxxxxx1", 
    "ExpDate":"0816", 
    "OperatorID":"xxxxxxxxxxxx", 
    }, 
    method: 'POST' 
}; 

// oops... 400 Bad Request 
// The request could not be understood by the server due to malformed syntax. 

var req = https.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('BODY: ' + chunk.toString()); 
    }); 
}); 

req.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 

// write data to request body 
req.write('data\n'); 
req.write('data\n'); 
req.end(); 

Проблема заключается в первоначальном запросе curl, данные, содержащиеся в текстовом файле JSON, представлены в виде приложения POST. Запрос Curl работает отлично. С другой стороны, мне непонятно, как это сделать с сервера node.js. Заголовки ответов возвращаются хорошо, но я получаю ответ 400 (искаженный синтаксис). Кто-нибудь знает, как подключить данные JSON в качестве прикрепленного сообщения к запросу HTTPS?

+0

Почему голос? И почему голосование без комментариев? – zipzit

ответ

1

К сожалению. Я полностью не понял, как работает req.write(). Этот код успешный. Спасибо Dan Ourada @ Mercury Payments за помощь. Обратите внимание: весь код здесь представляет собой чистую песочницу. Никакая реальная покупка $$ купить.

var https = require("https"); 

var options = { 
    host: 'w1.mercurycert.net', 
    port: '443', 
    path: '/PaymentsAPI/Credit/Sale', 
    headers: { "Content-Type" :"application/json", "Authorization" : "Basic MDAzNTAzOTAyOTEzMTA1Onh5eg=="}, 
    method: 'POST' 
}; 

var inputdata = JSON.stringify({ 
    "InvoiceNo":"1", 
    "RefNo":"1", 
    "Memo":"XXXXX", 
    "Purchase":"1.00", 
    "AccountSource":"Swiped", 
    "AcctNo":"549999", 
    "ExpDate":"0816", 
    "OperatorID":"money2020", 
    }); 

var req = https.request(options, function(res) { 
    console.log('STATUS: ' + res.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', function (chunk) { 
    console.log('Return info: ' + chunk); // output the return raw data 
    }); 
}); 

req.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
}); 

// attach input data to request body 
req.write(inputdata); 
req.end(); 

Информации о предлагаемой здесь в случае, если кто-либо застревает преобразование из CURL команды к запросу HTTP Node.js ...

И эй, после того, как играть с этим, я поражен на как действительно легко включить реальную (и безопасную) систему платежей в любой веб-сайт продавца. (Очевидно, требуется сайт Https.)

+0

Для альтернативы, проверьте библиотеку 'request', за ответ от Jed Watson, ref [эта ссылка] (https://stackoverflow.com/questions/6158933/how-to-make-an-http-post-request -в-узел-JS) – zipzit

Смежные вопросы