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
card =  Customer.cards.data

self.last4 = card[0].last4
于 2013-09-07T15:40:06.527 回答
1

cself.card_last4 = card.last4应该是因为gem本身在github上搜索时self.card_last4 = card["last4"]没有方法。last4我知道我必须使用Hash syntax.

我有一种感觉,你所有的方法card都需要这种语法。

编辑:

所以听起来你的模型的 last4 列是一个整数,执行card["last4"].to_i或更改迁移到数据库中的字符串列。

于 2013-09-07T12:07:12.347 回答
0

您如何在 customer.cards 列表中获取 rails "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 回答