7/5 今日の学び

■今日できたところ(進捗率は全体の15%ほど)

・payjpの仕組み8割理解した

--------------------------------

(自分用メモです。読み飛ばしてください)

- payjpとは、web上でクレジットカードの決済[代行]をするサービス

- webブラウザとpayjp間でカード情報をを登録(ここで登録は完結)

-  サーバー側には、カード情報はカードトークンに置き換えられて送信される

- カードトークンは使い捨ての暗号のような許可証のようなもの。1度決済に使ったら新たなカードトークンを発行しなければならない(つまり、購入時に毎回カード情報を登録しなければならないということを意味する)。そんな面倒なことを避けるために、payjpの顧客idと、ユーザーが入力したカード情報をリレーションで紐づけ、トークンの永続化を実現する。

---------------------------------

・credit-cardsテーブルの書き方が見えてきた

## credit_cardsテーブル
|Column|Type|Options|
|------|----|-------|
|user|references|null:false,foreign_key:true|
|costomer_id|integer|null:false|←顧客ID情報(payjpから返ってくるデータ)
|card_id|integer|null:false|←カードID情報(payjpから返ってくるデータ)

### Association
- belongs_to:user

 costomer_idやcard_idとは:16桁のカード情報、セキュリティコード、有効期限年月をpayjpに渡すと返ってくるデータ。

 

■躓いているところ

・credit-cardsテーブルを作成できない

- メンターさんにLGTMもらってないので、作成したくてもできない状況。

テーブル作らないとこの実装が先に進めない。明日以降でDBのコードレビューを再度依頼したい。

 

・エラーハンドリングをどう実装していくか

- これはまだ最初の段階では気にしなくていい実装なので追々やっていきます。

----------------------------

以下、自分用のメモ(読み飛ばしてください)

- エラーハンドリング:エラーが発生したときにweb上にエラー表示をすること

- エラーには①ユーザーが起こしたエラー(業務エラー)と②システムエラーがある。

-それぞれのエラーに対応した表示を出す

-①業務エラーの判断基準:validationを破ったときとか?(例えばカード番号が15桁とか17桁とかになってて16桁じゃないときとか)

-②システムエラーの判断基準:DBが壊れてるとか(恐ろしい)、なんかシステムがダウンしたとか、そういう500系エラーのとき

----------------------------

 

 

 

以下自分用お助けメモ(読み飛ばしてください)

------------------------------------------

github

https://github.com/payjp/payjp-ruby

・公式ドキュメント

https://pay.jp/docs/cardtoken

・参考サイト(gemのインストールから実装まで易しく書いてる)

https://qiita.com/Sa2Knight/items/baefe2a49cefc9f03af6

・どのファイルにどのコードを書くのか書いてる

https://qiita.com/suzy1031/items/7964829086eb929471a6

・実装の詳細な手順

https://qiita.com/wrtenniss/items/75dc631778506f8bce16#1-payjp%E3%81%AEgem%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

・コード書くときに参考になりそうなパラメータリスト(公式ドキュメント)

http://payjp-announce.hatenablog.com/entry/2017/11/10/182738

・エラーハンドリングの参考記事

https://qiita.com/jnchito/items/3ef95ea144ed15df3637

■payjpの仕組み(シーケンス図)

f:id:aaayano:20200705155824p:plain

pay.jpの仕組み