简体   繁体   中英

I am trying to integrate Xero API to ruby on rails however am unable to access the Token Set

I am integrating Xero API into my ruby on rails application, however when trying to get a Token Set I am getting the below error:

*** XeroRuby::ApiError Exception: Error message: the server returns an error

HTTP status code: 400

Response headers: {"content-type"=>"application/json; charset=UTF-8", "server"=>"nginx", "xero-origin-id"=>"IdentityServer.Web", "xero-causation-id"=>"63c9c7b03d7f435aa5dd801d96e8c152", "xero-message-id"=>"9e6951801da040ac94f61ab3392e3feb", "xero-activity-id"=>"adbfa8002310478c9d223f71e47b5b17", "xero-correlation-id"=>"6069553f3b9843f992e54f59f7bde8c0", "content-length"=>"26", "expires"=>"Wed, 01 Feb 2023 12:40:41 GMT", "cache-control"=>"max-age=0, no-cache, no-store", "pragma"=>"no-cache", "date"=>"Wed, 01 Feb 2023 12:40:41 GMT", "connection"=>"close", "set-cookie"=>"Device=961bc311701f4e20a0a2a7c0b6900dad; expires=Tue, 01 Feb 2028 12:40:41 GMT; path=/; samesite=none; httponly, _abck=CF3C26F9436304BF37101493FFAD83AF~-1~YAAQscNQaDKxnNKFAQAAPFz+DAnlKYqiZGnjCEbMvoyet1jSR8zH92SopvoLwB4qij7m04HY3vz38HatmtYuYAgN43HShtEj4miB94A9kiGQvrTNgMw9fNcpXV5sZ7JVNARjYdFjRYo0hU/n+qpWeEFH5OgBb8gzYVcOP5KqhPLgOd2ctiJrhmWiEmaeNZVbKj/spi60wt24oTv4jeWSplHq+i1LIzvPWLsVSU8RGKddmx+w7QnmtuWgbogouQljdvXS2Hrp9jDQsQXbvC9cWLy7A4AINQy7DLKP53mRgbqhdl7rG4Zyy8Bkv8nuxJvboM1MmdmorDngUVMNKkxpfdrWfJB5dv1Dbs3BOxJS2s9lRN56ugyI~-1~-1~-1; Domain=.xero.com; Path=/; Expires=Thu, 01 Feb 2024 12:40:41 GMT; Max-Age=31536000; Secure, bm_sz=D5B91089FE0B5C15AAF78A78C3DC4631~YAAQscNQaDOxnNKFAQAAPFz+DBKO2MjN+su/jV34lpo0F8Da/HIe1gG6gWfP7mzR6F7LwAPpRmm2lbXSjxw8/92CaTTcdsebzypKwiiowvOYOOI5/2TdwwcrU2bLSe9jN9YgUIS5izdAcysuz8S4pjx5OnNVe1HvhmUOeX8P/njVXeF7sQbFwmoAz3HyAO2AbJK0FGybHT8Spbfujl91GJ8+8YUf8voUQObj8r7o3K3GbWCycMG0lp6yupNoF7qfkPEuIl2vzMNCF0m2ZLH9a+akzpzc14KqjSwuz3k+++NK~3551286~3225656; Domain=.xero.com; Path=/; Expires=Wed, 01 Feb 2023 16:40:41 GMT; Max-Age=14400"}

Response body: {"error":"invalid_client"}

Please see the command below which I used to try an receive the Token Set:

@token_set = @xero_client.get_token_set_from_callback(params[:code])

class HomeController < ApplicationController
  def index
    require 'xero-ruby'
    require 'httparty'
    creds = {
      client_id: '...',
      client_secret: '...',
      redirect_uri: 'http://localhost:3000/login',
      scopes: 'accounting.attachments',
      state: "Optional value to pass through auth flow"
    }
    config = { timeout: 30, debugging: true }
    @xero_client ||= XeroRuby::ApiClient.new(credentials: creds, config: config)
    @authorization_url = @xero_client.authorization_url
  end
end

Login controller:

class LoginController < ApplicationController
  def index
    require 'xero-ruby'
    creds = {
      client_id: '...',
      client_secret: '...',
      redirect_uri: 'http://localhost:3000/login',
      scopes: 'accounting.attachments',
      state: "Optional value to pass through auth flow"
    }
    config = { timeout: 30, debugging: true }
    @xero_client ||= XeroRuby::ApiClient.new(credentials: creds, config: config)
    byebug
    @token_set = @xero_client.get_token_set_from_callback(params[:code])
  end
end

Please can you check your client secret as the error linked to the Xero correlation id is "Client secret validation failed for client"

It may be best to generate a new one from developer.xero.com and then replace this into your code.

We also have a sample app you can use if this makes it easier https://github.com/XeroAPI/Xero-ruby-oauth2-app

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM