我正在从SQL Server调用TaxJar API,我看到了一些类似的文章:
calling an api from sql server stored-procedure
但是不幸的是,我确实知道如何将Token值传递给调用
这是我在Poestman拨打的电话的示例:
https://api.taxjar.com/v2/rates/90404-3370
令牌:XXXXXXXXXXX
请问怎么做?
谢谢
这是到目前为止我所做的代码示例:
DECLARE
@Result INT,
@Text nVARCHAR(max),
@Obj int,
@HTTPStatus smallint,
@URL Varchar(MAX)
DECLARE @output varchar(255);
DECLARE @hr int;
DECLARE @source varchar(255);
DECLARE @description varchar(255);
SET @Text = '-H "Authorization: Bearer [TOKEN VALUE]'
SET @Url = 'https://api.taxjar.com/v2/rates/90404-3370 \'
EXEC @Result = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @Obj OUT
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Access-Control-Allow-Origin', '*'
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/json'
EXEC @Result = sp_OAMethod @Obj, send, NULL, @Text
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
PRINT @Result
EXEC @Result = sp_OAGetErrorInfo @obj, @source OUT, @description OUT;
IF @Result = 0
BEGIN
SET @output = ' Source: ' + @source + CHAR(13) + CHAR(10)
SET @output = @output + ' Description: ' + @description
PRINT 'OLE Automation Error Information';
PRINT @output
END
================================================ =================
更新:
这是我的SQL代码,部分起作用了
DECLARE @authHeader NVARCHAR(64);
DECLARE @contentType NVARCHAR(64);
DECLARE @postData NVARCHAR(MAX);
DECLARE @responseText NVARCHAR(MAX);
DECLARE @responseXML NVARCHAR(MAX);
DECLARE @ret INT;
DECLARE @status NVARCHAR(32);
DECLARE @statusText NVARCHAR(32);
DECLARE @token INT;
DECLARE @url NVARCHAR(256);
-- Set Authentications
SET @authHeader = 'Bearer [TOKEN VALUE]';
SET @contentType = 'application/json';
SET @url = 'https://api.taxjar.com/v2/summary_rates'
EXEC @ret = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @token OUT;
IF @ret <> 0 RAISERROR('Unable to open HTTP connection.', 10, 1);
-- build a request
EXEC @ret = sp_OAMethod @token, 'open', NULL, 'GET', @url, 'false';
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Authorization', @authHeader;
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Content-type', @contentType;
EXEC @ret = sp_OAMethod @token, 'setRequestHeader', NULL, 'Cache-Control', 'no-cache' ;
EXEC @ret = sp_OAMethod @token, 'send'
-- Handle responce
EXEC @ret = sp_OAGetProperty @token, 'status', @status OUT;
EXEC @ret = sp_OAGetProperty @token, 'statusText', @statusText OUT;
EXEC @ret = sp_OAGetProperty @token, 'responseText', @responseText OUT;
-- Print responec
PRINT 'Status: ' + @status + ' (' + @statusText + ')';
PRINT 'Response text: ' + @responseText;
在邮递员中,URL在SQL中未返回任何信息,但返回了值!
答案 0 :(得分:1)
尝试使用此CLR存储的过程https://github.com/geral2/SQL-APIConsumer
DECLARE @Result AS TABLE
(
Token VARCHAR(MAX)
)
INSERT INTO @Result
exec [dbo].[APICaller_POST]
@URL = 'http://localhost:5000/api/auth/login'
,@BodyJson = '{"Username":"gdiaz","Password":"password"}'
DECLARE @Token AS VARCHAR(MAX)
SELECT TOP 1 @Token = CONCAT('Bearer ',Json.Token)
FROM @Result
CROSS APPLY ( SELECT value AS Token FROM OPENJSON(Result)) AS [Json]
EXEC [dbo].[APICaller_GETAuth]
@URL = 'http://localhost:5000/api/values'
, @Token = @Token