【问题标题】:Stripe retrieve customer Rails5条纹检索客户 Rails5
【发布时间】:2021-03-24 11:02:08
【问题描述】:

我希望 Stripe 检查客户是否已经存在,如果存在,将其关联到结帐会话。

    class OrdersController < ApplicationController

        @session = Stripe::Checkout::Session.create(
          payment_method_types: ['card'],
    
          shipping_address_collection: {
            allowed_countries: ['GB']
          },
          customer_email: current_user.email,
    
          line_items: line_items_order,
    
          success_url: new_order_message_url(@order),
          cancel_url: order_url(@order)
        )
    
        if @user.stripe_id != nil
           Stripe::Customer.retrieve(@user.stripe_id)
           @session.customer = customer.id
           @session.customer_email =customer.email
    
        else
    
        customer = Stripe::Customer.create({
          email: current_user.email,
          name: current_user.username,
          metadata: {
          },
        })
    
         @user.stripe_id = customer.id
         @user.save
    
      end


   @order.checkout_session_id = @session.id
   @order.save
  end

我检查了 byebug 并看到 Stripe::Customer.retrieve(@user.stripe_id) 正在工作,Stripe API 能够找到正确的客户,但仍然为每个结帐会话创建一个新客户。我已阅读有关会话 objetc 的文档并发现有关客户属性的信息:

客户属性: 此会话的客户 ID。对于付款或订阅模式下的 Checkout Session,Checkout 将根据付款流程中提供的信息创建一个新的客户对象,除非在创建 Session 时提供了现有客户。

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails stripe-payments checkout customer


    【解决方案1】:

    问题是您在没有传递客户的情况下致电Stripe::Checkout::Session.create。如客户文档中所述,如果您想使用现有客户,则应在创建会话时传递它

    客户字符串可扩展

    此会话的客户 ID。对于结帐会话 付款或订阅模式,Checkout 将创建一个新客户 对象基于在支付流程中提供的信息,除非 现有客户是在创建会话时提供的。

    所以只要确保你在 create 方法中有客户

    @session = Stripe::Checkout::Session.create(
      customer: customer.id
      ...
    )
    
    

    【讨论】:

    • 谢谢@Daniel ;))
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2018-11-24
    • 2017-11-18
    • 2021-09-27
    • 2015-10-03
    • 1970-01-01
    • 2022-06-10
    • 2013-12-08
    相关资源
    最近更新 更多