iOS內(nèi)購買自動續(xù)期訂閱說明

服務(wù)端驗(yàn)證自動續(xù)期訂閱的收據(jù)過程如下:

服務(wù)端收到客戶端發(fā)送的收據(jù)后,向蘋果服務(wù)器發(fā)送post請求

蘋果測試環(huán)境 https://sandbox.itunes.apple.com/verifyReceipt,

蘋果生產(chǎn)環(huán)境 https://buy.itunes.apple.com/verifyReceipt

請求的http body是json格式,receipt-data字段對應(yīng)的就是收據(jù)數(shù)據(jù),password字段對應(yīng)蘋果開發(fā)賬號設(shè)置的秘鑰,exclude-old-transactions字段為true時(shí),可過濾掉大部分舊的購買,只顯示新的訂閱。例如:

{

"exclude-old-transactions":true,

"password": "***",

"receipt-data":"***"

}

蘋果服務(wù)器返回的http body里的status字段對應(yīng)的是收據(jù)狀態(tài),若為0,則收據(jù)為真。

在receipt字段里,bundle_id 是APP的固定ID,可用于檢查收據(jù)是否屬于我們的APP。

在latest_receipt_info數(shù)組里,遍歷數(shù)據(jù),找到最大的expires_date,這個(gè)是訂閱過期的日期,也可用expires_date_ms或expires_date_pst字段。服務(wù)器應(yīng)保存該字段到數(shù)據(jù)庫

product_id 是商品id,要與購買的商品ID相符才有效。

web_order_line_item_id 是本次購買的ID

original_transaction_id 是第一次訂閱的交易ID,服務(wù)器應(yīng)保存該字段到數(shù)據(jù)庫

例如

{

? "status": 0,

? "environment": "Sandbox",

? "receipt": {

? ? "receipt_type": "ProductionSandbox",

? ? "adam_id": 0,

? ? "app_item_id": 0,

? ? "bundle_id": "***",

? ? "application_version": "6",

? ? "download_id": 0,

? ? "version_external_identifier": 0,

? ? "receipt_creation_date": "2019-11-28 05:38:19 Etc/GMT",

? ? "receipt_creation_date_ms": "1574919499000",

? ? "receipt_creation_date_pst": "2019-11-27 21:38:19 America/Los_Angeles",

? ? "request_date": "2019-11-28 08:18:12 Etc/GMT",

? ? "request_date_ms": "1574929092579",

? ? "request_date_pst": "2019-11-28 00:18:12 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": "1000000598465716",

? ? ? ? "original_transaction_id": "1000000598465716",

? ? ? ? "purchase_date": "2019-11-28 05:38:19 Etc/GMT",

? ? ? ? "purchase_date_ms": "1574919499000",

? ? ? ? "purchase_date_pst": "2019-11-27 21:38:19 America/Los_Angeles",

? ? ? ? "original_purchase_date": "2019-11-28 05:38:19 Etc/GMT",

? ? ? ? "original_purchase_date_ms": "1574919499000",

? ? ? ? "original_purchase_date_pst": "2019-11-27 21:38:19 America/Los_Angeles",

? ? ? ? "expires_date": "2019-11-28 05:43:19 Etc/GMT",

? ? ? ? "expires_date_ms": "1574919799000",

? ? ? ? "expires_date_pst": "2019-11-27 21:43:19 America/Los_Angeles",

? ? ? ? "web_order_line_item_id": "1000000048591202",

? ? ? ? "is_trial_period": "false",

? ? ? ? "is_in_intro_offer_period": "false"

? ? ? }

? ? ]

? },

? "latest_receipt_info": [

? ? {

? ? ? "quantity": "1",

? ? ? "product_id": "***",

? ? ? "transaction_id": "1000000594693615",

? ? ? "original_transaction_id": "1000000594693615",

? ? ? "purchase_date": "2019-11-20 06:33:11 Etc/GMT",

? ? ? "purchase_date_ms": "1574231591000",

? ? ? "purchase_date_pst": "2019-11-19 22:33:11 America/Los_Angeles",

? ? ? "original_purchase_date": "2019-11-20 06:33:11 Etc/GMT",

? ? ? "original_purchase_date_ms": "1574231591000",

? ? ? "original_purchase_date_pst": "2019-11-19 22:33:11 America/Los_Angeles",

? ? ? "is_trial_period": "false"

? ? },

? ? {

? ? ? "quantity": "1",

? ? ? "product_id": "***",

? ? ? "transaction_id": "1000000598475362",

? ? ? "original_transaction_id": "1000000598465716",

? ? ? "purchase_date": "2019-11-28 06:03:19 Etc/GMT",

? ? ? "purchase_date_ms": "1574920999000",

? ? ? "purchase_date_pst": "2019-11-27 22:03:19 America/Los_Angeles",

? ? ? "original_purchase_date": "2019-11-28 05:38:19 Etc/GMT",

? ? ? "original_purchase_date_ms": "1574919499000",

? ? ? "original_purchase_date_pst": "2019-11-27 21:38:19 America/Los_Angeles",

? ? ? "is_trial_period": "false",

? ? ? "expires_date": "2019-11-28 06:08:19 Etc/GMT",

? ? ? "expires_date_ms": "1574921299000",

? ? ? "expires_date_pst": "2019-11-27 22:08:19 America/Los_Angeles",

? ? ? "web_order_line_item_id": "1000000048591627",

? ? ? "is_in_intro_offer_period": "false",

? ? ? "subscription_group_identifier": "20577287"

? ? }

? ],

? "latest_receipt": "***",

? "pending_renewal_info": [

? ? {

? ? ? "auto_renew_product_id": "jfldsjf",

? ? ? "original_transaction_id": "1000000598465716",

? ? ? "product_id": "jfldsjf",

? ? ? "auto_renew_status": "0",

? ? ? "expiration_intent": "1",

? ? ? "is_in_billing_retry_period": "0"

? ? }

? ]

}

收據(jù)應(yīng)該保存在服務(wù)器里,當(dāng)訂閱到期時(shí),再次用收據(jù)向蘋果發(fā)送請求,更新用戶的訂閱到期時(shí)間。

在latest_receipt_info數(shù)組里,用original_transaction_id找到對應(yīng)的交易,查看expires_date。若expires_date是過去的日期,表示用戶沒有續(xù)訂。若expires_date是未來的日期,表示用戶已續(xù)訂。更新用戶的過期日期。

latest_receipt是最新的收據(jù),應(yīng)保存到服務(wù)器數(shù)據(jù)庫里,替換舊收據(jù)。

pending_renewal_info里的auto_renew_status表示是否還可能有后續(xù)的訂閱,若為0表示用戶已取消訂閱

is_in_billing_retry_period為1表示用戶支付信息有問題,蘋果正在嘗試重新扣款(最長持續(xù)60天),為0表示蘋果停止重新扣款。

對于用戶退款、更改訂閱的行為的檢查,服務(wù)器可與蘋果建立服務(wù)端的連接,獲取用戶的訂閱狀態(tài)變化通知。開發(fā)賬戶中要設(shè)置服務(wù)器的URL。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容