如何从Stripe api调用访问JSON返回的元素?

问题描述 投票:0回答:1

我正在使用红宝石和sinatra。在Stripe API调用之后,我想从JSON返回访问一个元素,并将其放入我的数据库中。

ruby代码是:

要求'sinatra'

require 'stripe'
require 'pg'
require 'sequel'

get '/save_customer' do
customer = Stripe::Customer.retrieve("cus_6EfJSbJ8gCTxxx")
puts customer
last4 = customer["sources"]["data"]["last4"]
DB[:stripe_customers].insert(:user_id=>user_id, :email=>email, :stripe_customer_id=>customer_id, :stripe_customer_card=> last4)
end

JSON(取自API文档,而不是我的回复)如下:

{
  "object": "customer",
  "created": 1431570089,
  "id": "cus_6EfJSbJ8gCTxxx",
  "livemode": false,
  "description": "Example customer",
  "email": null,
  "delinquent": false,
  "metadata": {
  },
  "subscriptions": {
    "object": "list",
    "total_count": 0,
    "has_more": false,
    "url": "/v1/customers/cus_6EfJSbJ8gCTMrd/subscriptions",
    "data": [

    ]
  },
  "discount": null,
  "account_balance": 0,
  "currency": "usd",
  "sources": {
    "object": "list",
    "total_count": 1,
    "has_more": false,
    "url": "/v1/customers/cus_6EfJSbJ8gCTMrd/sources",
    "data": [
      {
        "id": "card_162ByRBVd5ndD62KfaONcG4G",
        "object": "card",
        "last4": "4242",
        "brand": "Visa",
        "funding": "credit",
        "exp_month": 12,
        "exp_year": 2018,
        "country": "US",
        "name": null,
        "address_line1": null,
        "address_line2": null,
        "address_city": null,
        "address_state": null,
        "address_zip": "123456",
        "address_country": null,
        "cvc_check": "pass",
        "address_line1_check": null,
        "address_zip_check": "pass",
        "dynamic_last4": null,
        "metadata": {
        },
        "customer": "cus_6EfJSbJ8gCTxxx"
      }

我试过了:

last4 = customer[:data][:sources][:last4]

和上面的""一样。

错误信息有所不同,目前TypeError - no implicit conversion of String into Integer。我假设这是因为我没有正确提取我需要的元素,或者它可能意味着api调用不起作用但我认为它确实如此。

ruby sinatra stripe-payments
1个回答
0
投票

试试这个:

last4 = customer["sources"]["data"][0]["last4"]
© www.soinside.com 2019 - 2024. All rights reserved.