關於Apple支付productID型別驗證分析
阿新 • • 發佈:2018-10-31
Apple中的productID型別包括:消耗型專案、非消耗型專案、自動續期訂閱、非自動續期訂閱專案。
消耗型專案的驗證:
1、客戶端發起Apple支付玩家完成付款。
2、客戶端收到Apple返回的票據資訊,並對票據資訊進行遍歷傳送到服務端做驗證,同時做好客戶端票據資訊的儲存工作以免因為網路問題導致掉單。
3、客戶端收到自己服務端返回的成功訊息後實現productID的消耗即完成了一個購物過程。
費消耗型專案驗證:
非消耗型專案的驗證:
1、客戶端發起Apple支付玩家完成付款。
2、客戶端收到Apple返回的票據資訊,並對票據資訊進行遍歷傳送到服務端做驗證,同時做好客戶端票據資訊的儲存工作以免因為網路問題導致掉單,這裡發給服務端校驗的時候最好能夠對所有的購買專案實現遍歷,因為非消耗專案不會被消耗例如一個 非消耗型票據如下。
- {
- "code": "0",
- "key": 63,
- "ptime": 1508770082,
- "coin": 4588,
- "rece": {
- "receipt_type": "ProductionSandbox",
- "adam_id": 0,
- "app_item_id": 0,
- "bundle_id": "xxx",
- "application_version": "1",
- "download_id": 0,
- "version_external_identifier": 0,
- "receipt_creation_date": "2017-10-23 14:47:52 Etc/GMT",
- "receipt_creation_date_ms": "1508770072000",
- "receipt_creation_date_pst": "2017-10-23 07:47:52 America/Los_Angeles",
- "request_date": "2017-10-23 14:48:03 Etc/GMT",
- "request_date_ms": "1508770083367",
- "request_date_pst": "2017-10-23 07:48:03 America/Los_Angeles",
- "original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
- "original_purchase_date_ms": "1375340400000",
- "original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles",
- "original_application_version": "1.0",
- "in_app": [
- {
- "quantity": "1",
- "product_id": "IPACOIN300",
- "transaction_id": "1000000345744321",
- "original_transaction_id": "1000000345744321",
- "purchase_date": "2017-10-23 12:25:26 Etc/GMT",
- "purchase_date_ms": "1508761526000",
- "purchase_date_pst": "2017-10-23 05:25:26 America/Los_Angeles",
- "original_purchase_date": "2017-10-23 12:25:26 Etc/GMT",
- "original_purchase_date_ms": "1508761526000",
- "original_purchase_date_pst": "2017-10-23 05:25:26 America/Los_Angeles",
- "is_trial_period": "false"
- },
- {
- "quantity": "1",
- "product_id": "IPACOIN300",
- "transaction_id": "1000000345798569",
- "original_transaction_id": "1000000345798569",
- "purchase_date": "2017-10-23 14:47:51 Etc/GMT",
- "purchase_date_ms": "1508770071000",
- "purchase_date_pst": "2017-10-23 07:47:51 America/Los_Angeles",
- "original_purchase_date": "2017-10-23 14:47:51 Etc/GMT",
- "original_purchase_date_ms": "1508770071000",
- "original_purchase_date_pst": "2017-10-23 07:47:51 America/Los_Angeles",
- "is_trial_period": "false"
- },
- {
- "quantity": "1",
- "product_id": "IPACOIN3000",
- "transaction_id": "1000000345744346",
- "original_transaction_id": "1000000345744346",
- "purchase_date": "2017-10-23 12:25:42 Etc/GMT",
- "purchase_date_ms": "1508761542000",
- "purchase_date_pst": "2017-10-23 05:25:42 America/Los_Angeles",
- "original_purchase_date": "2017-10-23 12:25:42 Etc/GMT",
- "original_purchase_date_ms": "1508761542000",
- "original_purchase_date_pst": "2017-10-23 05:25:42 America/Los_Angeles",
- "is_trial_period": "false"
- }
- ]
- },
- "sandbox": "1"
- }
自動續期訂閱、非自動續期訂閱專案
這兩種商品還未用到所以暫時不做總結,開發者可以通過多次充值列印票據資訊根據實際情況處理驗證。
在蘋果支付驗證的時候一定要實現對應用APP的bundleID、transaction_id以及productID的校驗,只有這樣才能防止被刷單。因為蘋果只會告訴你這個票據是否可以驗證通過卻不告訴你這個票據是否被使用過,所以只有實現了對bundleID、transaction_id以及productID的校驗才可以保證這個訂單隻被用一次,並且是你的應用。