###実現したいこと
登録しているクレジットカードを読み込みたいです。
すでにPay.jpとの関連づけは終わっており、カードの情報も登録できます。
しかし、支払いの処理をする時に、登録しているカードの読み込みができていません。
・以下で購入処理
Controller
1class ItemsController < ApplicationController 2def pay 3 if card.blank? 4 redirect_to action: "new" 5 flash[:alert] = '購入にはクレジットカード登録が必要です' 6 else 7 @item = Item.find_by(id: params[:id]) 8 card = Card.where(user_id: current_user.id).first 9 Payjp.api_key = ENV["PAYJP_SECRET_KEY"] 10 Payjp::Charge.create( 11 :amount => @item.price, 12 :card => params['payjp-token'], 13 :currency => 'jpy' 14 ) 15 flash[:notice] = "購入しました" 16 redirect_to action: :done 17 end 18 end
・以下でカード登録処理
Controller
1class CardController < ApplicationController 2def create #payjpとCardのデータベース作成を実施します。 3 @book = Book.find_by(id: params[:id]) 4 Payjp.api_key = ENV["PAYJP_PRIVATE_KEY"] 5 if params['payjp-token'].blank? 6 redirect_to action: "new" 7 else 8 customer = Payjp::Customer.create( 9 email: @current_user.email, 10 card: params['payjp-token'], 11 metadata: {user_id: @current_user.id} 12 ) 13 @card = Card.new(user_id: @current_user.id, customer_id: customer.id, card_id: customer.default_card) 14 if @card.save 15 flash[:notice] = "登録しました" 16 redirect_to("/user/#{@current_user.id}") 17 else 18 render :new 19 end 20 end 21 end
schema
1create_table "cards", force: :cascade do |t| 2 t.integer "user_id" 3 t.string "customer_id" 4 t.string "card_id" 5 t.datetime "created_at", null: false 6 t.datetime "updated_at", null: false 7 end
以下のような設定方法も他のサイトでみましたが、叶いませんでした。
card = current_user.credit_card
回答1件
あなたの回答
tips
プレビュー