最近、 Apple のドキュメントに従って、iOS からの購入を検証および記録するサービスをセットアップしました 。数回購入した後、テーブルを確認したところ、ステータス コード 0 で返された 45 件の購入があったことがわかりました。これは、Apple のドキュメントによると、それらが有効であることを意味します。問題は、iTunes アカウントにログインしたときに、有効な購入が 22 回しか記録されていなかったことです。ステータスが 0 の Apple からの JSON 応答を詳しく調べたところ、次の 2 つのバリエーションが見つかりました。
{
"status": 0,
"environment": "Production",
"receipt": {
"receipt_type": "Production",
"adam_id": 888310447,
"app_item_id": 888310447,
"bundle_id": "com.studioName.gameName",
"application_version": "1.4",
"download_id": 62010318102259,
"version_external_identifier": 810789159,
"request_date": "2014-12-16 15:34:17 Etc/GMT",
"request_date_ms": "1418744057267",
"request_date_pst": "2014-12-16 07:34:17 America/Los_Angeles",
"original_purchase_date": "2014-07-08 18:04:28 Etc/GMT",
"original_purchase_date_ms": "1404842668000",
"original_purchase_date_pst": "2014-07-08 11:04:28 America/Los_Angeles",
"original_application_version": "1.1",
"in_app": []
}
}
{
"status": 0,
"environment": "Production",
"receipt": {
"receipt_type": "Production",
"adam_id": 888310447,
"app_item_id": 888310447,
"bundle_id": "com.studioName.gameName",
"application_version": "1.4",
"download_id": 39011903209949,
"version_external_identifier": 810789159,
"request_date": "2014-12-16 15:11:10 Etc/GMT",
"request_date_ms": "1418742670718",
"request_date_pst": "2014-12-16 07:11:10 America/Los_Angeles",
"original_purchase_date": "2014-10-15 05:52:28 Etc/GMT",
"original_purchase_date_ms": "1413352348000",
"original_purchase_date_pst": "2014-10-14 22:52:28 America/Los_Angeles",
"original_application_version": "1.2.4",
"in_app": [
{
"quantity": "1",
"product_id": "com.studioName.gameName.productName",
"transaction_id": "190000148450370",
"original_transaction_id": "190000148450370",
"purchase_date": "2014-11-29 08:22:49 Etc/GMT",
"purchase_date_ms": "1417249369000",
"purchase_date_pst": "2014-11-29 00:22:49 America/Los_Angeles",
"original_purchase_date": "2014-10-17 08:30:26 Etc/GMT",
"original_purchase_date_ms": "1413534626000",
"original_purchase_date_pst": "2014-10-17 01:30:26 America/Los_Angeles",
"is_trial_period": "false"
}
]
}
}
最初のアプリ内オブジェクト配列は空ですが、2 番目には実際に IAP のレシートがあるように見えることに注意してください。私の想定では、アプリ内配列が取り込まれたレシートを確認する必要があります。私の問題は、アプリ内配列なしで領収書を解析したことです.25の有効な購入がまだ残っています(Appleによって記録されたものより3つ多い)。
次に考えたのは、これらの購入品の一部が復元されたものではないかということでした。このメモは、領収書検証プログラミング ガイドで見つけました。元のトランザクション識別子の下に次のように記載されています。
「以前のトランザクションを復元するトランザクションの場合、元のトランザクションのトランザクション ID。それ以外の場合は、トランザクション ID と同じです。」
有効な領収書をすべて調べたところ、original_transaction_id
とtransaction_id
が異なる例は見つかりませんでした。さらに言えば、重複して購入したため、アイテムが既に購入されているというプロンプトが表示され、無料で復元するかどうか尋ねられました. そうして領収書を確認したところ、この場合でも 2 つのトランザクション ID が同じであってはならないことがわかりました。
問い合わせをしたところ、iTunes の IAP セクションが正常に動作しているという定型文の返信を受け取りました。Apple の IAP の最終的な数と一致するようにこれらをより適切にフィルタリングする方法について、誰かが光を当てるのを助けることができれば、それは大歓迎です!