You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server发起HTTP请求时如何传入OAuth2.0 Token对接QBO API?

QBO API 401授权错误排查及SQL侧传入OAuth2.0凭证方案

前置问题修正

你当前使用的请求URL存在格式错误:https://sandbox-quickbooks.api.intuit.com/v3/company//account/1?minorversion=14 中company路径后缺少必填的公司Realm ID,双斜杠中间为空,这是触发401错误的常见原因之一,需先补全该参数。

授权凭证正确传入方案

QBO的OAuth2.0凭证仅支持通过HTTP请求头的Authorization字段传入,不接受URL参数、请求体等传入方式,如果你参考的是SQL Server OLE Automation Procedures实现HTTP请求,可按照以下步骤配置:

步骤1:凭证有效性校验

  • 确认当前使用的Access Token未过期:QBO Access Token有效期仅为1小时,过期后需先调用令牌刷新接口,用Refresh Token换取新的有效Access Token后再发起业务请求
  • 确认环境匹配:沙箱环境的Access Token仅能调用沙箱域名的接口,不能混用生产环境凭证
  • 确认应用权限:你的QBO应用已获得对应账户的account.read类账户查询权限

步骤2:SQL侧请求代码示例

DECLARE @obj INT,
        @authHeader NVARCHAR(200),
        @url NVARCHAR(1000),
        @status INT,
        @responseText NVARCHAR(MAX),
        @ret INT

-- 配置Bearer授权头,注意Bearer与令牌之间必须有空格
SET @authHeader = 'Bearer ' + '你当前有效的Access Token'
-- 补全Realm ID后的正确请求地址
SET @url = 'https://sandbox-quickbooks.api.intuit.com/v3/company/你的RealmID/account/1?minorversion=14'

-- 初始化HTTP请求对象
EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @obj OUT
IF @ret <> 0 RAISERROR('HTTP对象创建失败', 16, 1)

-- 打开GET请求
EXEC @ret = sp_OAMethod @obj, 'open', NULL, 'GET', @url, 'false'
IF @ret <> 0 RAISERROR('请求打开失败', 16, 1)

-- 核心:传入授权头及必填的Accept头
EXEC @ret = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Authorization', @authHeader
EXEC @ret = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Accept', 'application/json'
IF @ret <> 0 RAISERROR('请求头配置失败', 16, 1)

-- 发送请求并获取结果
EXEC @ret = sp_OAMethod @obj, 'send'
IF @ret <> 0 RAISERROR('请求发送失败', 16, 1)

EXEC @ret = sp_OAGetProperty @obj, 'status', @status OUT
EXEC @ret = sp_OAGetProperty @obj, 'responseText', @responseText OUT

SELECT @status AS 响应状态码, @responseText AS 响应内容

-- 释放对象
EXEC sp_OADestroy @obj

内容的提问来源于stack exchange,提问作者alrightaaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:36:02