LoginSignup
8
11

More than 5 years have passed since last update.

【Payjp】データベースと顧客情報を紐付ける方法

Posted at

前回の記事

【Payjp】payjp.jsを用いてトークンを取得する方法
https://qiita.com/kubbo0211/items/0030c00cea8461b1a498

概要

本記事ではJSファイルで作成したトークンを用いてデータベースにPayjpの顧客情報を保存する方法を解説します。

データベースに顧客情報を保存する事によって得られるメリットとして下記があるのでデータベースに保存しておくのが吉。

・ユーザーは毎回クレジットカード情報を入力する事なく支払いを実行することが可能
・ユーザーはクレジットカード情報の変更、削除などが行える

前提

・Payjp.jsを用いてトークン取得済
・パラメーターとしてトークンID送信済

データベースに顧客情報を保存

フォームが送信されてpayjp.jsファイルでトークンが作成されると、コントローラー側で処理をします。

payments_controller.rb
  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で顧客作成
 →バリューはパラメーターで送られてきたトークン
スクリーンショット 2019-03-17 5.03.20.png
・new, saveでデータベースにuser_id, customer_id, card_tokenを保存

ここでcustomer_idのバリューに置いたcustomer.idについて説明しておきます。
まずcustomerにトークンを用いて作成された顧客情報を導入します。

payments_controller.rb
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を保存します。

payments_controller.rb
@payment = Payment.new(user_id: current_user.id, customer_id: customer.id, card_token: params[:payjpToken])

(Usersテーブルにcustomer_idを追加するといったやり方でも可能ですが、2枚目のクレジットカード登録に対応できないためpaymentsテーブルを作成しています)

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11