Square API 从 SQL 服务器调用时出现身份验证错误

Square API Authentication Error when called from SQL Server

我有一个存储过程需要调用 Square API AddCustomer。它使用原生 TSQL 和 oa 过程。我知道与 oa procs 相关的风险,但这就是我所拥有的,所以虽然我意识到 CLR 是最好的方法,但我拥有我所拥有的。

当我将其转换为 SQL 调用时,它给我一个身份验证错误:

{"errors":[{"category":"AUTHENTICATION_ERROR","code":"UNAUTHORIZED","detail":"Your request did not include an Authorization http header with an access token. The header value is expected to be of the format \"Bearer TOKEN\" (without quotation marks), where TOKEN is to be replaced with your access token

我已经在 Postman 中测试了调用,它在那里执行得很好。

  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

如您所见,我设置了身份验证(沙盒令牌是正确的,但已在此处删除)。

我不明白为什么它没有正确设置 headers。

这一行有问题:

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

应该是:

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

Bearer authentication 的正确 header 是 授权