gpt4 book ai didi

javascript - 可以使用没有支付信息的 Stripe JS 创建 token

转载 作者:行者123 更新时间:2023-11-29 21:15:16 25 4
gpt4 key购买 nike

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

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

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

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

这可能吗?

相关文件

主机 Controller #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

Stripe 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>

最佳答案

创建没有任何卡片详细信息的卡片标记是没有意义的,因此这是不可能的。正如您所提到的,如果您尝试在没有必要参数(例如卡号或到期日期)的情况下创建 token ,您会收到 invalid_request_error 返回。

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

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

关于javascript - 可以使用没有支付信息的 Stripe JS 创建 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39662706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com