【问题标题】:Rails 4 - Parsing Stripe OutputRails 4 - 解析条带输出
【发布时间】:2014-11-20 20:12:19
【问题描述】:

我有下面的 Stripe 脚本,它可以从 Stripe 检索一些帐户信息。这是在 html.erb 页面上。

  <%= 
      require "stripe" 
      Stripe.api_key = ENV["STRIPE_API_KEY"] 
      Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6")
  %>

以上在我的html视图中的输出是:

{ "id": "rp_14xkLm12344CMLmVxUbW3A6", "object": "recipient", "created": 1415734250, "livemode": false, "type": "individual", "description": null, "email": null, "name": "Rob Smith", "verified": false, "metadata": {}, "active_account": {"id":"ba_14xkLj2Wc0ZCCMLmDrfCmjJH","object":"bank_account","last4":"6789","country":"US","currency":"usd","status":"new","fingerprint":"fsQXqyeIRbyqMsvW","bank_name":"BANK OF AMERICA, N.A.","default_for_currency":false,"disabled":false,"validated":false,"verified":false}, "cards": {"object":"list","total_count":0,"has_more":false,"url":"/v1/recipients/rp_14xkLm12344CMLmVxUbW3A6/cards","data":[],"count":0}, "default_card": null }

从上面,我想提取 4 列:名称、国家、银行名称、last4。

我尝试将变量名称添加到末尾,例如 Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6").name,但我收到错误消息,提示未定义局部变量名称。

更新代码:

  <%= require "stripe" 
      Stripe.api_key = ENV["STRIPE_API_KEY"] 
      rp = Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6")

      "Name: #{rp['name']}"
      "Bank Name: #{rp['bank_name']}"
      "Last 4 of Account Number: #{rp['last4']}"
  %>

当我只保留上面的名称行时,它可以工作。但是当我添加银行名称和最后 4 时,输出只是最后一行“帐号的最后 4”的文本

【问题讨论】:

    标签: ruby-on-rails stripe-payments


    【解决方案1】:

    错误可能在其他地方,因为Stripe::Recipient.retrieve 返回一个Stripe::Recipient 的实例,它确实有一个name 属性。

    除非您发布更详细的错误消息,否则我无法为您提供更详细的答案。

    【讨论】:

    • 那么Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6").name 应该可以工作吗?
    • 应该是的。您可以在控制台中尝试。如果它不起作用,您可能需要检查文档以了解您当前使用的 gem 的版本。
    【解决方案2】:

    试试

    recipient = Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6")
    recipient['name']
    

    说明:Stripe::Recipient.retrieve 返回类似哈希的值,而不是类似对象的值。所以你必须打电话给hash[:attribute] 而不是hash.attribute

    UPD: 将只打印最后一行。试试看:

    <% require "stripe" 
      Stripe.api_key = ENV["STRIPE_API_KEY"] 
      rp = Stripe::Recipient.retrieve("rp_14xkLm12344CMLmVxUbW3A6")
    %>
    <%= "Name: #{rp['name']}" %>
    <%= "Bank Name: #{rp['bank_name']}" %>
    <%= "Last 4 of Account Number: #{rp['last4']}" %>
    

    或者使用助手。

    UPD2: 你真的需要require 'stripe' 电话吗?我用过条纹宝石,但不记得我根本不需要它。并且设置 Stripe.api_key 应该属于初始化程序,而不是查看。

    【讨论】:

    • 实际上将 Ruby 代码放在 HTML 中是一种不好的做法。尝试将条带要求和接收者获取代码移动到控制器甚至服务以使其更清洁。
    • 我更新了你的答案。银行和账户信息在不同的对象中,所以我不得不以不同的方式称呼它们。感谢您为我指明正确的方向。由于这是在一个 html 文件中,我不确定在哪里放置需要代码?这是一个用户特定的视图,所以我应该把它放在用户控制器的顶部吗?
    • 被拒绝。你想把 rp.name 而不是 rp['name'] 放回去,这会破坏你的代码。
    • 它虽然有效。它会在某些情况下引起问题吗?我更改了它,因为我不确定如何在银行列中使用第二个对象调用。我用 .它奏效了。
    • 您最初的问题是为什么rp.name 不起作用。我已经向你展示了这有什么问题,并解释了你应该使用 `rp['name']。然后你做了另一个修复。现在你想做其他事情,这可能会再次为某人打破它。
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 2016-04-28
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2022-01-12
    相关资源
    最近更新 更多