1. 程式人生 > >iOS遊戲開發二:蘋果內支付的流程(In-App Purchases)

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;

}

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

有關內支付的實現,請看另一篇部落格:點選開啟連結

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