Невозможно создать токен клиента Braintree с идентификатором клиента

Скопировано непосредственно из учебника Braintree, вы можете создать клиентский токен с идентификатором клиента следующим образом:

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

Объявляю var aCustomerId = "customer", но node.js закрывается с ошибкой

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

Когда я пытаюсь создать токен без customerId, все работает нормально (хотя я никогда не получаю новый токен клиента, а другой вопрос).

EDIT: Вот полный тестовый код в соответствии с запросом:

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');

Ответ 1

Отказ от ответственности: я работаю для Braintree:)

Мне жаль, что у вас возникли проблемы с вашей реализацией. Здесь может быть несколько ошибок:

  • Если вы укажете customerId при создании токена клиента, он должен быть действительным. Вам не нужно включать идентификатор клиента при создании клиентского токена для клиентов в первый раз. Как правило, вы создаете создать клиента при обработке представления своей формы выписки, а затем сохраните этот идентификатор клиента в базе данных для использования позже. Я поговорю с нашей командой документации о разъяснении документации по этому поводу.
  • res.write берет строку или буфер. Поскольку вы писали response.clientToken, который был undefined, потому что он был создан с недопустимым идентификатором клиента, вы получали ошибку first argument must be a string or Buffer.

Некоторые другие примечания:

  • Если вы создаете токен с недопустимым customerId, или есть другая ошибка обработки вашего запроса, response.success будет ложным, вы можете проверить ответ по причине его отказа.
  • Вы должны создать токен клиента в обработчике запросов HTTP, это позволит вам генерировать разные токены для разных клиентов и лучше обрабатывать любые проблемы, возникающие в результате вашего запроса.

Следующий код должен работать, если вы укажете допустимый 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');