我正在尝试通过一个Public应用程序连接到Xero API,我有一个单独的进程来执行oAuth流,该流存储令牌和令牌机密,然后我将其转用于此脚本。
我的问题是,当我在HTTParty调用中使用该令牌时,我不断收到Consumer_key_unknown错误,我不知道为什么。
脚本;
require 'httparty'
def nonce_generator()
random = Random.new
random.rand(100000000000)
end
//statics for testing
XERO_API_URL = 'https://api.xero.com/api.xro/2.0/'
TOKEN = "token received back from initial oauth process"
TOKEN_SECRET = "token secret received back from initial oauth process"
XERO_CONS_KEY = "my cons key per Xero Developer/Applications page"
XERO_CONS_SECRET = "my cons secret per Xero Developer/Applications page"
AUTH = "oauth_consumer_key=#{XERO_CONS_KEY}&
oauth_token=#{TOKEN}&
oauth_token_secret=#{TOKEN_SECRET}&
oauth_signature_method=RSA-SHA1&
oauth_timestamp=#{Time.now.to_i}&
oauth_nonce=#{nonce_generator()}"
//test it works
xero_accounts = HTTParty.get("#{XERO_API_URL}/accounts", :headers => { "Authorization" => AUTH }, "Accept" => "application/json")
注意:为了便于查看,我在这里将AUTH分为多行,它们都在我的脚本中的一行。
我试着把AUTH换成两者中的任何一个;
AUTH = "Token #{TOKEN}"
AUTH = "Bearer #{TOKEN}"
没有效果。我在Kounta API中使用了类似的脚本,它通过Bearer令牌工作。
我曾考虑过使用Xeroizer/Xero网关宝石,但两者的构建目的都是为您完成oAuth并将其发扬光大,而我已经将其作为一个单独的过程来完成了。
欢迎任何评论!
放弃了以这种方式进行分类的尝试,并对宝石进行了筛选,直到我找到了一个有效的授权访问令牌方法;
require 'xeroizer'
client = Xeroizer::PublicApplication.new(XERO_CONS_KEY, XERO_CONS_SECRET)
client.authorize_from_access(TOKEN, TOKEN_SECRET)
puts client.Organisation.all