【发布时间】:2019-04-13 21:55:34
【问题描述】:
我正在使用没有任何库/npm 的 nodejs 来使用测试 api 密钥对条带进行收费。
但是我总是收到 400 状态码响应,不明白为什么,谁能给我一个提示?
这是我的请求详情:
{ protocol: 'https:',
hostname: 'api.stripe.com',
method: 'POST',
path: 'v1/charges',
timeout: 5000,
headers:
{ 'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': 72 },
auth: 'sk_test_JOXtNqPjvpFgLXMiwuWWKZxu:' }
这是我的有效负载(使用 querystring.stringify):
amount=5000¤cy=usd&description=Tiago_1541865841578&source=tok_amex
提前感谢您的帮助!
这是代码,我自己提出请求的方法:
helpers.sendRequest = function(protocol, port, hostname, method, path, timeoutSeconds, contentType, postData){
// Stringify the payload
var stringPayload = querystring.stringify(postData);
// Construct the request
var requestDetails = {
'protocol' : protocol+':',
'hostname' : hostname,
'method' : method,
'path' : path,
'port' : port,
'auth': ('Bearer ' + Buffer.from(config.stripe.secretApiKeyTest).toString('base64') + ":"),
'timeout' : timeoutSeconds * 1000,
'headers' :{
'Authorization': ('Bearer ' + Buffer.from(config.stripe.secretApiKeyTest).toString('base64') + ":"),
'teste':'ola',
"teste2":"ola2",
'Content-Type':contentType,
'Content-Length': Buffer.byteLength(stringPayload)
}
};
console.log("Request Details:")
console.log(requestDetails);
console.log("Payload:")
console.log(stringPayload);
// Instantiate the request object (using either the http or https module)
var _moduleToUse = protocol == 'http' ? http : https;
var req = _moduleToUse.request(requestDetails, function(res){
console.log(res.statusCode);
});
// Bind to the error event so it doesn't get thrown
req.on('error',function(e){
callback(err, e);
});
// Bind to the timeout event
req.on('timeout',function(){
callback(true, {'Error': 'The request took much time and got timeout.'})
});
// Add the payload
req.write(stringPayload);
// End the request
req.end();
};
这里是我调用 aux 方法来发送请求的地方:
var stripeRequestObject = {
amount: (totalPrice*100),
currency: 'usd',
description: userData.name+'_'+Date.now(),
source: stripeToken,
};
genericHelper.sendRequest('https',
443,
'api.stripe.com',
'POST',
'v1/charges',
5,
'application/x-www-form-urlencoded',
stripeRequestObject);
【问题讨论】:
-
我真的不明白你为什么不直接使用github.com/stripe/stripe-node。我知道您说过您“需要”在普通 Node 中执行此操作,购买 为什么?我很好奇。
-
只是一个项目和学习:) 没有特别的原因!我知道有很多库和模块很有帮助^^
标签: node.js https stripe-payments stringify bad-request