rails stripe 実装 忘備録
モデルは関係ない コントローラとViewをを作成 stripeでkeyを取得 JavaScriptに公開keyを入れる
gemも入れる
gem 'stripe', '~> 4.7'
しかしルーティング問題
/payments/testで出るはず
routes.rb
get '/payment/test', to: 'payment#test'
エラー
authorizationNotPerformed
このページを参考に修正 github.com
ApplicationController 全てに共通する処理はここに記載
//cancanの権限の動作をスキップできるようにする //cancanをまだ実装していないため check_authorization :unless => :skip_authorize_controllers? //デバイスやパラメーターで受け取ったコントローラーがpaymentだったら権限をスキップ def skip_authorize_controllers? respond_to?(:devise_controller?) || params[:controller] == "payment" end
####check_authorization定義
def check_authorization(options = {}) self.after_filter(options.slice(:only, :except)) do |controller| next if controller.instance_variable_defined?(:@_authorized) next if options[:if] && !controller.send(options[:if]) next if options[:unless] && controller.send(options[:unless]) raise AuthorizationNotPerformed, "This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check." end end
View
<%= form_with(url: :payment, method: :post) do |form| %> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_9ShwqR3zdFlRpyTgSXvTgzHR" data-amount="100" data-currency="jpy" data-name="Stripe.com" data-description="Example charge" data-image="https://stripe.com/img/documentation/checkout/marketplace.png" data-locale="auto" data-zip-code="true"> </script> <%#= form.submit('保存', class: "btn btn-primary btn-lg my-1 mb-5 px-5") %> <% end %>
コントローラーにreceiveアクションを作成
def receive Stripe.api_key = "テストキー" token = params[:stripeToken] charge = Stripe::Charge.create({ amount: 100, currency: 'jpy', description: 'Example charge', source: token, capture: false, }) respond_to do |format| format.html { redirect_to :root, notice: '支払いしました' } end end