Getting error 400 when calling an https request to apply a charge on Stripe API
up vote
0
down vote
favorite
I am using nodejs without any library/npm to make a charge on stripe using the test api key.
However I am always getting 400 status code response, and can't understand why, can someone give me an hint?
Here is my request details:
{ 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:' }
And here is my payload (using querystring.stringify):
amount=5000¤cy=usd&description=Tiago_1541865841578&source=tok_amex
Thank you in advance for any help!
Here is the code, the method where I do the request it self:
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();
};
And here is where I call the aux method to send the request:
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);
node.js https stripe-payments stringify bad-request
add a comment |
up vote
0
down vote
favorite
I am using nodejs without any library/npm to make a charge on stripe using the test api key.
However I am always getting 400 status code response, and can't understand why, can someone give me an hint?
Here is my request details:
{ 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:' }
And here is my payload (using querystring.stringify):
amount=5000¤cy=usd&description=Tiago_1541865841578&source=tok_amex
Thank you in advance for any help!
Here is the code, the method where I do the request it self:
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();
};
And here is where I call the aux method to send the request:
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);
node.js https stripe-payments stringify bad-request
1
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am using nodejs without any library/npm to make a charge on stripe using the test api key.
However I am always getting 400 status code response, and can't understand why, can someone give me an hint?
Here is my request details:
{ 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:' }
And here is my payload (using querystring.stringify):
amount=5000¤cy=usd&description=Tiago_1541865841578&source=tok_amex
Thank you in advance for any help!
Here is the code, the method where I do the request it self:
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();
};
And here is where I call the aux method to send the request:
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);
node.js https stripe-payments stringify bad-request
I am using nodejs without any library/npm to make a charge on stripe using the test api key.
However I am always getting 400 status code response, and can't understand why, can someone give me an hint?
Here is my request details:
{ 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:' }
And here is my payload (using querystring.stringify):
amount=5000¤cy=usd&description=Tiago_1541865841578&source=tok_amex
Thank you in advance for any help!
Here is the code, the method where I do the request it self:
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();
};
And here is where I call the aux method to send the request:
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);
node.js https stripe-payments stringify bad-request
node.js https stripe-payments stringify bad-request
edited Nov 10 at 16:59
asked Nov 10 at 16:08
TiagoM
1,43832560
1,43832560
1
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10
add a comment |
1
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10
1
1
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10
add a comment |
2 Answers
2
active
oldest
votes
up vote
1
down vote
accepted
In the auth you need to add Bearer before the token, that's how you send tokens to API. I tried to do the request on postman and it works, you can use axios or superagent to perform the request in you js file
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
|
show 4 more comments
up vote
2
down vote
That is how I did it.
const requestDetails = {
protocol: 'https:',
hostname: 'api.stripe.com',
port: 443,
method: 'POST',
path: '/v1/charges',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(stringPayload),
Authorization: `Bearer ${config.stripe.testAPIkey.Secret}`
}
};
There is a typo in your code
'v1/charges'
should be
'/v1/charges'
New contributor
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
In the auth you need to add Bearer before the token, that's how you send tokens to API. I tried to do the request on postman and it works, you can use axios or superagent to perform the request in you js file
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
|
show 4 more comments
up vote
1
down vote
accepted
In the auth you need to add Bearer before the token, that's how you send tokens to API. I tried to do the request on postman and it works, you can use axios or superagent to perform the request in you js file
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
|
show 4 more comments
up vote
1
down vote
accepted
up vote
1
down vote
accepted
In the auth you need to add Bearer before the token, that's how you send tokens to API. I tried to do the request on postman and it works, you can use axios or superagent to perform the request in you js file
In the auth you need to add Bearer before the token, that's how you send tokens to API. I tried to do the request on postman and it works, you can use axios or superagent to perform the request in you js file
answered Nov 10 at 16:17
Pedro Silva
37410
37410
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
|
show 4 more comments
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
Hi @Pedro Silva thanks for your reply, I added the Bearer tag on the Authorization but still the request doesnt go though :(
– TiagoM
Nov 10 at 16:48
1
1
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Can you send me the full code you are using? In meantime, I will do a small script to try the request
– Pedro Silva
Nov 10 at 16:55
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
Hey Pedro just updated the question with the code detailed, I hope it helps, I will keep searching and try to find out a solution... thanks
– TiagoM
Nov 10 at 17:00
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
After analyzing your code, I realized it was too much complicated. So I created a simple script that you can adapt to your code that uses superagent to do the request pass all data you want as arguments and prints the results pastebin.com/tJCJTx3r In this link, there is an example script with the code. Feel free to adapt it to your needs, if you need more help let me know. In case it solves you problems, mark the answer as correct pls :D
– Pedro Silva
Nov 10 at 17:15
1
1
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
I will try to use it them, if I can I will post it here
– Pedro Silva
Nov 10 at 17:26
|
show 4 more comments
up vote
2
down vote
That is how I did it.
const requestDetails = {
protocol: 'https:',
hostname: 'api.stripe.com',
port: 443,
method: 'POST',
path: '/v1/charges',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(stringPayload),
Authorization: `Bearer ${config.stripe.testAPIkey.Secret}`
}
};
There is a typo in your code
'v1/charges'
should be
'/v1/charges'
New contributor
add a comment |
up vote
2
down vote
That is how I did it.
const requestDetails = {
protocol: 'https:',
hostname: 'api.stripe.com',
port: 443,
method: 'POST',
path: '/v1/charges',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(stringPayload),
Authorization: `Bearer ${config.stripe.testAPIkey.Secret}`
}
};
There is a typo in your code
'v1/charges'
should be
'/v1/charges'
New contributor
add a comment |
up vote
2
down vote
up vote
2
down vote
That is how I did it.
const requestDetails = {
protocol: 'https:',
hostname: 'api.stripe.com',
port: 443,
method: 'POST',
path: '/v1/charges',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(stringPayload),
Authorization: `Bearer ${config.stripe.testAPIkey.Secret}`
}
};
There is a typo in your code
'v1/charges'
should be
'/v1/charges'
New contributor
That is how I did it.
const requestDetails = {
protocol: 'https:',
hostname: 'api.stripe.com',
port: 443,
method: 'POST',
path: '/v1/charges',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(stringPayload),
Authorization: `Bearer ${config.stripe.testAPIkey.Secret}`
}
};
There is a typo in your code
'v1/charges'
should be
'/v1/charges'
New contributor
New contributor
answered Nov 10 at 18:23
gkont
1039
1039
New contributor
New contributor
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240809%2fgetting-error-400-when-calling-an-https-request-to-apply-a-charge-on-stripe-api%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
I really do not understand why you wouldn't just use github.com/stripe/stripe-node for this. I know you said that you "need" to do this in plain Node, buy why? I'm curious.
– Karl Reid
Nov 11 at 21:00
Just a project and to learn :) no particular reason! I know there are bunches of libraries and modules that help a lot ^^
– TiagoM
Nov 12 at 19:10