条纹令牌没有返回到我的表单
stripeToken is not being returned to my form
我的 Stripe
集成设置正确,因为它确实返回了一个错误This customer has no attached payment source
这是一个 Stripe 错误,表明表单没有返回足够的付款信息。
这是我subscriptions.js.coffee
:
stripeResponseHandler = (status, response) ->
$form = $('#payment-form')
if response.error
#Show the errors on the form
$form.find('.payment-errors').text response.error.message
$form.find('button').prop 'disabled', false
else
# response contains id and card, which contains additional card details
token = response.id
#Insert the token into the form so it gets submitted to the server
$form.append $('<input type="hidden" name="stripeToken" />').val(token)
# and submit
$form.get(0).submit()
return
jQuery ($) ->
$('payment-form').submit (event) ->
$form = $(this)
$form.find('button').attr 'disabled', true
Stripe.card.createToken $form, stripeResponseHandler
false
return
这是我在new.html.erb
的表格:
<% unless @subscription.errors.blank? %>
<%= @subscription.errors.full_messages.to_sentence %>
<% end %>
<h2>Subcribing to <%= @plan.name %></h2>
<%= form_for @subscription, html: {id: 'payment-form'} do |f| %>
<input type="hidden" name="plan_id", value="<%= @plan.id %>" />
<span class="payment-errors"></span>
<div class="form-row">
<label>
<span>Email Address</span>
<input type="email" size="20" name="email_address" />
</label>
</div>
<div class="form-row">
<label>
<span>Card Number</span>
<input type="text" size="20" data-stripe="number" />
</label>
</div>
<div class="form-row">
<label>
<span>CVC</span>
<input type="text" size="4" data-stripe="cvc" />
</label>
</div>
<div class="form-row">
<label>
<span>Expiration (MM/YYYY)</span>
<input type="text" size="2" data-stripe="exp-month" />
</label>
<span> / </span>
<input type="text" size="4" data-stripe="exp-year" />
</div>
<button type="submit">Pay Now</button>
<% end %>
这是SubscriptionsController#Create
:
def create
@plan = Plan.find(params[:plan_id])
@subscription = CreateSubscription.call(
@plan,
params[:email_address],
params[:stripeToken]
)
if @subscription.errors.blank?
flash[:notice] = "Thank you for your purchase! Please click the link in the email we just sent you to get started."
redirect_to authenticated_root_path
else
render :new
end
end
上面称之为app/services/create_subscription.rb
:
class CreateSubscription
def self.call(plan, email_address, token)
user, raw_token = CreateUser.call(email_address)
subscription = Subscription.new(
plan: plan,
user: user
)
begin
stripe_sub = nil
if user.stripe_customer_id.blank?
binding.pry
customer = Stripe::Customer.create(
source: token,
email: user.email,
plan: plan.stripe_id
)
user.stripe_customer_id = customer.id
user.save!
stripe_sub = customer.subscriptions.first
else
customer = Stripe::Customer.retrieve(user.stripe_customer_id)
stripe_sub = customer.subscriptions.create(
plan: plan.stripe_id
)
end
subscription.stripe_id = stripe_sub.id
subscription.save!
rescue Stripe::StripeError => e
subscription.errors[:base] << e.message
end
subscription
end
end
我知道表单没有收到stripeToken
的原因是,当我在该create
中使用binding.pry
并执行以下操作时:
00:52:31 web.1 | 14: def create
00:52:31 web.1 | 15: @plan = Plan.find(params[:plan_id])
00:52:31 web.1 | => 16: binding.pry
00:52:31 web.1 | 17: @subscription = CreateSubscription.call(
00:52:31 web.1 | 18: @plan,
00:52:31 web.1 | 19: params[:email_address],
00:52:31 web.1 | 20: params[:stripeToken]
00:52:31 web.1 | 21: )
00:52:31 web.1 | 22: if @subscription.errors.blank?
00:52:31 web.1 | 23: flash[:notice] = "Thank you for your purchase! Please click the link in the email we just sent you to get started."
00:52:31 web.1 | 24: redirect_to authenticated_root_path
00:52:31 web.1 | 25: else
00:52:31 web.1 | 26: render :new
00:52:31 web.1 | 27: end
00:52:31 web.1 | 28: end
00:52:31 web.1 |
[1] pry(#<SubscriptionsController>)> params
00:52:37 web.1 | => {"utf8"=>"✓", "plan_id"=>"1", "email_address"=>"someuser@test.com", "action"=>"create", "controller"=>"subscriptions"}
请注意,没有params[:stripeToken]
。
另外,当我在create_subscription.rb
服务中尝试binding.pry
时,我得到的是:
00:52:41 web.1 | 10: begin
00:52:41 web.1 | 11: stripe_sub = nil
00:52:41 web.1 | 12: if user.stripe_customer_id.blank?
00:52:41 web.1 | => 13: binding.pry
00:52:41 web.1 | 14: customer = Stripe::Customer.create(
00:52:41 web.1 | 15: source: token,
00:52:41 web.1 | 16: email: user.email,
00:52:41 web.1 | 17: plan: plan.stripe_id
00:52:41 web.1 | 18: )
00:52:41 web.1 |
[1] pry(CreateSubscription)> token
00:52:44 web.1 | => nil
可能导致此问题的原因是什么,我该如何解决?
事实证明,我的问题是一个愚蠢的错误。
请注意,在我的 CoffeeScript 中,我有这个:
jQuery ($) ->
$('payment-form').submit (event) ->
$form = $(this)
$form.find('button').attr 'disabled', true
Stripe.card.createToken $form, stripeResponseHandler
false
return
问题出在表单选择器中。我没有将#
添加到表单的 ID 中。
所以一旦我改变了这一行:
$('payment-form').submit (event) ->
对此:
$('#payment-form').submit (event) ->
它就像一个魅力。
咚!打脸
相关文章:
- 我的表单上的SpringWebFlow2中的每个转换都需要隐藏按钮吗
- 当我的表单中已经有一个操作时添加JavaScript
- 我的表单未将访问者引导至正确的页面
- 为什么不是'当试图使用Ajax和外部PHP文件发布内容时,我的表单工作不正常,该文件接收两个字符串
- jqBootstrapValidation插件不适用于我的表单
- 为什么我的表单需要两(2)次点击才能使用jQueryValidate提交
- 为什么我的表单没有'它不起作用's在ng的内部重复
- 我需要在不使用JavaScript的情况下验证我的表单
- 为什么在 Chrome 中按回车键时我的表单没有提交
- 条纹令牌没有返回到我的表单
- 如何将我的表单值放在 javascript 数组中
- 我刚刚开始使用 MEAN 堆栈.我试图将我的表单提交数据存储到 mongo 数据库,但我无法这样做
- jquery链接到输入到我的表单中的链接技巧
- 我的表单没有将参数存储在模型中
- 我的表单中文本区域的最小长度
- 如何使用 JavaScript 验证我的表单
- 如何在 Dreamweaver 上为我的表单创建摘要页面
- 如何使用此示例使用 javascript 将代码添加到我的表单标签中
- 图像未显示在 PHP 中的我的表单中
- 在春季 MVC 中验证我的表单