NoMethodError `sources' for #<Stripe::Customer with Rails

NoMethodError `sources' for #<Stripe::Customer with Rails

当我尝试从 Stripe 客户那里接收数据时,我收到错误未定义方法 'sources'。

这是我使用的代码:

    def update_payment 
    
    if !current_user.stripe_id
      customer = Stripe::Customer.create(
        email: current_user.email,
        source: params[:stripeToken]
      )
    else
      customer = Stripe::Customer.update(
        current_user.stripe_id,
        source: params[:stripeToken]
      )
    end


    if current_user.update(stripe_id: customer.id, stripe_last_4: customer.sources.data.first["last4"])
      flash[:notice] = "New card is saved"
    else
      flash[:alert] = "Invalid card"
    end
    redirect_to request.referrer
  rescue Stripe::CardError => e
    flash[:alert] = e.message
    redirect_to request.referrer
  end

客户变量的输出不为空,所以我不明白为什么会出现这个错误。

sources 在 Stripe API 中不再默认提供,因为它是一个已弃用的集成路径:https://stripe.com/docs/api/customers/object?lang=ruby#customer_object-sources

您需要明确声明您希望 sources 参数通过展开返回。例如

cust = Stripe::Customer.create({
  email: 'example@test.com',
  source: 'tok_visa',
  expand: ['sources']
})

// cust.sources is now populated
puts cust.sources

sources 属性现在是可选的。 为了将来源作为响应的一部分,您需要对其进行扩展。 将来源字段添加到 Stripe Create Customer。

示例:

customer = Stripe::Customer.create(
 email: current_user.email,
 source: params[:stripeToken],
 expand: ['sources']
)