1

顧客を正常に作成した後、次の方法でオブジェクトを検査できます。

Rails.logger.debug("single card object has: #{customer.cards.data.card.inspect}")

次のようなjsonを返します。

#<Stripe: : Customer: 0x2801284>JSON: {
    "id": "cus_2WXxmvhBJgSmNY",
    "object": "customer",
    "cards": {
      "object": "list",
       "data": [
           {
              "id": "card_2WXxcCsdY0Jjav",
               "object": "card",
               "last4": "4242",
               "type": "Visa",
               "exp_month": 1,
               "exp_year": 2014,
           }
        ]
           },
     "default_card": "card_2WXxcCsdY0Jjav"
 }

しかし、私はCustomer.cards.data.last4を実行し 、NOMethodErrorを返します。

last4を削除してCustomer.cards.dataを呼び出すと、

#<Stripe: : Card: 0x1ed7dc0>JSON: {
      "id": "card_2Wmd80yQ76XZKH",
      "object": "card",
      "last4": "4242",
      "type": "Visa",
      "exp_month": 1,
      "exp_year": 2015,
 }

今、私はダイレクトカードオブジェクトを持っているようですが、もしそうなら

   card =  Customer.cards.data
   self.last4 = card.last4

まだnoMethodErrorが発生する

これが私のモデルの短縮版です:

     class Payment < ActiveRecord::Base
         def create_customer_in_stripe(params)
             if self.user.stripe_card_token.blank?
               user_email = self.user.email
               customer = Stripe::Customer.create(email: user_email, card: params[:token])
               card  = customer.cards.data

               self.card_last4  = card.last4
               self.card_type = card.type
               self.card_exp_month = card.exp_month
               self.card_exp_year = card.exp_year
               self.user.save
          end
          self.save!
       end
    end
4

4 に答える 4

2

customer.cardsは、名前が示すように、複数のカードを配列で返します。

Stripe::Card オブジェクトがないため、カード アクセサー メソッドを呼び出すことはできません。Stripe::Card オブジェクトの配列があります。customer.cards.first探している特定のカードを呼び出す (最も可能性の高い答え) か、配列を反復処理する必要があります。

Stripe::Card オブジェクトを取得すると、すべてのアクセサ メソッドが正しく機能します。

于 2013-09-07T15:22:48.190 に答える
1

cself.card_last4 = card.last4githubで検索するとき、gem自体にはメソッドがself.card_last4 = card["last4"]ないためです。last4私は使用しなければならないことを知っていますHash syntax

card上のすべてのメソッドでこの構文が必要になると思います。

編集:

したがって、モデルの last4 列が整数のように聞こえます。DBcard["last4"].to_iの文字列列への移行を実行または変更してください。

于 2013-09-07T12:07:12.347 に答える
1
card =  Customer.cards.data

self.last4 = card[0].last4
于 2013-09-07T15:40:06.527 に答える
0

customer.cardsのリストにあるレール「default_card」:「card_2WXxcCsdY0Jjav」でデフォルトのアクティブカードを取得するにはどうすればよいですか?

customer.cards をループして取得するよりも、より簡単な方法はありますか? ポインタはありますか?

これが疑問に思っている人にも役立つことを願っています:-)

default_active_card = customer.cards.data.detect{|obj| obj[:id] == customer.default_card}
于 2013-09-07T21:25:23.043 に答える