Ошибка аутентификации Square API при вызове из SQL Server - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть сохраненный процесс, который должен сделать вызов Square API AddCustomer.Он использует родной TSQL и другие процессы.Я знаю риски, связанные с процессами, но это то, что у меня есть, поэтому, хотя я понимаю, что CLR лучше всего подходит, у меня есть то, что у меня есть.

Когда я перевожу это в вызов SQL, онвыдает ошибку аутентификации:

{"errors": [{"category": "AUTHENTICATION_ERROR", "code": "UNAUTHORIZED", "detail": "Ваш запрос не содержит Authorization http заголовок с токеном доступа. Ожидается, что значение заголовка будет иметь формат \ "Bearer TOKEN \" (без кавычек), где TOKEN должен быть заменен вашим токеном доступа

Я проверил вызов в Почтальоне, и он там прекрасно работает.

  DECLARE @authHeader NVARCHAR(64)
         ,@contentType NVARCHAR(64)
         ,@responseText NVARCHAR(2000)
         ,@responseXML NVARCHAR(2000)
         ,@ret INT
         ,@status NVARCHAR(32)
         ,@statusText NVARCHAR(32)
         ,@token INT
         ,@url NVARCHAR(256)

  SELECT @authHeader = 'Bearer sandbox-xxxxx-xxxxxxxxxxxxx-xx'
        ,@contentType = 'application/json';

  SELECT @url = 'https://connect.squareup.com/v2/customers'

  -- Open the connection.
  EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @token OUT;
  EXEC  sp_OAMethod @token, 'open', NULL, 'post',@url, 'false'

  EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Authentication', @authHeader;
  EXEC sp_OAMethod @token, 'setRequestHeader', null, 'Content-Type', 'application/json'
  EXEC sp_OAMethod @token, 'send', null, @body

  EXEC sp_OAMethod @token, 'responseText', @ResponseText OUTPUT
  Select @ResponseText

Как видите, у меня установлена ​​аутентификация (токен песочницы верен, но удален здесь).

Я не могу понять, почему он неправильно устанавливает заголовки.

1 Ответ

0 голосов
/ 31 декабря 2018

Проблема с этой строкой:

EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Authentication', @authHeader;

Должно быть:

EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Authorization', @authHeader;

Правильный заголовок для Аутентификация на носителе равна Авторизация

...