oauth-2.0 - Zoho CRM API 到 Power BI 连接器
问题描述
我正在尝试连接到 Zoho CRM API 以将数据导入 PowerBI,通过我的自定义连接器登录到 Zoho 后收到错误消息,希望您能提供帮助,因为我的连接器似乎已完成 90%,只是缺少最后一步!(下面的代码)。
错误消息:[DataFormatError] 我们无法解析您的查询字符串,因为它的格式不正确
// This file contains your Data Connector logic
section Zoho_Connector___V1.1;
// TODO: add your client id and secret to the embedded files
client_id = "XXXXX";
client_secret = "XXXXXX";
redirect_uri = "https://oauth.powerbi.com/views/oauthredirect.html";
windowWidth = 800;
windowHeight = 800;
//Oauth base url for
OAuthBaseUrl = "https://accounts.zoho.eu/oauth/v2/auth?";
[DataSource.Kind="Zoho_Connector___V1.1", Publish="Zoho_Connector___V1.1.Publish"]
shared Zoho_Connector___V1.1.Contents = () =>
let
navTable = Web.Contents("https://www.zohoapis.eu/crm/v2/Leads")
in
navTable;
// Data Source Kind description
Zoho_Connector___V1.1 = [
Authentication = [
// enable both OAuth and Key based auth
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh=Refresh
]
],
Label = Extension.LoadString("DataSourceLabel")
];
// Data Source UI publishing description
Zoho_Connector___V1.1.Publish = [
Beta = true,
Category = "Other",
ButtonText = { Extension.LoadString("ButtonTitle"), Extension.LoadString("ButtonHelp") },
LearnMoreUrl = "https://powerbi.microsoft.com/",
SourceImage = Zoho_Connector___V1.1.Icons,
SourceTypeImage = Zoho_Connector___V1.1.Icons
];
// OAuth2 flow definition
//
// Start Login thorugh OAUTH
StartLogin = (resourceUrl, state, display) =>
let
AuthorizeUrl = OAuthBaseUrl & Uri.BuildQueryString([
scope = "ZohoCRM.modules.all",
client_id = client_id,
redirect_uri = redirect_uri,
response_type = "code",
state = state,
access_type = "online"])
in
[
LoginUri = AuthorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = windowHeight,
WindowWidth = windowWidth,
Context = null
];
// Finish Login through OAUTH
FinishLogin = (context, callbackUri, state) =>
let
Parts = Uri.Parts(callbackUri)[Query]
in
TokenMethod(Parts[code], "authorization_code");
TokenMethod = (code, grant_type) =>
let
Response = Web.Contents(OAuthBaseUrl & "/token", [
Content = Text.ToBinary(Uri.BuildQueryString([
grant_type = "authorization_code",
client_id = client_id,
client_secret = client_secret,
redirect_uri = redirect_uri,
code = code
]
)),
Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" = "application/json"]]),
Parts = Json.Document(Response)
in
Parts;
Refresh = (resourceUrl, refresh_token) => TokenMethod(refresh_token, "refresh_token");
Zoho_Connector___V1.1.Icons = [
Icon16 = { Extension.Contents("Zoho_Connector___V1.116.png"), Extension.Contents("Zoho_Connector___V1.120.png"), Extension.Contents("Zoho_Connector___V1.124.png"), Extension.Contents("Zoho_Connector___V1.132.png") },
Icon32 = { Extension.Contents("Zoho_Connector___V1.132.png"), Extension.Contents("Zoho_Connector___V1.140.png"), Extension.Contents("Zoho_Connector___V1.148.png"), Extension.Contents("Zoho_Connector___V1.164.png") }
];
谢谢!
解决方案
您的代码中有错误(可能还有更多)请查看此变量
OAuthBaseUrl = "https://accounts.zoho.eu/oauth/v2/auth?";
您的交换代码网址是
OAuthBaseUrl & "/token"
请关注 OauthBaseUrl 末尾的问号,它将解决此问题
https://accounts.zoho.eu/oauth/v2/auth?/token
但它应该
https://accounts.zoho.eu/oauth/v2/token
我的另一个建议是将错误处理和日志添加到您的代码中。它将帮助您准确理解问题。您还可以获得响应标头和状态以确保潜在问题
推荐阅读
- c++ - QT 5.13.2 C++ 问题成员访问不完整类型“Ui::UsersWidget”
- unity3d - Unity NVIDIA Flex,加力
- javascript - 通过现有数组过滤Javascript对象数组
- oracle - 光标 PL/SQL ORACLE
- c++ - Qt 不会连接到子类中的插槽
- bash - 哈希冒号 (#:) 作为 shell 脚本的第一行是什么意思?
- c++ - 如何在数组中输入没有空格?
- javascript - ReactJS:将代码从类重写为函数
- java - 枚举为 java.wx.rs.DefaultValue
- vim - firacode 连字在 iterm 2 中不起作用