【发布时间】:2017-10-07 18:49:07
【问题描述】:
按照这个 railscast 教程http://railscasts.com/episodes/288-billing-with-stripe,我已经成功地在我的 rails 应用程序中实现了条带信用卡处理 (Stripe api v2)。设置表单样式后,我开始收到以下错误:
您的信用卡有问题。无效的源对象:必须是字典或非空字符串。请参阅https://stripe.com/docs'的 API 文档
在我的控制台中,我可以看到 stripe_card_token 正在作为任何空值提交
Parameters: {"utf8"=>"✓", "authenticity_token"=>"zCP+nFHj3JC0ZyceWOf9D+Vx6wZRfKA0LmZqL7faGzaM1E/k7GgKHCygCktH6mqe3oFNG1tqRpJpjKB728KE0g==", "subscription"=>{"stripe_card_token"=>"", "email"=>"test@outlook.com"}, "commit"=>"Create
我之前遇到过这个错误并通过从 application.js 中删除 require_tree 来解决它,但错误不断再次出现
我还尝试禁用其他线程中建议的 turbolinks。
这是我的提交表格:
<div ng-app="app" class="creditcontainer">
<div ng-controller="PaymentFormCtrl" class="payment-form" name="paymentForm">
<div class="notification">
<span class="notification__text">
We use secure 256 bit encryption and PCI compliant credit card processing, you data is save with us.
</span>
</div>
<center><h2>12$/month</h2></center>
<div class="card-type clearfix">
<div class="card-type__label">
Supported Cards
</div>
<div class="card-type__icons">
</div><br>
</div>
<%= form_for(@subscription) do |f| %>
<% if @subscription.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@subscription.errors.count, "error") %> prohibited this subscription from being saved:</h2>
<ul>
<% @subscription.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :stripe_card_token %>
<% if @subscription.stripe_card_token.present? %>
Credit card has been provided.
<% else %>
<div>
<%= f.text_field :email, class: "email-input card-input--full",placeholder: "Email" %>
</div>
<div>
<%= text_field_tag :card_number, nil, name: nil, class: "card-input card-input--full",placeholder: "Credit card number", :ng => { :model => "card.number" } %>
</div>
<div class="card-info clearfix">
<div class = "card-input--alldate" ng-model="card.date" card-date required >
<%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month", class: "card-input--monthdatedrop"} %>
<%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year", class: "card-input--yeardatedrop"} %>
</div>
<div ng-model="card.cvv" card-cvv required>
<%= text_field_tag :card_code, nil, name: nil, class: "card-input card-input--cvv", placeholder: "CVV" %>
</div>
<% end %>
<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>
<div ng-disabled="paymentForm.$invalid">
<%= f.submit class: "payment-form__button" %>
</div>
<div class="payment-form__agreement">
We directly pass your data on to our payment processor and never store your credit card details. All our connections are encrypted to the highest standards. Your credit card information is safe with us. Upon paying your agree to our TOS.
</div>
</div>
</div>
<% end %>
这是我处理处理的 subscription.coffee 文件:
jQuery ->
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
subscription.setupForm()
subscription =
setupForm: ->
$('#new_subscription').submit ->
$('input[type=submit]').attr('disabled', true)
if $('#card_number').length
subscription.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
$('#subscription_stripe_card_token').val(response.id)
$('#new_subscription')[0].submit()
else
$('#stripe_error').text(response.error.message)
$('input[type=submit]').attr('disabled', false)
有人知道为什么 stripe_card_token 是空的吗?
更新
似乎不知何故,subscriptions.coffee 文件似乎没有自动加载(因为删除了 application.js 中的 require_tree . 行)。当我强制它加载时,我得到一个错误
SyntaxError: [stdin]:26:46: 意外换行
在 application.html.erb 中,但奇怪的是样式表标签:
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
将文件更改为 .js 文件并没有带来任何变化。我监督的 subscription.coffee 文件中是否有错误?
【问题讨论】:
-
我相信你的意思是 strip_card_token 是空的。您能否通过将调试器放入 handleStripeResponse 来检查它是否正在设置输入值?
-
@AnandSoni 哦,是的,当然,stripe_card_token,会的
-
@AnandSoni 你如何调试咖啡脚本文件?我没有在网上找到任何关于此的内容。有什么想法吗?
-
如果你使用的是chrome,你可以在代码中使用
debugger
标签: ruby-on-rails api coffeescript stripe-payments turbolinks