はじめに
なんかタイトルから意味わからんって自分でもなったので、自分でもわかるようにちょっと説明すると。
In-App Purchase
っていうアプリ内課金のレシートがあるんですけど、それの検証をサーバサイドに持っていくことが多くあるんですが、
それのDjango用のライブラリパッケージです。
Starください!
一応、AppleDeveloperProgramに加入していないと検証サーバ等を叩けないと思うので、そこら辺はごめんなさい
対応バージョン
Python
2.7, 3.4, 3.5, 3.6
setup.py
にPython3.7対応してるみたいなこと書いてますが、対応してないです。ごめんなさい。確認不足でした。
Django
1.7 - 1.11
2.0はまだ確認してないので以後対応していきます。2.0に対応したあとはPython2.7は切り捨てます。
インストール
pipでのインストール
$ pip install django-ios-storekit
Gitクローンでのインストール
$ pip install https://github.com/nnsnodnb/django-ios-storekit.git && cd /path/to/django-ios-storekit $ python setup.py install
Wheelでのインストールにも対応してるのですが、私は使ったことないので知らん!!
使い方
project_name/settings.py
の INSTALLED_APPS
に storekit
を追加
INSTALLED_APPS += (
'storekit',
)
同じく project_name/settings.py
に STOREKIT_APP_BUNDLE_ID
を追加
これはXcodeで設定する com.example.sample
のようなやつ
STOREKIT_APP_BUNDLE_ID = 'com.example.sample'
同じく project_name/settings.py
に STOREKIT_PURCHASED_SECRET
を追加
これは、後で説明する 定期購読型
に使われるものだけで使用するシークレットキーです。
STOREKIT_PURCHASED_SECRET = ''
検証用DBがあるのでマイグレーション
$ python manage.py migrate
検証実装
IAPには大きく分けて、 消費型
非消費型
定期購読型
があります。
その中でもレシートは2つに分類されていたような気がします。(ちょっと曖昧。)多分この曖昧さがバグを生み出してしまっている可能性が高い。
消費型
と 非消費型
で1つ。 定期購読型
で1つのレシートの分類。
前者の実装例
from storekit.receipt import normal_receipt def hoge(request): ・・・ receipt = request.POST['receipt'] # iOSアプリからreceiptのキーでpayloadにデータが含まれている場合 purchases = normal_receipt(receipt, sandbox=True) # sandboxサーバはこっち # purchases = normal_receipt(receipt, sandbox=False) # 本番サーバはこっち ・・・
後者の実装例
from storekit.receipt import subscribe_receipt def hoge(request): ・・・ receipt = request.POST['receipt'] purchases = subscribe_receipt(receipt, sandbox=True) # purchases = subscribe_receipt(receipt, sandbox=False) ・・・
どっちも storekit.models
の Purchase
が1番親でリストで戻ってきます。
https://github.com/nnsnodnb/django-ios-storekit/blob/master/storekit/tests/response.jsongithub.com
上記テストで使用しているJSONの形式だと認識してもらえればいいかと思います。
ちなみに上記は 消費型
での本物のレスポンスの値を弄ったものなので値を信用しなければ正確さは高いかと思います。
モデルも使用しているのでDBにレシート全体が保存されるようにはなっています。
最後に
今後ちゃんと、 非消費型
定期購読型
のレシートも拾ってきてテストコードに入れて確実なものにします。
また、バグがあればIssue立ててもらえるとモチベーション上がるのでお願いしますm( )m
また、ディレクトリ構成がまたクソな感じになってたり example
があるのに、実装がないとかふざけたものがあるのでちゃんとやります。