【问题标题】:Possible to create Token with Stripe JS with no payment information可以在没有付款信息的情况下使用 Stripe JS 创建令牌
【发布时间】:2017-02-01 10:16:48
【问题描述】:

我有一个客户想要免费订阅 Stripe。目前,他们的应用程序设置为获取 CC 信息,因为他们的旧计划确实需要按月付费。

我想知道是否可以通过 Stripe JS 创建 Stripe 客户令牌,而无需从用户那里获取任何类型的 CC 信息/银行帐户等?

我尝试使用 jQuery 删除 CC 字段,但我不断收到 Stripe Invalid Request 错误,因为它找不到付款信息。

总而言之,当用户从下拉列表中选择“免费”计划时,他们不应该看到 CC 字段,并且他们应该能够在没有任何 Stripe 验证的情况下继续通过注册页面,同时还可以创建他们的客户令牌。

这可能吗?

相关文件

主机控制器#create

  def create
    @host = User.new(host_params)

    if @host.valid?
      customer = Stripe::Customer.create(
        stripe_params.merge(email: host_params[:email], coupon: coupon)
      )

      @host.update(
        stripe_customer_id: customer[:id],
        subscription_plan: stripe_params[:plan]
      )

      sign_in(:user, @host)

      redirect_to dashboard_path, notice: t('notices.hosts.created')
    else
      render :new
    end
  rescue Stripe::CardError, Stripe::InvalidRequestError => error
    render :new, alert: error.message
  end

条带化 JS 代码

$(document).on 'ready page:load', ->
    $cardFields = $('#credit-card-fields')
    $parentForm = $cardFields.parents('form')
    $parentBtn  = $('.js-payment-btn', $parentForm)

    return unless $parentForm.length

    $parentBtn.on 'click', (event) ->
      event.preventDefault()

      pub_key = $('meta[name=stripe-publishable-key]').attr('content')

      $parentBtn.prop('disabled', true)

      Stripe.setPublishableKey(pub_key)

      Stripe.card.createToken $parentForm, (status, response) ->
        if response.error
          $parentForm.find('.payment-errors').text(response.error.message)
          $parentBtn.prop('disabled', false)
        else
          token = response.id
S>        $parentForm.append($('<input type="hidden" name="stripe[source]" />').val(token))
          $parentForm.get(0).submit()

Stripe JS 表单

<script type="text/javascript" src="https://js.stripe.com/v2/" data-turbolinks-track="true"></script>

<div class="clearfix" id="credit-card-fields">
  <span class="payment-errors"></span>

  <div class="form-group">
    <div class="input-group">
      <span class="input-group-addon icon icon-credit-card"></span>
      <input id="card-number" class="form-control input-cc" required placeholder="Card Number" type="text" size="16" maxlength=16 data-stripe="number" />
    </div>
  </div>

  <div class="form-group side-by-side">
    <div class="input-group">
      <span class="input-group-addon icon icon-calendar"></span>
      <input id="card-month" class="form-control input-exp" required placeholder="MM" type="text" size="2" maxlength="2" data-stripe="exp-month" />
      <input id="card-year" class="form-control input-exp" required placeholder="YY" type="text" size="2" maxlength="2" data-stripe="exp-year" />
    </div>
  </div>

  <div class="form-group side-by-side">
    <div class="input-group">
      <span class="input-group-addon icon icon-lock"></span>
      <input id="card-cvc" class="form-control input-cvv" required placeholder="CVC" type="text" size="4" maxlength="4" data-stripe="cvc" />
    </div>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery ruby-on-rails stripe-payments


    【解决方案1】:

    在没有任何卡片详细信息的情况下创建卡片令牌是没有意义的,因此这是不可能的。正如您所提到的,如果您尝试创建一个没有所需参数(例如卡号或到期日期)的令牌,您会得到一个 invalid_request_error 回复。

    如果您不想要求提供卡详细信息,那么您不应该创建令牌。当有人尝试订阅免费计划时,您无需创建令牌,只需收集您想要的其余信息,例如客户的电子邮件地址或姓名。然后在服务器端,您将调用Create Customer API 并在plan 参数中传递计划ID 来订阅它们。

    如果计划是免费的,则无需传递令牌,您可以完全忽略 source 参数。

    【讨论】:

    • 酷,在 #create 操作中调用了 Customer api。有没有办法排除或忽略条带参数哈希中的源参数?我查看了#except,但它似乎并没有摆脱参数。
    • 只是不要发送它,因为它不是必需的。这是您自己的代码,因此您可以决定发送给 Stripe 的参数!
    • 感谢您的帮助!
    猜你喜欢
    • 2015-09-19
    • 2023-03-27
    • 2018-10-09
    • 2021-05-16
    • 2015-01-04
    • 2023-03-22
    • 2017-12-11
    • 2015-03-02
    • 2019-10-24
    相关资源
    最近更新 更多