【发布时间】: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