【问题标题】:use conditional to pass one or the other parameter to Stripe使用条件将一个或另一个参数传递给 Stripe
【发布时间】:2022-01-05 00:06:33
【问题描述】:

我正在开发 Ruby on Rails 中的 CheckOutSession,现在我可以使用 Checkout 流程,我正在努力识别我的用户。

因此,用户必须先通过 Devise 登录,然后才能启动到 Stripe 的结帐会话。我有这部分:

customer_email: current_user.email

在代码中。然后一旦用户支付成功,我可以从成功操作中捕获 JSON 并获取 Stripe 创建的客户 ID,并将其存储为 current_user.stripe_ip(我在这里不小心将我的虚拟应用程序中的字段 ip 命名为应该是id)

customer: current_user.stripe_ip

问题是:Stripe 只允许您将customer_emailcustomer 传递给结帐会话。如果是我这边的新用户,他们在条带那边还没有Customer ID

如何为该参数设置条件?这是我尝试过的:

def create_checkout_session
        session = Stripe::Checkout::Session.create({
            [if current_user.stripe_ip.nil?
              customer_email: current_user.email
            else
              customer: current_user.stripe_ip
            end],
            line_items: [{
                price_data: {
                    currency: 'usd',
                    product_data: {
                    name: 'T-shirt S Black',
                },
                unit_amount: 2000
                },
                adjustable_quantity: {
                    enabled: true, 
                    maximum: 10
                },
                quantity: 1,
            }, 
            mode: 'payment',
            # These placeholder URLs will be replaced in a following step.
            success_url: "http://localhost:3000/success?session_id={CHECKOUT_SESSION_ID}",
            cancel_url: "http://localhost:3000/"
        })


        redirect_to session.url
    end

【问题讨论】:

  • 嗨帕特里克。有时间请过去stackoverflow.com/help/someone-answers。注意到您问了几个问题,但没有选择任何答案作为接受。谢谢。
  • 谢谢,有人在另一个线程上指出了这一点,所以我只是想出了如何做到这一点并浏览了我最近的一些。
  • 没问题,感谢您浏览它们。

标签: ruby-on-rails stripe-payments


【解决方案1】:

您需要提取发送给.create 的所有内容并在将其传回之前对其进行操作。

def create_checkout_session
  data = {
    line_items: [{
      price_data: {
        currency: 'usd',
        product_data: {
        name: 'T-shirt S Black',
      },
      unit_amount: 2000
      },
      adjustable_quantity: {
        enabled: true,
        maximum: 10
      },
      quantity: 1,
    }],
    mode: 'payment',
    # These placeholder URLs will be replaced in a following step.
    success_url: "http://localhost:3000/success?session_id={CHECKOUT_SESSION_ID}",
    cancel_url: "http://localhost:3000/"
  }

  if current_user.stripe_ip.nil?
    data[:customer_email] = current_user.email
  else
    data[:customer] = current_user.stripe_ip
  end

  session = Stripe::Checkout::Session.create(data)

  redirect_to session.url
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多