Power BI自定义连接器开发求助:Xero API OAuth认证及服务器连接
Power BI自定义连接器(M语言)对接Xero OAuth认证完整示例
先给你理清楚前置准备,这步是基础,不能漏:
- 登录Xero开发者平台创建一个Custom Connector类型的应用
- 记下生成的
Client ID和Client Secret - 在应用的重定向URL里添加
https://oauth.powerbi.com/views/oauthredirect.html(这是Power BI官方的OAuth回调地址,必须完全一致,多一个空格都不行)
下面是完整的M语言连接器代码,我给你加了详细注释,直接替换掉你的Client ID和Secret就能用:
section XeroConnector; // 1. 配置OAuth2认证核心参数 XeroOAuthConfig = [ AuthorizationUri = "https://login.xero.com/identity/connect/authorize", TokenUri = "https://identity.xero.com/connect/token", ClientId = "你的Xero Client ID", // 替换成你的实际Client ID ClientSecret = "你的Xero Client Secret", // 替换成你的实际Client Secret RedirectUri = "https://oauth.powerbi.com/views/oauthredirect.html", Scope = "openid profile email accounting.transactions accounting.settings", // 根据业务需求调整权限范围 ExtraQueryParameters = [response_type = "code"], TokenHeaders = [ #"Content-Type" = "application/x-www-form-urlencoded" ] ]; // 2. 创建OAuth2授权上下文,自动处理令牌刷新 XeroAuthContext = OAuth2.AuthorizationCodeFlow(XeroOAuthConfig); // 3. 示例函数:获取Xero关联的组织列表 GetXeroOrganizations = () => let // 从授权上下文获取有效访问令牌 AccessToken = XeroAuthContext()[AccessToken], // 调用Xero组织信息API ApiResponse = Web.Contents( "https://api.xero.com/api.xro/2.0/Organisation", [ Headers = [ #"Authorization" = "Bearer " & AccessToken, #"Accept" = "application/json" ] ] ), // 解析JSON响应数据 ParsedJson = Json.Document(ApiResponse), // 提取组织列表 OrganizationList = ParsedJson[Organisations] in OrganizationList; // 4. 暴露连接器的入口函数,让Power BI能识别 shared Xero.GetOrganizations = GetXeroOrganizations;
关键细节提醒:
- 权限范围(Scope):上面选的是常用的基础权限,如果你需要访问发票、联系人等数据,可以参考Xero官方文档添加对应scope,比如
accounting.contacts或accounting.invoices - 租户ID(Xero-Tenant-Id):如果你的应用关联了多个Xero租户,第一次调用API时可以不填这个请求头,Xero会返回所有有权限的租户信息,后续可以把租户ID存下来用于定向调用接口
- 令牌刷新:M语言的
OAuth2.AuthorizationCodeFlow会自动处理令牌过期刷新,不用你手动写刷新逻辑
测试步骤:
- 在Visual Studio中打开Power Query SDK,新建一个连接器项目
- 把上面的代码替换到
.pq文件中,填入你的Client ID和Secret - 点击「Start Debugging」,Power BI Desktop会自动启动并加载你的自定义连接器
- 选择你的连接器,点击「Connect」,会跳转到Xero的授权页面,登录并授权后就能看到返回的组织数据了
要是遇到授权失败,先排查这几个点:
- 重定向URL是否和Xero应用里设置的完全一致(包括HTTPS协议、完整路径)
- Client ID和Secret有没有复制错误
- 所选的Scope是否在Xero应用的权限范围内
内容的提问来源于stack exchange,提问作者user1837027
相关产品推荐
相关产品推荐

