1

Rails 3アプリケーションでStripeを使用して、クレジットカードでの支払いを行っています。私のアプリは今のところ1回の課金であり、Ryanが示すようなサブスクリプション課金ではありませんが、Stripe統合のレールキャストを大まかにフォローしています。

問題は、processCard()関数を起動できないことです。私は、私がjavascriptの第一人者ではないことを最初に認めます(または、そのことについては、あらゆる種類の第一人者です)。javascriptエラーは発生せず、代わりにフォームをRailsに送信し(クレジットカードの詳細なし)、stripe_card_tokennilであるため失敗します。alert()ハングアップがどこにあるかを確認するための非常に大雑把なデバッグのために、いくつかのダイアログを全体に配置しました。私のモデル名はPayment、一時的なalert()ダイアログを除けば、これまでのところRyanのコードからの唯一の逸脱です。

したがって、私の質問は2つあります。問題の原因を確実に追跡するにはどうすればよいですか。そしてどこで私は間違ったのですか?

これがJavascriptです:

jQuery ->
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
  payment.setupForm()

payment =
  setupForm: ->
    $('#new_payment').submit ->
      $('input[type=submit]').attr('disabled', true)
      alert("before processCard")
      payment.processCard()
      alert("after processCard")
      false
      # else
      #   true

  processCard: ->
    alert("processCard start")
    card =
      number: $('#credit_card_number').val()
      cvc: $('#cvc').val()
      expMonth: $('#card_month').val()
      expYear: $('#card_year').val()
    alert("card values are set")
    Stripe.createToken(card, payment.handleStripeResponse)
    alert("After createToken")

  handleStripeResponse: (status, response) ->
    if status == 200
      alert(response.id)
      # $('#payment_stripe_card_token').val(response.id)
      # $('#new_payment')[0].submit()
    else
      alert(response.error.message)
      # $('#stripe_error').text(response.error.message)
      # $('input[type=submit]').attr('disabled', false)

および関連するビュー:

<%= simple_form_for @payment, :html => { :class => 'form-horizontal'} do |f| %>
<fieldset>
  <legend>Pay via Credit Card</legend>

    <%= f.input :stripe_card_token, :as => :hidden, :id => 'stripe_card_token' %>

    <div class="well well-small">
      <%= current_user.full_name %><br />
      <%= current_user.email %><br />
      This is the name we have on file for you. If it's not correct, please <%= link_to "change it now", edit_user_registration_path(current_user) %>
    </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>

<div id="credit-card">
  <div class="control-group string required">
    <%= label_tag :credit_card_number, "Card Number", :class => "control-label string required" %>
    <div class="controls">
      <%= text_field_tag :credit_card_number, nil, :class => "string required", :name => nil %>
    </div>
  </div>

  <div class="control-group string required">
    <%= label_tag :cvc, "Security code (CVC)", :class => "control-label string required" %>
    <div class="controls">
      <%= text_field_tag :cvc, nil, :class => "string required", :name => nil %>
    </div>
  </div>

  <div class="control-group date required">
    <%= label_tag :card_month, "Expiration Date", :class => "control-label date required"%>
    <div class="controls">
      <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month", :class => "date required span2"} %>
      <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+25}, {name: nil, id: "card_year", :class => "date required span2"} %>
    </div>
  </div>

    <h4>Your unpaid courses</h4>
    <% @unpaid_subs.each do |sub| %>
      <%= sub.course.name %>&nbsp;|&nbsp;<%= sub.course.credits %><br />
    <% end %>

<div class="form-actions">
<%= f.submit nil, :class=>"btn btn-primary" %>
<%= link_to "Cancel", courses_path, :class=>"btn" %>
</div>
</fieldset>
<% end %>

関連する質問(受け入れられた回答はありません):StripeのCoffeScriptの何が問題になっていますか?

4

1 に答える 1

1

私は問題を理解しました。「@muは短すぎます」と感謝します。必要なjsとhtmlだけにそれを取り除くというあなたの提案は、最終的にエラーを見つけるのに役立ちました.

Stripe 公開鍵を持つメタ タグの name 属性のスペルを間違えていたことが判明しました。アプリケーションのレイアウトで、「stripe-key」に「r」がありませんでした:

<%= tag :meta, :name => "stipe-key", :content => STRIPE_PUBLIC_KEY %>

例外が発生したり、ログに表示されなかったため、これを見つけるのに非常に苦労しました。問題の原因を見つけるために、次の 2 つのことを行いました。

  • JavaScript の主要な場所にダイアログを配置alert()して、実行中にスクリプトを一時停止し、機能していない機能を見つけました。ちょっと粗いですが、うまくいきました。
  • @mu が短すぎるため、コメントで次のように述べています。

他の JavaScript が邪魔をしていないことを確認できますか? 手で HTML を記述し、ストライプ ライブラリ、jQuery、およびコードを除くすべての (Coffee|Java)Script を削除して、再起動します。

これを行っているときに、ページ上の他の JavaScript にエラーがあると、JavaScript が正しく実行されないことがわかりました。ビューを本質的なものだけに分解することで、最終的に変数名の問題を発見しただけでなく、いくつかの無関係なエラーも発見しました。

于 2012-10-30T17:36:18.303 に答える