首页 > 解决方案 > 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

标签: rhttpxero-api

解决方案


看起来你很接近。就像 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


推荐阅读