###前回の記事
【Payjp】payjp.jsを用いてトークンを取得する方法
https://qiita.com/kubbo0211/items/0030c00cea8461b1a498
#概要
本記事ではJSファイルで作成したトークンを用いてデータベースにPayjpの顧客情報を保存する方法を解説します。
データベースに顧客情報を保存する事によって得られるメリットとして下記があるのでデータベースに保存しておくのが吉。
・ユーザーは毎回クレジットカード情報を入力する事なく支払いを実行することが可能
・ユーザーはクレジットカード情報の変更、削除などが行える
#前提
・Payjp.jsを用いてトークン取得済
・パラメーターとしてトークンID送信済
#データベースに顧客情報を保存
フォームが送信されてpayjp.jsファイルでトークンが作成されると、コントローラー側で処理をします。
def create
Payjp.api_key = 'skから始まるテスト秘密鍵'
customer = Payjp::Customer.create(card: params[:payjpToken])
@payment = Payment.new(user_id: current_user.id, customer_id: customer.id, card_token: params[:payjpToken])
if @payment.save
redirect_to root_path
else
redirect_to new_payment_path
end
end
###手順
・Payjp.api_keyにテスト秘密鍵をセットします。
・Payjp::Customer.createで顧客作成
→バリューはパラメーターで送られてきたトークン
・new, saveでデータベースにuser_id, customer_id, card_tokenを保存
ここでcustomer_idのバリューに置いたcustomer.idについて説明しておきます。
まずcustomerにトークンを用いて作成された顧客情報を導入します。
customer = Payjp::Customer.create(card: params[:payjpToken])
顧客作成後レスポンスとして返ってくるのは下記になります。
{
"card": {
"address_city": null,
"address_line1": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": "unchecked",
"brand": "Visa",
"country": null,
"created": 1442290383,
"customer": null,
"cvc_check": "passed",
"exp_month": 2,
"exp_year": 2020,
"fingerprint": "e1d8225886e3a7211127df751c86787f",
"id": "car_e3ccd4e0959f45e7c75bacc4be90",
"livemode": false,
"metadata": {},
"last4": "4242",
"name": null,
"object": "card"
},
"created": 1442290383,
"id": "tok_5ca06b51685e001723a2c3b4aeb4",
"livemode": false,
"object": "token",
"used": false
}
上記の"id": "tok_5ca06b51685e001723a2c3b4aeb4"が顧客IDで、支払い時などにも利用するものになるのでcustomer_idカラムにcustomer.idとして顧客IDを保存します。
@payment = Payment.new(user_id: current_user.id, customer_id: customer.id, card_token: params[:payjpToken])
(Usersテーブルにcustomer_idを追加するといったやり方でも可能ですが、2枚目のクレジットカード登録に対応できないためpaymentsテーブルを作成しています)