r - API OAuth 2.0 - XERO 访问,R 接收状态为 400
问题描述
我们必须迁移到 Oauth 2.0。但是,我面临以下问题。状态 400 我相信是由于某些参数可能没有正确输入。如果有人知道可能出了什么问题或有任何想法,请告诉我。
这是我的代码:
pack <- c('curl','xml2','XML', 'plyr', 'dplyr','tidyr', 'httr', 'tools', 'lubridate',
'jsonlite', 'stringr', 'data.table', 'anytime')
sapply(pack, function(x){
if(!require(x,character.only = T, quietly = T)) {install.packages(x, quiet = T)}
require(x, quietly = T, character.only = T)
})
#New Xero & WFM Api OAuth 2.0 credentials
Client_ID <- 'YOUR_CLIENT_ID'
Client_secret<- 'YOUR_CLIENT_SECRET'
XTID <- 'YOUR_REFERAL_ID'#Referral_ID
Redirect_URI <- 'https://xero.com/' #OAuth 2.0 redirect URI
response <- GET(paste0('https://login.xero.com/identity/connect/authorize?response_type=code&client_id=',
Client_ID,'&redirect_uri=',Redirect_URI,'&scope=workflowmax%20offline_access'))
browseURL(response$url)
它工作到这里我能够检索第一个代码,但我无法获得令牌这是 Xero Doc 所说的:
Xero 文档请求:
POST https://identity.xero.com/connect/token
authorization: "Basic " + base64encode(client_id + ":" + client_secret)
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=xxxxxx
&redirect_uri=https://myapp.com/redirect
现在尝试获取令牌,我尝试了几种形式。但是,它们看起来都非常相似。
code <- 'YOUR_CODE'
credentials = list();
credentials['grant_type'] <- "authorization_code"
credentials['code'] <- code
credentials['redirect_uri'] <- Redirect_URI
b64_id_secret <- base64_enc('YOUR_CLIENT_ID:YOUR_CLIENT_SECRET')
# user <- paste("Basic", user, sep = " ")
url <- 'https://identity.xero.com/connect/token'
POST(url, add_headers('Authorization'= paste0('Basic ', b64_id_secret)),
body = credentials,
verbose(), encode = 'form')
回复:
Response [https://identity.xero.com/connect/token?grant_type=authorization_code&code=YOUR_CODE&redirect_uri=https://waterlineprojects.com/]
Date: 2020-11-20 02:48
Status: 400
Content-Type: application/json; charset=UTF-8
Size: 27 B
XERO 文档:https ://developer.xero.com/documentation/oauth2/overview
解决方案
看起来你很接近。就像 MrFlick 所说的,没有您的客户 ID 并通过 Xero API 技术支持开始一个案例(电子邮件 api@xero.com 与您的客户 ID 和日志数据)很难确定。
一个提示可能是,您的重定向 URI 必须与您的https://developer.xero.com/myapps/details?appId= <app_uuid>仪表板中的值完全相同,包括一个结束斜杠。
另外 - 400 错误的主体是什么,应该有类似的东西
{
"error": "invalid_grant"
}
这将帮助您更轻松地推断出问题所在。
https://developer.xero.com/documentation/oauth2/troubleshooting
推荐阅读
- css - 与有源无线电不同的 CSS 类
- javascript - 如何用两个值动态渲染/加载我的数组?
- scala - 在 Spark RDD 上调用 map(f).sum 时,Scala REPL 无限期挂起
- python - 如何使用python在Instagram上发布图片
- python-3.x - 有没有办法在分面图表或连接图表的所有子图表中显示工具提示,其中子图表通过选择“连接”?
- powershell - 在 powershell 中使用 7-zip
- python-3.x - 如何在弹出窗口中获取元素的 ID 或 xpath,以便在 python 中自动输入用户名和密码
- azure-devops - Azure Pipeline - 无法让 Pytest 工作
- python - Folium choropleth 地图没有从 geopandas 着色
- javascript - 提交表单但页面不会重新加载。防止默认()不工作