Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
174
rated 0 times [  181] [ 7]  / answers: 1 / hits: 10857  / 10 Years ago, tue, november 18, 2014, 12:00:00

Copied directly from Braintree's tutorial, you can create a client token with a customer ID like this:



gateway.clientToken.generate({
customerId: aCustomerId
}, function (err, response) {
clientToken = response.clientToken
});


I declare var aCustomerId = customer but node.js closes with the error



new TypeError('first argument must be a string or Buffer')


When I try to generate a token without the customerId, everything works fine (though I never get a new client token but that's another question).



EDIT: Here is the complete test code as requested:



var http = require('http'),
url=require('url'),
fs=require('fs'),
braintree=require('braintree');

var clientToken;
var gateway = braintree.connect({
environment: braintree.Environment.Sandbox,
merchantId: xxx, //Real ID and Keys removed
publicKey: xxx,
privateKey: xxx
});

gateway.clientToken.generate({
customerId: aCustomerId //I've tried declaring this outside this block
}, function (err, response) {
clientToken = response.clientToken
});

http.createServer(function(req,res){
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(clientToken);
res.end(<p>This is the end</p>);
}).listen(8000, '127.0.0.1');

More From » node.js

 Answers
2

Disclaimer: I work for Braintree :)



I'm sorry to hear that you are having trouble with your implementation. There are a few things that might be going wrong here:




  1. If you specify a customerId when generating a client token, it must be a valid one. You do not need to include a customer id when creating a client token for a first time customers. Typically you would create create a customer when handling the submission of your checkout form, and then store that customer id in a database for use later. I'll talk to our documentation team about clarifying the documentation around this.

  2. res.write takes a string or a buffer. Since you were writing response.clientToken, which was undefined because it was created with an invalid customer id, you were receiving the first argument must be a string or Buffer error.



Some other notes:




  • If you create a token with an invalid customerId, or there is another error processing your request, response.success will be false, you can then inspect the response for the reason why it failed.

  • You should generate your client token within the http request handler, this will allow you generate different tokens for different customers, and to better handle any issues that result from your request.



The following code should work, provided you specify a valid customerId



http.createServer(function(req,res){
// a token needs to be generated on each request
// so we nest this inside the request handler
gateway.clientToken.generate({
// this needs to be a valid customer id
// customerId: aCustomerId
}, function (err, response) {
// error handling for connection issues
if (err) {
throw new Error(err);
}

if (response.success) {
clientToken = response.clientToken
res.writeHead(200, {'Content-Type': 'text/html'});
// you cannot pass an integer to res.write
// so we cooerce it to a string
res.write(clientToken);
res.end(<p>This is the end</p>);
} else {
// handle any issues in response from the Braintree gateway
res.writeHead(500, {'Content-Type': 'text/html'});
res.end('Something went wrong.');
}
});

}).listen(8000, '127.0.0.1');

[#41205] Sunday, November 16, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
daijac

Total Points: 568
Total Questions: 120
Total Answers: 108

Location: Virgin Islands (U.S.)
Member since Fri, May 7, 2021
3 Years ago
;