iOS應用內支付 IAP 的那些坑

2021-06-21 09:45:23 字數 1596 閱讀 9627

。猿題庫現在推出了公****行測和申論2個產品,均包括web, ios和android三個平台。這次我們嘗試做乙個收費的產品,所以在ios端整合了應用內支付(iap)功能。在開發過程中和上線後,我們遇到了iap中的一些坑,在此分享給各位。

iap 審核相關的坑

iap開發的詳細步驟我寫在另一篇部落格中了。在此主要介紹審核時遇到的問題。

iap型別錯誤

iap驗證邏輯

由於蘋果在ios5.0以下有iap的bug,使得攻擊者可以偽造支付成功的憑證。而ios6.0的系統在越獄後同樣可以偽造憑證,所以我們對於應用內支付,增加了伺服器端的驗證。伺服器端會將支付憑證發給蘋果的伺服器進行二次驗證,以保證憑證是真實有效的。

)驗證。

)驗證。

上有對返回的code的詳細說明。

iap上線後的遇到的情況

我們在伺服器端增加了驗證iap是否有效的邏輯。在產品上線後,如我們所料,我們收到了大量的欺騙性購買,這些都被我們的伺服器識別出來了,但是我們也遇到了以下這次沒有想到的情況:

1、由於國內越獄使用者的比例比較大(大概為50%),所以雖然我們伺服器會驗證購買憑證,但是每天有超過50%以上的憑證都是偽造的。同時由於蘋果的驗證伺服器在美國,憑證驗證請求響應的時間比較慢,大量的偽造憑證發給蘋果伺服器,不知道會不會被蘋果認為我們是在惡意進行ddos。至少我們發現有些時候,驗證請求會超時。

3、蘋果的驗證伺服器有時候會出問題,我們發現本來約定好返回的json資料在有幾次返回的居然是乙個xml格式的檔案。造成我們將正常的付費iap憑證驗證失敗。所以,在伺服器記錄下所有的驗證憑證非常有必要,一來可以防止黑客多次提交同乙個成功憑證的重放攻擊,二來在需要時可以手工進行再驗證。

越獄手機可能被黑客竊取購買憑證!

我們發現有一部分使用者反饋說已經收到蘋果的扣費賬單,但是我們從伺服器的驗證記錄看,他上傳的憑證卻是虛假的。由於這些使用者不太多,我們一開始以為是使用者在惡意欺騙我們,後來我們讓他將蘋果的付費賬單郵件**給我們,以及將itunes的購買記錄截圖**給我們,我們越來越懷疑這裡面有乙個黑色的產業鏈。越獄手機的正常購買憑證可能被黑客的惡意程式截獲,具體的攻擊方式我們討論了一下,其實就是被中間人攻擊

,詳細的過程如下:

1.越獄手機的在被破解後,可能從一些破解渠道安裝了黑客的惡意程式。

2.黑客將越獄手機所有https請求都經過他的中間伺服器。

3.當有支付請求時,黑客先將請求發給蘋果伺服器,待蘋果將成功的憑證返回後,黑客將這個憑證替換成假的憑證,完全支付憑證的偷取。

再舉乙個簡單的例子,你拿500塊錢買了順風優選的500元購物券,由於這個購物券是不記名的,所以順風優選無法知道是誰買的。如果這個購物券在發放過程中被人掉包,那麼偷購物券的人就可以拿這個偷來的真購物券來購物,而順風優選的卡因為是不記名的,所以也無法查證這件事情。在這個例子中,購物券的不記名和蘋果的支付憑證無賬號資訊是同乙個道理。

鑑於以上情況,考慮到越獄手機不但不能成功支付,還會有安全問題,所以我們在新版中取消了越獄手機中的iap支付功能。

所以,請大家還是不要越獄自己的手機,iphone手機越獄後風險相當大。實在不值得為了免費玩幾個遊戲就丟掉安全性。

IOS內購(IAP)的那些事

最近看了內購相關的東西,發現坑還真是不少,這裡做個總結。蘋果內購的主要流程 獲取商品資訊 建立交易 把交易新增到佇列 交易成功獲取憑證 拿著憑證做二次驗證 交易成功 通過產品id獲取商品資訊 skproduct import 把商品id資訊放入乙個集合中 nsset sets nsset setwi...

微信支付的那些坑

payreq req new payreq req.partnerid response.get mch id req.prepayid response.get prepay id req.packagevalue sign wxpay req.noncestr response.get nonc...

iOS 內購遇到的坑

原因 當使用內購購買過商品後沒有把這個交易事件關,所以當我們再次去購買商品後就會呼叫以前已經購買成功的交易事件去購買因為已經購買過,才會有這個提示 解決方法 1.當我們使用 skpaymentqueue defaultqueue addpayment payment 這個方法進行支付請求後,因為我們...