IAP流程
IAP流程分為兩種:
一種是直接使用Apple的服務器進行購買和驗證,
另一種就是自己假設服務器進行驗證。由於國內網絡連接Apple服務器驗證非常慢,而且也為了防止黑客偽造購買憑證,通用做法是自己架設服務器進行驗證。
下面我們通過圖來看看兩種方式的差別:
使用Apple服務器

自己架設服務器

這里重要主要講講服務端這一塊的校驗過程因為涉及到校驗合法性。
1、首先拿到客戶端的支付receiptData和transaction信息
2、服務端通過receiptData通過向蘋果服務器post數據發起校驗
3、服務端端對蘋果服務器響應數據做處理和校驗訂單的合法性。
3、如果訂單合法則對訂單做出相應處理。
附錄:
蘋果服務器響應體數據
{
"status": 0,
"environment": "Sandbox",
"receipt": {
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "應用標識",
"application_version": "版本號",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "2017-07-13 08:33:57 Etc/GMT",
"receipt_creation_date_ms": "1499934837000",
"receipt_creation_date_pst": "2017-07-13 01:33:57 America/Los_Angeles",
"request_date": "2017-07-13 08:34:02 Etc/GMT",
"request_date_ms": "1499934842771",
"request_date_pst": "2017-07-13 01:34:02 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": "",
"transaction_id": "",
"original_transaction_id": "",
"purchase_date": "2017-05-20 04:22:32 Etc/GMT",
"purchase_date_ms": "1495254152000",
"purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
"original_purchase_date": "2017-05-20 04:22:32 Etc/GMT",
"original_purchase_date_ms": "1495254152000",
"original_purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
"is_trial_period": "false"
},
{
"quantity": "1",
"product_id": "",
"transaction_id": "",
"original_transaction_id": "",
"purchase_date": "2017-05-20 04:28:32 Etc/GMT",
"purchase_date_ms": "1495254512000",
"purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
"original_purchase_date": "2017-05-20 04:28:32 Etc/GMT",
"original_purchase_date_ms": "1495254512000",
"original_purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
"is_trial_period": "false"
}
]
}
}
狀態說明
狀態碼 描述
21000 App Store無法讀取你提供的JSON數據
21002 收據數據不符合格式
21003 收據無法被驗證
21004 你提供的共享密鑰和賬戶的共享密鑰不一致
21005 收據服務器當前不可用
21006 收據是有效的,但訂閱服務已經過期。當收到這個信息時,解碼后的收據信息也包含在返回內容中
21007 收據信息是 測試用(sandbox),但卻被發送到產品環境中驗證
21008 收據信息是產品環境中使用,但卻被發送到測試環境中驗證
21000 App Store無法讀取你提供的JSON數據
21002 收據數據不符合格式
21003 收據無法被驗證
21004 你提供的共享密鑰和賬戶的共享密鑰不一致
21005 收據服務器當前不可用
21006 收據是有效的,但訂閱服務已經過期。當收到這個信息時,解碼后的收據信息也包含在返回內容中
21007 收據信息是 測試用(sandbox),但卻被發送到產品環境中驗證
21008 收據信息是產品環境中使用,但卻被發送到測試環境中驗證