iOS遊戲開發二:蘋果內支付的流程(In-App Purchases)

蘋果應用內支付流程


一 服務器模式流程如下:

1. 程序向服務器發送一個請求 以抓取一份包含所有商品ID的列表

2. 服務器返回包含所有商品ID標識符的列表

3. 程序將所有商品ID列表發送到App Store 以得到所有產品的詳細信息

4. App Store返回所有商品的詳細信息

5. 程序把返回的商品詳細信息顯示給用戶 即程序商店UI顯示商品信息

6. 用戶選擇某個產品

7. 程序向App Store發送支付請求

8. App Store處理支付請求並返回交易完成信息

9. 程序從信息中獲得數據transactionReceipt base64編碼 併發送至服務器

10. 服務器紀錄數據,並進行審(我們的ID用戶名等)查

11. 服務器將數據發給App Store來驗證該交易的有效性。

12. App Store對收到的數據進行解析,返回該數據和說明其是否有效的標識

13. 服務器讀取返回的數據,如果合法 確定用戶購買的內容

14. 服務器將購買的內容傳遞給程序


二 驗證收據的過程

1.程序從transaction的transactionReceipt並進行base64位編碼(服務器也可以做base64位編碼) 傳遞給服務器

2.服務器端創建JSON對象,字典格式效果如下:

{

"receipt-data" : "(第1步編碼數據)"

3.服務器發送HTTP POST 得請求, 將數據發送到Appstore 地址爲

http://buy.itunes.apple.com/verfyReceipt

如果是沙盒測試必須是

http://sandbox.itunes.apple.com/verifyReceipt

4.App Store向服務器返回一個JSON格式得對象 如下:

{

"status" : 0 , //if 0 successful or failure

"receipt" : {…..}

}

5.服務器將status返回給程序 如果是0表示成功 用戶自動刷新數

6.服務器將商品添加到程序 根據receipt


三 創建in-App過程

Bundle ID 與你得開發者帳號有關

接下來得兩頁將要求你填寫你得應用信息, 但是這個可以改變


四 修改應用信息

按鈕 View Details 可以改變信息


五 刪除應用

Rights and Pricing   => specific stores => Deselect All => Save Change => 24hours以內刪除


六 內購的驗證文檔如下

http://zoooot.com/732/my-experiences-with-verifying-in-app-purchase-receipts


七 更安全的內購驗證


1.沒有做驗證會被別人攻擊

2.客戶端驗證也會出現問題

3.在服務器端驗證 http://www.phpriot.com/articles/verifying-app-store-receipts-php-curl

4.在服務器端添加更嚴格的驗證信息

https://gist.github.com/jamesstout/5073237

5.做雙層驗證

https://gist.github.com/jamesstout/5073237#file-verifyreceipt-php-L189

6.越獄的設備當裝有Cydia會造成不安全支付

通過以下禁用iap支付功能


-(bool)canInAppPayment

{

    if ([[NSFileManager defaultManager] fileExistsAtPath:@”/Applications/Cydia.app”]){

        NSLog(@”Jailbreak detected”);

        return false;

    }

   if( [SKPaymentQueue canMakePayments] )

      return true;

  else

     return false;

}

這就是我做內支付的總結,閱讀了大量關於內支付的問題,總結出了相對較高安全的內支付流程。

有關內支付的實現,請看另一篇博客:點擊打開鏈接

歡迎指教!期待你的郵件!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章