こんにちは、おーしまです。
TECH:CHAMPの最終課題も大詰めで、商品購入に差し掛かり、クレジットカードでユーザーに商品を購入してもらうところまでやって参りました。
今回はPAY.JPの秘密鍵について解説します。
まず、PAY.JPの説明を簡単にします。
PAY.JPとは、クレジットカードの決済代行サービスの1つで、外部APIです。クレジットカードを用いて、ネットで売買を行おうとしたとき、クレジットカードの情報を絶対に外部に漏らしてはいけないのですが、そのセキュリティを担保してくれるのが、クレジット決済代行サービスです。絶対に情報を漏らさないようにするのは、色々大変なので、代行サービスを使うのが一般的らしいです。
メカニズムはとしては、直接クレジットカード会社と情報のやり取りをするのではなく、まず代行サービスにクレジットカードの情報を暗号化してもらい、その暗号化した情報を代行サービスに渡して、代行サービスがクレジットカード会社とやり取りをしてくれるといったものです。
そして、秘密鍵とは、サーバーサイドから暗号化した情報を代行サービスへ情報を渡す際に、一緒に渡す鍵のことです。
秘密鍵がなければ、代行サービスに情報を渡しても、クレジット決済を行なってくれません。
コードです。
Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( amount: price, card: buyer_params[:token], currency: 'jpy' )
クレジット決済代行サービスに渡すものは、
- 秘密鍵
- 取引する金額
- クレジットカード情報
- 通過の種類
の4つです。
秘密鍵
Payjp.api_key = ENV["PAYJP_SECRET_KEY"]
PAYJPのGemを導入して、Payjpクラスのapi_keyに秘密鍵を代入しています。秘密鍵は環境変数をを用いて、中身がわからないようにしなくてはいけないので、上記のようになっています。
取引する金額、クレジットカード情報、通過の種類
Payjp::Charge.create( amount: price, card: token, currency: 'jpy' )
Payjp::Chage.createに取引する金額、クレジットカード情報、通過の種類の3つの情報を入れます。
amount に取引する金額、
card にクレジットカード情報のトークン
currency に通貨の種類(jpyは"円")
を入れています。
トークンとは、セキュリティを担保するために用いられるパスワードで、一度しか解除する事はできません。つまり、一度トークンからクレジットカードの情報を出して、決済をすると、もう情報は取り出せなくなるので、誰かにトークンの情報を奪われても大丈夫というものです。
カード情報をトークン化するには、先に一度、代行サービスとやり取りをしなければいけませんが、そのやり方はまた今度にします。
今回はここまでです。
それではまた^^