productId | アプリに対してユニークなID。デバイス別に課金したいなら別にする |
レシート | Appleから送付されるJSONの購入情報。これを継続課金などの際には再度検証する |
- シートチェック後の product-id をちゃんと検証
- 1個のトランザクションIDで、1回の付与
レシート検証†
- 本番とSandbox二種類ある。審査が下りないと本番は使えない。そのため検証は本番で行い、環境違いのエラーが出たら開発にリトライなどの対応が必要。
- 他のアプリのレシートも検証はOKになってしまう(Googleはちゃんと弾いてくれる)
- 上記対策としてproduct_idが一致するかをチェックする
- transaction_idが決済単位でユニークになるので、これを最初に使ったユーザーが課金OKとして以後の重複登録(不正利用)を防ぐべし。
処理の流れ†
- クライアントアプリでレシートを受け取る
- サーバー側に投げる。失敗しても投げ続ける。
- 検証済みレシートのproduct_idの確認
- サーバー側は検証後に、TransactionIdに対して購入済みとして、アイテム付与などを行う。
参考サイト†
http://tech.vasily.jp/entry/ios_premium_validation
http://melpon.org/blog/ios-consumable-in-app-purchase