【问题标题】:plaid ruby gem: exchange token throwing 'provided public token is in an invalid format' error格子红宝石:交换令牌抛出“提供的公共令牌格式无效”错误
【发布时间】:2020-02-13 13:10:31
【问题描述】:

我在 React 中使用 Link 来链接到 Items,然后将 public_token 传递到我的 rails 服务器,我试图将公共令牌交换为访问令牌。 Link 已成功将公共令牌返回给我,看起来像 public-sandbox-6df92f82-3260-4cb4-8489-65e6ac955e7a,我将其传递给我的 rails 服务器,在那里我使用 plaid-ruby gem 尝试交换令牌。但是,我收到了 INVALID_INPUT 错误。

格子红宝石代码 (params["plaidToken"] == public-sandbox-6df92f82-3260-4cb4-8489-65e6ac955e7a):

  def set_plaid_token
    client = Plaid::Client.new(env: :sandbox,
                               client_id: '*******',
                               secret: '*******',
                               public_key: params["plaidToken"])

    exchange_token_response = client.item.public_token.exchange('[Plaid Link public_token]')
    access_token = exchange_token_response.access_token

    #TODO users can add same bank twice.
    user = UserToken.find_by(token: params["userToken"]).user
    token = UserToken.new(user_id: user.id, token: access_token, token_type: "plaid_token")
    token.save
  end

下面的错误消息只是告诉我格式化令牌,就像它已经格式化一样,所以我不确定还有什么问题。

错误信息:

Plaid::InvalidInputError (
Error Type      : INVALID_INPUT
Error Code      : INVALID_PUBLIC_TOKEN
Error Message   : provided public token is in an invalid format. expected format: public-<environment>-<identifier>
Display Message : 
Request ID      : vaAqIgjQNZ2Zj07
):

【问题讨论】:

  • .exchange('[Plaid Link public_token]') 是字面意思吗?如果是这样,这是不正确的,我相信您应该提交您的“params [”plaidToken“]”(例如client.item.public_token.exchange(params["plaidToken"]))。 public_key 应该来自 "...your Plaid dashboard" 根据Docs

标签: ruby-on-rails ruby plaid


【解决方案1】:

public_key 中,您必须使用 Plaid 帐户中列出的密钥。 https://dashboard.plaid.com/account/keys

def set_plaid_token
  public_token = params[:plaid_token]

  client = Plaid::Client.new(env: :sandbox,
                       client_id: ENV['plaid_client_id'],
                          secret: ENV['plaid_secret'],
                      public_key: ENV['plaid_public_key'])

  exchange_token_response = client.item.public_token.exchange(public_token)
  access_token = exchange_token_response.access_token
  ...
end

链接:

let linkHandler = Plaid.create({
    clientName: 'Name',
    env: 'sandbox',
    key: 'your-public-key-from-dashboard',
    product: ['auth'],
    onSuccess: function(public_token, metadata) {
      $.post('/plaid/set_plaid_token', {
          plaid_token: public_token
      });
      console.log('Pub tok = ' + public_token);
      console.log('Account = ' + metadata.account_id);
    }
});

document.getElementById('linkButton').onclick = function() {
   linkHandler.open();
};

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2018-08-20
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多