SlideShare a Scribd company logo
1 of 22
Download to read offline
∼ 概要とその実装方法 ∼
アジェンダ
・PAY.JPとは
・PAY.JPの特徴
・PAY.JPの仕組み
・PAY.JPの実装方法(チェックアウト版、カスタマイズ版)
・最後に
PAY.JPとは
ネットショップを誰でも簡単に作れるサービス
「BASE」が運営している決済サービスのこと。
事業者がクレジットカード情報を扱わなくてもいいように
簡単に支払い機能を実装することができる。
手数料は取引額の2.59%と業界内では屈指の安さ。
PAY.JPの特徴
・様々な言語に対応している(現在は9つの言語に対応)
→ Python, Ruby, PHP, Java etc..
・事業者が機密情報を保持することなく決済可能
→ クレジット情報をトークン化している
・カスタマイズが自由自在
→ 簡単に実装できるチェックアウト版もある
トークン化って???
トークン化とは、
ユーザーが入力したクレジットカード情報
(カード番号や有効期限など)を乱数化すること。
例), tok_da7d374d1da833862285e74b0408
↓
カード情報が特定されないため、高いセキュリティを誇る。
PAY.JPでは、このトークンを用いて情報のやりとりをする。
PAY.JPの仕組み
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(response.id)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
顧客IDって???
顧客IDとは、
生成されたトークンと支払った人(顧客)を結びつけたもの。
↓
1度生成されたトークンは再使用できないため、
あらかじめ購入者と結びつけておく必要がある。
なぜその必要があるのか?
一度使用したトークンは再び使用することはできませんが、 顧客にカードを登録すれば、

顧客IDを支払い手段として用いることで、何度でも同じカードで支払い処理ができるようになります。
→
トークンと顧客IDの生成は同時に行う必要がある!
PAY.JPの実装方法
共通設定
①PAY.JPに登録
②PAY.JPのダッシュボードからAPIにアクセス
PAY.JPの実装方法
チェックアウト版の場合
PAY.JP側がフォームを用意してくれているため、
フォームに関する記述は1行で済みます。
チェックアウトは<script>タグを1行で、 デザインされた決済フォーム、
カード情報のバリデーション、カード情報のトークン化を行うフォームを生成するライブラリです。
→
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(payjp-token)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
= form_tag url: <urlを記述> do
:plain
<script type="text/javascript" src="https://checkout.pay.jp" class="payjp-button" data-key="公開 "></script>
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(response.id)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
次のスライドへ
def create
Payjp.api_key = Rails.application.credentials[:payjp][:secret_key]
customer = Payjp::Customer.create(
card: params[:payjp-token],
metadata: {user_id: current_user.id}
)
@card = Card.new(
card_id: customer.default_card,
customer_id: customer.id,
user_id: current_user.id
)
@card.save
end 自身のデータベースに保存するための記述
トークンをPAY.JP側に送り、顧客IDを取得
PAY.JPの実装方法
カスタマイズ版の場合
①gem payjp'を記述
②applicattion.html.hamlのheadタグに、以下の記述を追記
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(response.id)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
フォームを自身で作成(例は次のスライド)
%form#charge-form{action: "/cards", method: "POST"}
%span.charge-errors
%h4 支払い
%label カード番号
%input.number{maxlength: "16", name: "number", placeholder: "カード番号", type: "text",id:
"payment_card_no", value: 4242424242424242}/
%label CVC
%input.cvc{maxlength: "3", name: "cvc", placeholder: "CVC", type: "text",id:
"payment_card_security_code", value: 123}/
%label 有効期限
%input.exp_month{maxlength: "2", name: "exp_month", placeholder: "月", type: "text",id:
"payment_card_expire_mm", value: 12}/
%input.exp_year{maxlength: "4", name: "exp_year", placeholder: "年", type: "text",id:
"payment_card_expire_yy", value: 2022}/
フォーム例
*単なるフォーム単体の例なので、以降との関連性はありません。
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(response.id)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
カード情報をPAY.JP側に送信(実装は次のスライド)
$(function() {
if (!$('#regist_card')[0]) return false;
Payjp.setPublicKey("公開 を入れます");
$("#regist_card").on("click", function(e) {
e.preventDefault();
let now = new Date();
var card = {
number: $("#card_number_form").val(),
exp_month: $("#exp_month_form").val(),
exp_year: $("#exp_year_form").val(),
cvc: $("#cvc_form").val()
};
Payjp.createToken(card, function(status, response) {
if (status === 200) {
$("#card_number_form").removeAttr("name");
$("#exp_month_form").removeAttr("name");
$("#exp_year_form").removeAttr("name");
$("#cvc_form").removeAttr("name");
var token = response.id;
$("#card_token").append(`<input type="hidden" name="card_token" value=${token}>`)
$("#card_form").get(0).submit();
} else {
alert("カード情報が正しくありません。");
$("#regist_card").prop('disabled', false);
}
});
});
});
PAY.JP側に送るクレジット情報
response.idが
トークンとして送られてくる
トークンをコントローラーに送信
フォーム(new.html.haml)
①カード情報送信
JS(card.js) コントローラ(cards_controller.rb)
JavaScript Controller
②カード情報送信
③トークンを生成・送信
(response.id)
④トークンを送信
⑤トークンを送信
⑥顧客IDを生成・送信
(customer)
トークンを送信し、顧客IDを取得(実装は次のスライド)
def create
Payjp.api_key = Rails.application.credentials[:payjp][:secret_key]
customer = Payjp::Customer.create(
card: params[:card_token],
metadata: {user_id: current_user.id},
)
@card = Card.new(
card_id: customer.default_card,
customer_id: customer.id,
user_id: current_user.id
)
@card.save
end
自身のデータベースに保存するための記述
トークンをPAY.JP側に送り、顧客IDを取得
最後に
リファレンスに全てが書いてあります。
(実装方法、よく起こるエラー内容 etc...)

More Related Content

Similar to Payjp

アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月VirtualTech Japan Inc.
 
テラ足場 ご提案資料
テラ足場 ご提案資料テラ足場 ご提案資料
テラ足場 ご提案資料ssuser6183c8
 
マネーフォワード クラウド経費サービス資料
マネーフォワード クラウド経費サービス資料マネーフォワード クラウド経費サービス資料
マネーフォワード クラウド経費サービス資料Money Forward, Inc.
 
新しい実装方法 Braintree SDKについて
新しい実装方法 Braintree SDKについて新しい実装方法 Braintree SDKについて
新しい実装方法 Braintree SDKについてJunichi Okamura
 
Tablet 20121129 KnowledgeCOMMONS vol.18
Tablet 20121129 KnowledgeCOMMONS vol.18Tablet 20121129 KnowledgeCOMMONS vol.18
Tablet 20121129 KnowledgeCOMMONS vol.18Visso株式会社
 
Biz card名刺取込みマニュアル
Biz card名刺取込みマニュアルBiz card名刺取込みマニュアル
Biz card名刺取込みマニュアルe-sales-support
 
20180228 sendai it_workshop
20180228 sendai it_workshop20180228 sendai it_workshop
20180228 sendai it_workshopJunichi Okamura
 
Watson.assistant chat bot-20200117
Watson.assistant chat bot-20200117Watson.assistant chat bot-20200117
Watson.assistant chat bot-20200117Yasushi Osonoi
 
オープン API と Authlete のソリューション
オープン API と Authlete のソリューションオープン API と Authlete のソリューション
オープン API と Authlete のソリューションTatsuo Kudo
 
20190226 jp stripes_nagoya_vol3_update
20190226 jp stripes_nagoya_vol3_update20190226 jp stripes_nagoya_vol3_update
20190226 jp stripes_nagoya_vol3_updateHideki Ojima
 
名刺デジタル化サービスマニュアル 11月改訂版
名刺デジタル化サービスマニュアル 11月改訂版名刺デジタル化サービスマニュアル 11月改訂版
名刺デジタル化サービスマニュアル 11月改訂版e-sales-support
 
210303 jp stripes connect deep-dive
210303 jp stripes   connect deep-dive210303 jp stripes   connect deep-dive
210303 jp stripes connect deep-diveNoz Sasaoka
 
20170518 oracle code_stripe_公開用
20170518 oracle code_stripe_公開用20170518 oracle code_stripe_公開用
20170518 oracle code_stripe_公開用Hideki Ojima
 
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏『スマートフォンでの認証/課金について』デジタルガレージ宮城氏
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏Developers Summit
 
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~Members_corp
 
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynoteJunya Suzuki
 

Similar to Payjp (20)

アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
アプリケーション性能管理(APM)ツールの新世代 「AppDynamics」のご紹介 – OpenStack最新情報セミナー 2015年7月
 
テラ足場 ご提案資料
テラ足場 ご提案資料テラ足場 ご提案資料
テラ足場 ご提案資料
 
マネーフォワード クラウド経費サービス資料
マネーフォワード クラウド経費サービス資料マネーフォワード クラウド経費サービス資料
マネーフォワード クラウド経費サービス資料
 
新しい実装方法 Braintree SDKについて
新しい実装方法 Braintree SDKについて新しい実装方法 Braintree SDKについて
新しい実装方法 Braintree SDKについて
 
Tablet 20121129 KnowledgeCOMMONS vol.18
Tablet 20121129 KnowledgeCOMMONS vol.18Tablet 20121129 KnowledgeCOMMONS vol.18
Tablet 20121129 KnowledgeCOMMONS vol.18
 
Biz card名刺取込みマニュアル
Biz card名刺取込みマニュアルBiz card名刺取込みマニュアル
Biz card名刺取込みマニュアル
 
20180228 sendai it_workshop
20180228 sendai it_workshop20180228 sendai it_workshop
20180228 sendai it_workshop
 
Watson.assistant chat bot-20200117
Watson.assistant chat bot-20200117Watson.assistant chat bot-20200117
Watson.assistant chat bot-20200117
 
オープン API と Authlete のソリューション
オープン API と Authlete のソリューションオープン API と Authlete のソリューション
オープン API と Authlete のソリューション
 
20180829 ppug fukuoka
20180829 ppug fukuoka20180829 ppug fukuoka
20180829 ppug fukuoka
 
20190226 jp stripes_nagoya_vol3_update
20190226 jp stripes_nagoya_vol3_update20190226 jp stripes_nagoya_vol3_update
20190226 jp stripes_nagoya_vol3_update
 
名刺デジタル化サービスマニュアル 11月改訂版
名刺デジタル化サービスマニュアル 11月改訂版名刺デジタル化サービスマニュアル 11月改訂版
名刺デジタル化サービスマニュアル 11月改訂版
 
210303 jp stripes connect deep-dive
210303 jp stripes   connect deep-dive210303 jp stripes   connect deep-dive
210303 jp stripes connect deep-dive
 
20170518 oracle code_stripe_公開用
20170518 oracle code_stripe_公開用20170518 oracle code_stripe_公開用
20170518 oracle code_stripe_公開用
 
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏『スマートフォンでの認証/課金について』デジタルガレージ宮城氏
『スマートフォンでの認証/課金について』デジタルガレージ宮城氏
 
20180224 ppug osaka_#3
20180224 ppug osaka_#320180224 ppug osaka_#3
20180224 ppug osaka_#3
 
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~
【EMCカンファレンス2019】メンバーズ|UX・デジタル大国"中国"の今を知り、活かすために~中国現地のアプリ調査から~
 
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #cndt2019 #osdt2019 #keynote
 
IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説IIJmio meeting 19 IIJ フルMVNO徹底解説
IIJmio meeting 19 IIJ フルMVNO徹底解説
 
20190312 node gakuen
20190312 node gakuen20190312 node gakuen
20190312 node gakuen
 

Payjp