webpay-pythonについて
12月02日にWebPayのPythonパッケージであるwebpay-pythonがリリースされました。webpay-pythonは、以下の点でモダンなPythonパッケージに仕上がっています。
まだまだPython3に対応していないパッケージも多い中で、このパッケージは重要です。
自分でパッケージを修正しなくても Python3.3でWebPayを導入できます。
FlaskからWebPayを導入する
私はPythonのWebフレームワークの中でもFlaskが大好きなので、今回はFlaskにWebPayを導入します。
利用した環境は、MacOS10.9.1/Python3.3/Flask0.10.1です。
動作について
- ‘/‘でから購入情報を入力して、'/purhcase'にpost
- ‘/purchase'でWebPayを利用した課金処理と結果出力
ファイル構成について
Controllerはapp.py、Viewはtemplates配下に置きます。今回はModelはありません。
webpay-flask-sample
├── app.py
└── templates
├── index.html
├── layout.html
└── purchased.html
実際のコードと実行
ざっくりとControllerを書くと以下のような感じになります。
“ # noqa”がついているのは、flake8を通しているからです。
import sys
from flask import Flask, render_template, request, url_for, redirect
from webpay import WebPay
from webpay.errors import InvalidRequestError
app = Flask(__name__)
app.config.from_object(__name__)
WEBPAY_PUB_KEY = 'test_public_19DdUs78k2lV8PO8ZCaYX3JT'
WEBPAY_PRI_KEY = 'test_secret_eHn4TTgsGguBcW764a2KA8Yd'
WEBDB_PRICE = 1554
@app.route('/')
def index():
return render_template('index.html', webpay_pubkey=WEBPAY_PUB_KEY)
@app.route('/purchase', methods=['POST'])
def purchase():
webpay = WebPay(WEBPAY_PRI_KEY)
try:
charge = webpay.charges.create(
amount=WEBDB_PRICE,
currency='jpy',
card=request.form.get('webpay-token'))
return render_template('purchased.html', charge=charge)
except InvalidRequestError:
e = sys.exc_info()[1] # noqa
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
次はViewです。flaskではデフォルトでjinja2を利用できるので、Viewを継承することが可能です。layout.htmlをベースとして、index.html, purchased.htmlを作成します。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>WebPay flask sample</title>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
{% extends "layout.html" %}
{% block body %}
<form action="/purchase" method="post">
<script src="https://checkout.webpay.jp/v1/" class="webpay-button" data-key="{{ webpay_pubkey }}"></script>
</form>
{% endblock %}
{% extends "layout.html" %}
{% block body %}
<h3>想像購入しました</h3>
{% if charge.id %}
<p>配送に関するお問い合わせ時に、{{ charge.id }} をお知らせください。</p>
{% endif %}
<ul>
<li><a href='http://www.amazon.co.jp/dp/4774158747/' target='_blank'>実際に購入する</a></li>
<li><a href='/'>もう一度購入する</a></li>
</ul>
{% endblock %}
あとは、以下のコマンドからhttp://localhost:5000にアクセスすれば、課金処理ができることがわかるでしょう。
cd webpay-flask-sample
python app.py
JS部分について
JS部分には、CheckoutHelperを利用しています。こちらについては以下を参照してください。
終わりに
今回はwebpay-pythonをflaskに導入してみました。今回作成したコードはこちらにありますので簡単にwebpay-pythonを利用することができます。webpay-pythonはリリースされたばかりですが、Python3.3でも利用できるWebPay用パッケージです。是非利用してみてください。(webpay-pythonへの要望はIssuesまで!)