Apple 应用内支付心得
http://tank2308635.iteye.com/blog/1238687Apple 應用內支付
首先簡要說一下IAP 流程
簡要步驟說明:
- 用戶進入購買虛擬物品頁面,App從后臺服務器獲取產品列表然后顯示給用戶
- 用戶點擊購買購買某一個虛擬物品,APP就發送該虛擬物品的productionIdentifier到Apple服務器
- Apple服務器根據APP發送過來的productionIdentifier返回相應的物品的信息(描述,價格等)
- 用戶點擊確認鍵購買該物品,購買請求發送到Apple服務器
- Apple服務器完成購買后,返回用戶一個完成購買的憑證
- APP發送這個憑證到后臺服務器驗證
- 后臺服務器把這個憑證發送到Apple驗證,Apple返回一個字段給后臺服務器表明該憑證是否有效
- 后臺服務器把驗證結果在發送到APP,APP根據驗證結果做相應的處理
由于IAP相關文檔有限,為此特整理在IAP開發過程中的一些注意事項:
一、產品類型的選擇
IAP的商品從消費性質上分為四種:
1.消耗型商品(Consumable),比如游戲道具,子彈,藥品等等。由于這類商品可以被消耗,所以支持重復購買。蘋果應用商店不保存此類商品的購買記錄,如果要保存則需要開發者同步到自己的服務器上。
2.非消耗型商品(Non-Consumable),比如游戲關卡,隱藏地圖等等。這類商品只要購買一次便可以了,蘋果應用商店里每一個用戶對非消耗型商品的購買都有記錄,可以在不同的設備上恢復購買狀態,這個恢復的過程叫做Restore。 在自己做測試時,首次購買非消耗型商品時,在updateTransaction回調中,會調用XXXpurchasing \ XXXpurchased .再次購買該商品時,蘋果會自動提示該商品已經購買您需要再次免費獲取嗎?此時走的流程和首次購買是一樣的,也會調用XXXpurchasing \ XXXpurchased 。都未調用XXXrestore 回調,具體原因不詳。
3.自動重置型訂閱(Auto-Renewable Subscriptions),比如電子雜志,讀物等。消費者購買這類商品時會從列表中選擇一個有效期限,賣家在定義商品的時候從一群固定的選項 中選擇添加一個有效期,比如7天,一個月,兩個月。過了有效期之后,商品的購買狀態會被自動重置成未購買,要想繼續獲得內容則需要再次訂閱。這種類型的商品和非消耗型商品一樣,會在蘋果商店內保存購買記錄。
4.非自動重置型訂閱(Non-Renewing Subscription),比如用戶訂閱電子雜志和讀物報刊時需要從自定義的期限列表中選擇期限,而不是蘋果提供的固定選項,比如9天,一個半月或任意時間。在這種情況下,蘋果商店無法根據期限來控制訂閱的到期行為,所以一切都需要開發商自己編寫相應的邏輯來實現。
在創建產品類型的選擇決定著客戶端/server的處理流程,為此一定要在選擇類型時考慮所創建的產品特性,選擇時,如果對于自動重置型訂閱,特別需要注意,此類型的商品的必須依據蘋果設置的使用期限進行創建,如一個月、三個月、半年等,不能創建任意時間段,同時,在此類型中,經過在沙盒測試發現,當產品到期時,蘋果服務器會自動進行續訂操作,因此,客戶端需根據監聽處理蘋果的續訂事件進行續訂結果提示用戶;
二、產品的支付驗證服務器選擇
當創建好產品后,客戶端進行IAP服務監聽后,由于IAP在支付后成功后,會收到蘋果服務器的支付憑證,客戶端在獲取到支付憑證后,需要將支付憑證反饋給server服務器進行支付驗證確認。此時,不管是采用客戶端APP的server驗證方式還是客戶端APP驗證方式,都需要根據當前APP的支付環境選擇正確的驗證地址,在蘋果服務器中,沙盒測試環境的IAP驗證地址為:https://sandbox.itunes.apple.com/verifyReceipt,正常線上交易的驗證地址為:https://buy.itunes.apple.com/verifyReceipt,為保證審核的通過,需要在客戶端或server進行雙重驗證,即,先以線上交易驗證地址進行驗證,如果蘋果正式驗證服務器的返回驗證碼code為21007,則再一次連接沙盒測試服務器進行驗證即可。
在應用提審時,蘋果IAP提審驗證時是在沙盒環境的進行的,即:蘋果在審核App時,只會在sandbox環境購買,其產生的購買憑證,也只能連接蘋果的測試驗證服務器,如果沒有做雙驗證,需要特別注意此問題,否則會被拒;
三、產品線上支付過程中的不同環境處理
IAP沙盒環境及線上環境在處理過程中有些問題,需進行特殊處理;
在沙盒環境下,進行支付時,無銀行支付驗證過程,此時應用一直處于IAP支付過程中,直至支付完成;
而在線環境下,由于IOS6添加了支付確認過程,導致在銀行密碼確認過程中確認完畢后,應用未能及時返回APP,且此時會收到server下推的SKPaymentTransactionStateFailed事件,當返回到應用后,如果此時已經注冊了IAP支付消息處理,當剛才的支付成功后,蘋果服務器會反饋SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件,此時客戶端在此事件中獲取憑證并進行支付確認;
由于部分類型具有購買恢復操作Restore,所以當刪除APP后,又重新安裝APP,此時需要恢復之前的購買時,在IAP處理中仍需進行SKPaymentTransactionStateRestored事件的處理,如果通過server方式進行支付憑證驗證的,需要判斷當前的Restore事件是恢復支付還是購買支付,以保證servver的統計正確;此時可由server根據驗證憑證中的有效信息(如有效期信息)進行判斷是為新的購買還是以往支付的恢復;
四、IAP事件注冊時機
對于IAP支付,當支付成功時但由于網絡等引起的支付憑證驗證失敗或未進行驗證時,在IAP事件注冊后,蘋果服務器會通過SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件進行返回支付憑證,客戶端需對此支付憑證進行驗證,以保證支付完整性;為此,在app啟動時,應直接進行IAP事件注冊;即:[SKPaymentQueuedefaultQueue]addTransactionObserver操作;
五、越獄手機的IAP問題
由于越獄手機可能安裝了黑客的惡意程序,監聽網絡數據,支付憑證中并不包含任何用戶的apple id信息,所以我們的app和服務器無法知道這個憑證是誰買的,如果惡意程序截獲蘋果服務器的有效支付憑證,但惡意程序將假的支付憑證發給后臺server導致原支付的賬號驗證失敗,而此時惡意程序將截獲的有效支付憑證對應到另外的支付賬號上,就會導致該惡意程序設置的賬號通過正確的支付憑證而獲取server的認證。
所以,對于越獄的手機可禁用IAP支付,采用第三方支付平臺進行支付的方式。
IAP支付常見問題 http://www.th7.cn/Program/IOS/201506/472461.shtml
總結
以上是生活随笔為你收集整理的Apple 应用内支付心得的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大v用户数据统计分析
- 下一篇: 中国人民银行和中国银行是什么关系?关系很