如何更新 STRIPE CHECKOUT SESSION 属性 RAILS

问题描述 投票:0回答:2

在 Rails 5 中,我在订单控制器的 show 操作中创建了一个 stripe 会话。我还有一个更新操作,用于处理用户是否为该订单选择送货或提货。在更新方法中,我尝试通过添加shipping_address_collection属性来更新stripe会话,以便stripe结账页面显示送货地址区域。我设法正确修改条带会话对象,但没有保存它。我有一个:

NoMethodError (undefined method `save' for #<Stripe::Checkout::Session:0x00007fb60fe5f138>

订单控制器:

def show
 @session = Stripe::Checkout::Session.create(
      payment_method_types: ['card'],

      customer: customer.id,

      line_items: line_items_order,

      success_url: order_messages_url(@order),
      cancel_url:  order_failure_message_url(@order)
      )

       @user.stripe_id = customer.id
       @user.save


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

def update
 @order = Order.find(params[:id])
 @session = Stripe::Checkout::Session.retrieve("#{@order.checkout_session_id}")
 
    if @order.collect_address == nil && @order.shipping_zone != nil

    allowed_countries_item = {:allowed_countries => ['GB', 'BE', 'CZ', 'FR', 'DK', 'DE', 'EE', 'IE', 'HR', 'IT', 'CY', 'LV', 'LT', 'LU', 'HU', 'MT', 'NL', 'AT', 'PL', 'RO', 'SI', 'SK', 'FI', 'SE', 'IS', 'LI', 'NO', 'CH', 'PT', 'ES', 'ME', 'MK', 'AL', 'RS', 'TR', 'DZ', 'MA', 'IL']}
    @session[:shipping_address_collection] = allowed_countries_item
    @session.shipping_address_collection.save
    end

    @order.save
    redirect_to order_path(@order)
  end

有没有办法做到这一点,或者我应该根据我想要的属性创建 2 个不同的会话?

ruby-on-rails session attributes stripe-payments checkout
2个回答
6
投票

Stripe Checkout 会话无法更新。 API 只允许您创建、检索和列出它们。 您需要创建一个新会话,而不是尝试更新现有会话。


0
投票

在旧版本的 Stripe API 中,不支持更新结账会话。但是,使用较新的版本,现在可以更新现有会话。

要在 Ruby 中更新结帐会话,您可以使用以下代码片段:

Stripe::Checkout::Session.update(
  'cs_test_session_id',
  {metadata: {order_id: '6735'}},
)

此示例使用 order_id 的新元数据字段更新会话。有关可以更新的参数以及如何使用该方法的更多详细信息,请参阅 Stripe 官方文档。

https://docs.stripe.com/api/checkout/sessions/update?lang=ruby

确保您的 Stripe gem 已更新到最新版本才能利用此功能!

© www.soinside.com 2019 - 2024. All rights reserved.