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;

}

这就是我做内支付的总结,阅读了大量关于内支付的问题,总结出了相对较高安全的内支付流程。

有关内支付的实现,请看另一篇博客:点击打开链接

欢迎指教!期待你的邮件!

你可能感兴趣的:(ios,支付,编码,苹果,应用内支付)