Получение ошибки 401 «усеченный сервер» при попытке добавить ключ API Stripe в UrlFetchApp в сценариях Google Apps

#javascript #google-apps-script #google-sheets #stripe-payments

#javascript #google-apps-script #google-sheets #stripe-платежи

Вопрос:

Я пытаюсь получить счет-фактуру в Google Sheets через Stripe API и использую скрипты Google Apps для запуска своего кода. Вот код, который у меня есть:

 function callNumbers() 
  {
    var url = "https://api.stripe.com/v1/invoices/[unique_id]";
    var apiKey = "[api-key]";

    var response = UrlFetchApp.fetch(url, {"headers":{"[api-key]":apiKey}}); 
    var content = response.getContentText(); 
    Logger.log(response); 
    Logger.log(content);
 }
  

URL-адрес Stripe invoice имеет уникальный идентификатор в URL-адресе выше после /invoices/, представляющий конкретный тестовый счет, который я хочу получить.

Я использую тестовый ключ API Stripe, который начинается с этого перед уникальным кодом ключа API: sk_test_

Ссылка на странице Stripe выглядит следующим образом:

 curl https://api.stripe.com/v1/invoices/[unique_id] 
  -u sk_test_[api-key]:
  

Сообщение об ошибке, которое я получаю, выглядит следующим образом:

 Request failed for https://api.stripe.com/v1/invoices/[unique_id] returned code 401. Truncated server response: { "error": { "message": "You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g... (use muteHttpExceptions option to examine full response) (line 13, file "Code")
  

Я не уверен, что не так с моим кодом. Я предполагаю, что это что-то с "headers" разделом, но я недостаточно разбираюсь в API, чтобы знать наверняка. Я использую этот тестовый проект в попытке узнать больше об API.

Комментарии:

1. Я подозреваю, что ваша проблема заключается в том, что делает раздел заголовков. Вы можете использовать либо базовую аутентификацию, либо аутентификацию на предъявителя. Вы делаете ~ может быть, basic? Это не совсем понятно. Я бы, наверное, просто изменил ваш заголовок на be Authorization : Bearer sk_test_xxx . Я подозреваю, что это будет выглядеть так: {"headers":{"Authorization" : "Bearer " apiKey}}

Ответ №1:

Попробуйте что-то вроде этого:

 function getInvoiceObj(invoiceURL) {
  var content,options,response ,secret,url;

  secret = 'sk_test_ABC123';//sk_live_ABC123'

  url = "https://api.stripe.com/v1/invoices/"   invoiceURL;

  options = {
    "method" : "GET",
    "headers": {
      "Authorization": "Bearer "   secret
    },
    "muteHttpExceptions":true
  };

  response = UrlFetchApp.fetch(url, options);

  content = response.getContentText(); 
  Logger.log(response); 
  Logger.log(content);
}
  

Комментарии:

1. Привет, Алан, это исправило мою проблему! Большое спасибо! Для всех, кто в будущем прочтет этот пост для справки, похоже, что у меня это сработало без необходимости использовать apiKey в пятой строке url = "https://api.stripe.com/v1/invoices/" apiKey; Вместо использования apiKey вы можете просто использовать уникальный URL-адрес счета, который будет выглядеть как https://api.stripe.com/v1/invoices/in_xxxxxxxxxxxxxxxxxxxxxx