グローディアの高橋です。
システム開発について担当をしております。
この度、pay.jpを用いた課金システムを組み込んだシステム開発を実施いたしましたので、
所感とともに対応内容を記載します。
また、この記事はpay.jpの2020/9当時の使用感について記載したものになるので、
今後の「pay.jp」さまでの変更などにより、記載内容が正しくなくなる可能性が十分にある点、
ご留意ください。
Pay.jpとは
WEBシステムに簡単に「決済システム」を導入できる決済サービスです。
ECサイトなどを自作する際など、選択肢に上がるかと思います。
類似サービス「Stripe」
おそらく、かなりPay.jpに近いサービスです。
所感ですが、決済手数料がやや「pay.jp」のほうが安いのですが、
Stripeは「GooglePay」に対応していたりしますので
若干料金、機能的に差異があります。
また、Stripeは入金サイクルが週払いになるのが特徴です。
(pay.jpは毎月支払いです)
所感
本番申請に対する審査が非常に速いです。
今回はホームページ上に「料金表」を作っていなかったがために、
一度そこで審査がストップしてしまいましたが
その後に「Wordで作成した料金表」を提示することでその後2営業日程度で申請が通りました。
スムーズにいけば3営業日程度で申請が通るものと思われます。(VISA、MasterCardに限り)
JCBやAmexの申請には15営業日程度かかるとのことです。
申請に必要なものを一部抜粋
※VISAとMasterCardの場合です。
※その他の決済は別の申請が必要になるので、必要なものが変わる可能性もあります。
・ホームページURL(公開済みのもの)
- 多分ですが、SSL対応されていないと審査に影響がでるのでは、と思っております。(推測)
・ホームページの利用規約のURL
- もしくは、テキストデータでも良い模様
・ホームページのプライバシーポリシーのURL
- もしくは、テキストデータでも良い模様
・入金先の口座情報
・運営に必要な免許証の画像データ(古物商許可証など)
・事業者の情報(代表者の情報など)
・特定商取引法に基づく表記(必要な場合)
・返品の時の対応方針など
状況により、必要な物品が変わります。
例えば、個人事業主様の場合、確定申告の控えなどが必要になる場合があるそうです。
一度の申請で通る前提ではなく、何度かpay.jpの担当者さまとやりとりをする前提でスケジューリングすることをお勧めします。
実装に関する所感
非常に簡単なAPIが用意されているので、特に困ることなく実装を完了することができました。
今回はphpにて対応しています。
また、今回は決済履歴のようなものはシステム側のデータベースに保存すべきと判断し、
下記の決済が成功後、DBへの書込みを実施しています。
買い切り決済の場合
サブスクリプションなどではなく、単発の決済の場合、以下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
// 課金処理 \Payjp\Payjp::setApiKey("XXXXXXXXXXXXXXXXXX"); $charge = \Payjp\Charge::create(array( 'card' => $payjp_token, // クライアントから受け取ったトークンを記載します。 'product' => $product_id, // あらかじめpay.jp側に登録しておく値。商品のIDです。 'description' => '決済したときのメモなどを記載できます。', 'metadata' => [ 'user_id' => $user->id, 'user_name' => $user->user_name, 'email' => $user->user_mail ] )); |
サブスクリプションの場合
先に顧客情報を登録してからのサブスクリプション登録になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// APIキーをセット \Payjp\Payjp::setApiKey('XXXXXXXXXXXXXXXXXXx'); // 顧客情報の登録 $customer = \Payjp\Customer::create(array( 'email' => $user->user_email, 'card' => $payjp_token, // クライアントから受け取ったトークンを記載します。 'metadata' => [ 'user_id' => $user->id, 'user_name' => $user->user_name, 'email' => $user->user_mail ] )); // 課金処理 $charge = \Payjp\Subscription::create(array( 'customer' => $customer->id, 'plan' => 'subscription', // あらかじめpay.jp側に登録しておく値。 'metadata' => [ 'user_id' => $user->id, 'user_name' => $user->user_name, 'email' => $user->user_mail ] )); |
まとめ
もちろん要件自体によりますが、pay.jpを用いた決済機能自体は非常に簡易なものでして、
決済するだけであれば実装時間は数時間で十分です。
実際は例外処理やらログを残したり、DBとの整合性やらを考えなければなりませんので、その分工数増。
あとは設計や検証で別途工数発生、というところです。
また、どちらかというと開発よりも運用をどうするか、の設計のほうが大変かもしれません。
ECサイトといえば「ECCube」が思いつくかと思いますが、
このECCubeのプラグインとしても「pay.jp」対応のものが用意されているようなので、
使う機会も多そうです。
pay.jpを用いた提案など、今後も対応させていただければと思います。
以上です。