【Django】webオンライン決済システムの実装【PAY.JP】

webサービスを作成しwebでオンライン決済サービスを使用するにあたり、Djangoで実装する方法を紹介します。

webオンライン決済システムを導入することで

  1. お金の決済と管理を一任できる
  2. 複雑で高度なセキュリティコードを書く必要がない

などのメリットが挙げられます。

ゴール

フロント側で、クレジットカードの支払いができる表示とdjangoのサーバー(views)側でAPIを繋いで処理ができるまでになります。

PAY.JPとは

今回数あるwebオンライン決済の中で、私ヒロヤンが利用するのはPAY.JPになります。

PAY.JPは、簡単にクレジットカード決済を導入できるサービスです。

PAY.JPを使えば、複雑で分かりにくかった 支払いのすべてをシンプルにできます。

PAY.JPを選んだ理由

数あるオンライン決済サービスでPAY.JPを選んだ理由は、業界最低水準の料金の安さと、小規模スタートアップ向けを推奨していることです。

最後はPAY.JPとstripeで悩みましたがPAY.JPの方が手数料が安かったので決めました。

もし今後売上が拡大していった場合に、改めてオンライン決済サービスは見直そうと思います。

そう、走りながら考える。

環境

環境

・python 3.8

・django 2.2

ある程度djangoの仕組みを理解していることを前提に話を進めていきます。

導入手順

導入手順を紹介していきます。

PAYJPに新規登録

PAY.JPの公式サイトから新規登録を行います。

本番環境に整えるまで、個人情報やクレジットカード情報等は必須ではありません。

開発段階で必要なのはメールアドレスのみになります。

APIキーを入手

ログイン後の左のサイドバーにAPIという項目がありますので、クリックします。

クリック後にAPIキー各種情報を入手できますので、以上で必要な準備ができました。

Djangoに必要なライブラリをインストール

django pyajpのライブラリをインストールします。

Successfullyが表示されれば成功です。

settings.pyの編集

djangoのsettings.pyの設定ファイルに、先に入手したPAY.JPのAPIキーの設定します。

settings.py

payjp.apy_keyの右辺には、PAY.JPのskで始まるテスト秘密鍵(テスト段階なので)を記入します。

PUBLICK_KEYの右辺には、PAY.JPのskで始まるテスト公開鍵(テスト段階なので)を記入します。

またこの時、直書きしてしまうと、githubにpushした時にセキュリティ警告が発生してしまったりしますので、以下の記事を参考に、dotenvを使用する等の対応をお願いします。

viewsの処理

続いてサーバー側の処理を書いていきます。

views.py

  1. 6行目の@csrf_exemptでhtml側からのpostの{%csrf_token%}を無効にしています
  2. 10行目のamoutは支払い金額です
  3. 12行目のemailも仮で置いています
  4. 15行目では日本円のjpyを指定します

6行目の@csrf_exemptについて、今回のような外部URLのPOSTでは{% csrf_token %}が推奨されていません。

それを回避するための、推奨されるコードになりますのでこのように記述することをお勧めします。

詳しい詳細は以下の記事で紹介しています。

テンプレートの処理

<script>をそのまま貼り付ければ以下のように「カードで支払う」ボタンが出現するようになります。

テンプレート側のdjangoのpost時の{% csrf_token %}はここでは使用しません。

外部のURLを対象にするpostフォームではCSRFトークンが外部に漏れ、脆弱性の原因となります。

参考:https://docs.djangoproject.com/ja/2.2/ref/csrf/

フロント画面の確認

実装がきちんとできると、フロントに以下のようなボタンが表示されます。

そして、「カードで支払う」ボタンをクリックすると以下のようにモーダルウィンドウがポップアップします。

テストカード番号は、公式サイトから確認できます。

https://pay.jp/docs/testcard

あとは実際にテストカード番号を入力し、問題なくpostできればPAY.JPのログイン後の画面で売上が確認できます。

以上。

参考

https://pay.jp/docs/flask-checkout

https://pay.jp/docs/checkout

最後に

いかがでしたでしょうか。

以上が、「【django】webオンライン決済システムの実装【PAY.JP】」の紹介記事になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です