7/21(火) 本日の学び
また今日も理解することができ、コードが書くことができて本当に本当に嬉しい。
createアクションでは2つの保存作業が行われる。
1.payjpにトークンと顧客情報を結び付けて保存する処理
2.DBのCredit_cardsテーブルのカラムに値を保存する処理
保存の状態によってまた処理が分岐する。
1.成功したらredirect_toでindexに戻る
2.失敗したらrenderでnewに戻る
それらをコードで書くとこう
def new # Webの支払い方法をクリックするとnewに飛ぶ。 card = Credit_card.where(user_id:current_user.id).first redirect_to action: "index" if @card.present? # indexは今途中まで書けてます end def create # newのweb上に追加ボタンがあってそれを押すとcreateへ飛ぶ Payjp.api_key = 'PAYJP_ACCESS_KEY'# 秘密鍵 if params['payjp-token'].blank? # blankだったらもう一度newで登録画面へ redirect_to action: "new" else customer = Payjp::Customer.create( # これはpayjpにトークンと顧客情報を結びつける処理(定型文) description:'test', # PAY.JPの顧客情報に表示する概要になるらしい。なくても良い email: current_user.email,# ログイン中のユーザーのemailをキーにセット card: params['payjp-token'], # 直前のnewアクションで発行され送られてくるトークンをcardにセット metadata: {user_id:current_user.id} ) @card = Credit_card.new(user_id: current_user.id, customer_id: customer.id,card_id: customer.default_card) #DBに顧客情報を登録 if @card.save redirect_to action: "index", notice:"支払い情報の登録が完了しました" else render new end end
なんとか水曜日目標のカードを登録するための処理は書き終えたので、
残すはindex(これは登録したカード一覧を表示するページ)と
destroy(登録したカードの削除)となります。
これも水曜日までに書き終えられそうです。
ちなみにindexはここまで書けました。
def index #カードが存在(登録)しているかどうか確認し、あればPAY.JPからカード情報にアクセスして取得 if @card.present? Payjp.api_key = ENV['PAYJP_PRIVATE_KEY'] #秘密鍵をセットする customer = Payjp::Customer.retrieve(@card.payjp_id)#PAY.JPに登録されているカード情報のidに紐づく@cardを探してる @card_info = customer.cards.retrieve(customer.default_card)# PAY.JPの顧客情報からデフォルトで使うクレジットカードを取得する。 #クレジットカード情報から表示させたい情報を定義する。 #PAY.JPの中にオブジェクト(支払い、顧客、カードなど)があり、さらにそれに対応する値がキーバリュー形式で保存されている。 #.brandや.last4といったようにドットでつなげることで、ほしいバリューを取得できる @card_brand = @card_info.brand #クレジットカードの画像を表示するためにカード会社を取得 @exp_month = @card_info.exp_month.to_s #カードの有効期限を取得 @exp_year = @card_info.exp_year.to_s.slice(2,3) # 年は最後の下2桁をsliceメソッドを使って取り出す # この後各カード会社のimageをそれぞれファイルに突っ込んで、そのファイルを変数に代入するコードを書く end