将条带与设计集成
Posted
技术标签:
【中文标题】将条带与设计集成【英文标题】:Integrating stripe with Devise 【发布时间】:2012-06-19 14:19:33 【问题描述】:我正在关注 railscast #288 on stripe,但我在设置条带隐藏令牌时遇到了一些困难。我正在使用带有简单表单集成的最新版本的设计。
这是我的注册控制器:
class RegistrationsController < Devise::RegistrationsController
def create
build_resource
if resource.save_with_payment
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#resource.inactive_message" if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
我的新用户注册表格:
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => :class => 'well' ) do |f| %>
<%= f.error_notification %>
<%= f.error_messages %>
<h3 class="center">Create your credentials for logging in:</h3><hr>
<div class="inputs">
<%= f.input :email, :required => true %>
<%= f.input :password, :required => true %>
<%= f.input :password_confirmation, :required => true %>
<h3 class="center">Are you a Shipper or a Carrier?</h3><hr>
<%= f.input :role, :collection => User::ROLES, :as => :radio_buttons %>
<%= f.input :stripe_card_token, :as => :hidden %>
</div>
<h3 class="center">Your Credit Card Information:</h3><hr>
<fieldset>
<div class="field">
<%= label_tag :card_number, "Credit Card Number" %>
<div class="input-prepend inline-block">
<span class="add-on"><strong>#</strong></span>
<%= text_field_tag :card_number, nil, name: nil %>
</div>
<div class="field">
<%= label_tag :card_code, "Security Code on Back of Card (CVV)" %>
<div class="input-prepend inline-block">
<span class="add-on icon-credit-card"></span>
<%= text_field_tag :card_code, nil, name: nil, :size => 4 %>
</div>
<div class="field">
<%= label_tag :card_month, "Card Expiration" %>
<%= select_month nil, add_month_numbers: true , name: nil, id: "card_month" %>
<%= select_year nil, start_year: Date.today.year, end_year: Date.today.year+15 ,
name: nil, id: "card_year" %>
</div>
<div id="stripe_error">
<noscript>javascript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
</div>
</fieldset>
<hr>
<%= f.input :terms, :as => :boolean, label: "* I have read and agreed to the terms of service" %>
<div class="actions">
<%= f.button :submit, "Sign up", class: "btn-large icon-thumbs-up" %>
</div>
<% end %>
我有一个具有以下属性的用户模型:
attr_accessible :email, :password, :password_confirmation, :remember_me, :role, :terms, :stripe_token, :stripe_card_token
最后是让这一切正常工作的咖啡脚本:
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
subscription.setupForm()
subscription =
setupForm: ->
$('#new_user').submit ->
$('input[type=submit]').attr('disabled', true)
if $('#card_number').length
subsciption.processCard()
false
else
true
processCard: ->
card =
number: $('#card_number').val()
cvc: $('#card_code').val()
expMonth: $('#card_month').val()
expYear: $('#card_year').val()
Stripe.createToken(card, subscription.handleStripeResponse)
handleStripeResponse: (status, response) ->
if status == 200
$('#user_stripe_card_token').val(response.id)
$('#new_user')[0].submit()
else
$('#stripe_error').text(response.error.message)
$('input[type=submit]').attr('disabled', false)
当我去创建一个新用户时,我的动作控制器给了我以下错误消息:
undefined method `stripe_card_token' for #<User:0x00000103fe7b90>
但是我不认为这应该是可能的,因为我已经在我的 user.rb 模型的 attr_accessible 调用中定义了这个方法。任何解释都会非常有帮助,因为我认为我已经完成了 90% 的设置。
【问题讨论】:
【参考方案1】:除非stripe_card_token
是用户表中的一个字段,否则您需要将其设为attr_accessor
(以及attr_accessible
)。
【讨论】:
这很有趣,我认为attr_accessible
也会做attr_accessor
。你知道为什么不是吗?谢谢以上是关于将条带与设计集成的主要内容,如果未能解决你的问题,请参考以下文章
与 Django rest 和 Angular/Cli 的条带集成
如何在 ASP.NET MVC 中将条带支付与自定义表单集成? [关闭]
Javascript / Jquery 将变量拆分为两个以进行条带集成