本人項(xiàng)目是早教類項(xiàng)目,用到了內(nèi)購的功能,記錄一下,用到的是?非續(xù)訂訂閱 類型的內(nèi)購。
注意:1,審核的通過,需要在客戶端或者server進(jìn)行雙重驗(yàn)證,不然迭代版本的時(shí)候會(huì)被拒。2,你還要上傳內(nèi)購的具體位置在APP審核信息的附件里面,即便你上傳了,審核人員還是找不到還是被拒,那么你只能回復(fù)他的郵件,需要注意的是回復(fù)郵件上傳的附件的文件不能包含中文,如果你的文件包含了中文就一直提示服務(wù)器錯(cuò)誤,上傳不上去。
驗(yàn)證操作讓后臺(tái)去驗(yàn)證,因?yàn)榭蛻舳水吘箾]后臺(tái)驗(yàn)證的好,防止別人刷單,為什么要做product_id商品id,bundle_id包名,transaction_id訂單號(hào),因?yàn)?客戶端傳遞過來的 憑證,是不可信的,有可能是別人篡改后的結(jié)果。比如,他們有個(gè)自己的內(nèi)購,我們把這個(gè)憑證發(fā)到蘋果是可以拿到返回結(jié)果的,但是?product_id,bundle_id沒辦法一樣。 ? ?
"transaction_id": "1000000460004095" 一定要進(jìn)行去重驗(yàn)證,一個(gè)訂單號(hào)只能加一次款
"bundle_id": "com.rtjk.xshl" 當(dāng)前的產(chǎn)品的包名,一定要驗(yàn)證返回的包名和此包名要一致
"product_id": "6hongliao" 對(duì)應(yīng)商品品id,自己做一個(gè)金額的映射就行,對(duì)應(yīng)到具體的金額,建議命名要規(guī)則
為保證審核的通過,需要在客戶端或者server進(jìn)行雙重驗(yàn)證,即,先以線上交易驗(yàn)證地址進(jìn)行驗(yàn)證,如果蘋果正式驗(yàn)證服務(wù)器的返回驗(yàn)證碼code為21007,則再一次連接沙盒測(cè)試服務(wù)器進(jìn)行驗(yàn)證即可。在應(yīng)用提審時(shí),蘋果IAP提審驗(yàn)證時(shí)是在沙盒環(huán)境的進(jìn)行的,即:蘋果在審核App時(shí),只會(huì)在sandbox環(huán)境購買,其產(chǎn)生的購買憑證,也只能連接蘋果的測(cè)試驗(yàn)證服務(wù)器,如果沒有做雙驗(yàn)證,需要特別注意此問題,否則會(huì)被拒。
蘋果人員審核的時(shí)候,是用的沙箱環(huán)境,但是如果你是迭代版本,蘋果審核的時(shí)候會(huì)查看你是否進(jìn)行認(rèn)證沒有,如果沒有認(rèn)證會(huì)被拒。
基本上所有的 操作都可以再前端完成操作,包括對(duì)支付憑證的驗(yàn)證,但是如果在客戶端驗(yàn)證憑證可能存在被篡改的危險(xiǎn),
服務(wù)器去重驗(yàn)證和加款,是建立在 用戶已經(jīng)在前端支付成功,然后由ios會(huì)得到一個(gè)字節(jié)流,然后 base64后轉(zhuǎn)給 后臺(tái)。
后臺(tái)通過這個(gè)字符串 去請(qǐng)求蘋果的服務(wù)器,然后得到一個(gè)json字符串去給用戶加款,其中注意事項(xiàng)為
//沙箱static final String testUrl = "https://sandbox.itunes.apple.com/verifyReceipt";
//正式 static final String product = ?"https://buy.itunes.apple.com/verifyReceipt";
請(qǐng)求蘋果地址 返回的 內(nèi)容為
conten-type = application/json
請(qǐng)求的蘋果的內(nèi)容為String param = "{\"receipt-data\":\""+客戶端返回的base64+"\"}";
{
? ? environment = Sandbox; //沙河環(huán)境?Sandbox
? ? receipt =? ? {
? ? ? ? "adam_id" = 0;
? ? ? ? "app_item_id" = 0;
? ? ? ? "application_version" = 25;//項(xiàng)目版本號(hào)
? ? ? ? "bundle_id" = "lianmeng.com"; //項(xiàng)目bundle_id?一定要驗(yàn)證返回的包名和此包名要一致
? ? ? ? "download_id" = 0;
? ? ? ? "in_app" =? ? ? ? (
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 06:19:22 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576045162000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 22:19:22 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603451122;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";//對(duì)應(yīng)產(chǎn)品id,自己做一個(gè)金額的映射就行,對(duì)應(yīng)到具體的金額,建議命名要規(guī)則
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 06:19:22 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576045162000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 22:19:22 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603451122;//一定要進(jìn)行去重驗(yàn)證,一個(gè)訂單號(hào)只能加一次款
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 06:19:59 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576045199000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 22:19:59 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603451312;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 06:19:59 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576045199000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 22:19:59 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603451312;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 08:13:59 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576052039000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-11 00:13:59 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603500479;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 08:13:59 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576052039000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-11 00:13:59 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603500479;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 06:21:21 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576045281000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 22:21:21 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603451541;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengbanianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 06:21:21 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576045281000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 22:21:21 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603451541;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 06:22:22 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576045342000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 22:22:22 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603451660;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 06:22:22 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576045342000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 22:22:22 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603451660;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 05:59:34 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576043974000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 21:59:34 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603446070;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengchengzhangka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 05:59:34 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576043974000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 21:59:34 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603446070;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-11 06:17:40 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576045060000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-10 22:17:40 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000603450733;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-11 06:17:40 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576045060000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-10 22:17:40 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000603450733;
? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "is_trial_period" = false;
? ? ? ? ? ? ? ? "original_purchase_date" = "2019-12-13 01:35:30 Etc/GMT";
? ? ? ? ? ? ? ? "original_purchase_date_ms" = 1576200930000;
? ? ? ? ? ? ? ? "original_purchase_date_pst" = "2019-12-12 17:35:30 America/Los_Angeles";
? ? ? ? ? ? ? ? "original_transaction_id" = 1000000604337656;
? ? ? ? ? ? ? ? "product_id" = "lianmeng_kechengnianka";
? ? ? ? ? ? ? ? "purchase_date" = "2019-12-13 01:35:30 Etc/GMT";
? ? ? ? ? ? ? ? "purchase_date_ms" = 1576200930000;
? ? ? ? ? ? ? ? "purchase_date_pst" = "2019-12-12 17:35:30 America/Los_Angeles";
? ? ? ? ? ? ? ? quantity = 1;
? ? ? ? ? ? ? ? "transaction_id" = 1000000604337656;//一定要進(jìn)行去重驗(yàn)證,一個(gè)訂單號(hào)只能加一次款
? ? ? ? ? ? }
? ? ? ? );
? ? ? ? "original_application_version" = "1.0";
? ? ? ? "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";
? ? ? ? "receipt_creation_date" = "2019-12-13 07:21:06 Etc/GMT";
? ? ? ? "receipt_creation_date_ms" = 1576221666000;
? ? ? ? "receipt_creation_date_pst" = "2019-12-12 23:21:06 America/Los_Angeles";
? ? ? ? "receipt_type" = ProductionSandbox;
? ? ? ? "request_date" = "2019-12-13 07:21:32 Etc/GMT";
? ? ? ? "request_date_ms" = 1576221692466;
? ? ? ? "request_date_pst" = "2019-12-12 23:21:32 America/Los_Angeles";
? ? ? ? "version_external_identifier" = 0;
? ? };
? ? status = 0;//表示當(dāng)前請(qǐng)求返回正常
}
耗型項(xiàng)目:對(duì)于消耗型App內(nèi)購買項(xiàng)目,用戶每次下載時(shí)都必須進(jìn)行購買。一次性服務(wù)通常屬于消耗型項(xiàng)目,例如釣魚App 中的魚餌。
非消耗型項(xiàng)目:對(duì)于非消耗型App內(nèi)購買項(xiàng)目,用戶僅需要購買一次。不會(huì)過期或隨使用而減少的服務(wù)通常為非消耗型項(xiàng)目,例如游戲App 的新跑道。
自動(dòng)續(xù)訂訂閱:通過自動(dòng)續(xù)訂訂閱,用戶可以購買指定時(shí)間期限內(nèi)的更新和動(dòng)態(tài)內(nèi)容。除非用戶取消選擇,否則訂閱(例如雜志訂閱等)會(huì)自動(dòng)續(xù)訂。
免費(fèi)訂閱:通過免費(fèi)訂閱,開發(fā)者可以將免費(fèi)訂閱內(nèi)容放入“報(bào)刊雜志”。用戶注冊(cè)免費(fèi)訂閱后,該訂閱內(nèi)容將會(huì)出現(xiàn)在與該用戶Apple ID 關(guān)聯(lián)的所有設(shè)備上。請(qǐng)注意,免費(fèi)訂閱不會(huì)過期,并且僅在支持報(bào)刊雜志功能的 App 中提供。
非續(xù)訂訂閱:非續(xù)訂訂閱允許有時(shí)限性的營銷服務(wù)。對(duì)于 App 內(nèi)購買項(xiàng)目中的限時(shí)訪問內(nèi)容,就需使用非續(xù)訂訂閱。例如,導(dǎo)航App 中語音導(dǎo)航功能的一周訂閱,或者年度訂閱已存檔的視頻或音頻的在線目錄。
后面是一些別人的寫的內(nèi)購地址:
蘋果內(nèi)購 服務(wù)器端驗(yàn)證返回的內(nèi)容? ?稅務(wù)和銀行業(yè)務(wù)添加流程
2017蘋果內(nèi)購最新教程? ? ??內(nèi)購成功驗(yàn)證流程? ? ??內(nèi)購注意點(diǎn)