苹果充值验证


AppStore增加了验证内购(In App Purchasement)的方法, 就是苹果提供一个url地址, 开发测试用:
https://sandbox.itunes.apple.com/verifyReceipt

产品用:
https://buy.itunes.apple.com/verifyReceipt

当购买成功时, 会得到苹果返回的一个收据(receipt), 苹果推荐的方法是将收据发给开发者的server, 由server像上述地址post http消息, 进行验证, 苹果将结果返回.到底是真正的购买还是虚假的购买.


1.应用发送请求到服务器,获取所有的Products ID列表
2.服务器返回Products ID列表
3.应用发送请求至App Store,获取Products的信息
4.App Store返回Product信息
5.应用使用这些信息,向用户显示一个Store界面
6.用户从Store中选择一项
7.应用向App Store发送payment请求
8.App Store处理该payment,并返回完成的transaction
9.应用从transaction中获取receipt数据,并将其发送给服务器
10.服务器记录receipt数据,并建立一个audit trail(审查跟踪)
11.服务器发送receipt数据到App Store,以验证是否合法的transaction
12.App Store解析receipt数据,并返回receipt,以及验证结果(是否合法)
13.服务器读取返回的receipt数据,并确定哪个用户已经完成购买
14.服务器交付已购买的内容至iOS应用
Purchase(购买)
当用户准备好购买product时,应用请求App Store来完成支付。App Store会创建一个持久化的transaction,即使用户退出和重新启动应用,也会继续地处理该支付交易。App Store将未决交易列表同步给应用,并且在任何交易状态变化时,递送更新信息给应用。



Store Receipt
你发送给App Store的receipt数据编码了交易的信息。当App Store验证receipt时,会先解码receipt数据,并在响应中返回。receipt响应是一个JSON dictionary,包含了应用中SKPaymentTransaction对象的所有信息。因此服务器可以查询这些JSON域,来获取用户购买的详细信息。苹果推荐iOS应用只发送receipt数据给服务器,不发送交易数据给服务器,然后服务器再到App Store去验证receipt。App Store会验证receipt数据没有被篡改。服务器从App Store响应的receipt数据中获取交易信息,而不是由iOS应用直接发送交易信息给服务器,会更加安全。
下表列出了你可以从响应receipt中获取的信息,许多键直接对应于SKPaymentTransaction类的属性。表中没有指定的键都被苹果保留,不得使用。
描述
quantity购买的数量,对应于transaction.payment.quantity属性
product_idproduct ID标识,对应于transaction.payment.productIdentifier属性
transaction_idtransaction ID标识,对应于transaction.transactionIdentifier属性
purchase_date交易发生的日期和时间,对应于transaction.transactionDate属性
original_transaction_id对于还原交易,这个值保存了原始交易ID
original_purchase_date对于还原交易,这个值保存了原始交易日期
app_item_id字符串,App Store用来唯一地标识一个创建了支付交易的iOS应用。如果你的服务器支持多个iOS应用,你可以使用这个值来区分不同的应用。在sandbox中运行的应用没有app_item_id,因此这个键也不存在
version_external_identifier唯一标识你的应用修订版本的任意数值。sandbox应用没有这个键
bidiOS应用的Bundle ID
bvrsiOS应用的版本号


测试验证结果:

{
    environment = Sandbox;
    receipt =     {
        "adam_id" = 0;
        "app_item_id" = 0;
        "application_version" = "1.0.4.4";
        "bundle_id" = "com.5ingame.gf";
        "download_id" = 0;
        "in_app" =         (
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2015-08-05 06:24:35 Etc/GMT";
                "original_purchase_date_ms" = 1438755875000;
                "original_purchase_date_pst" = "2015-08-04 23:24:35 America/Los_Angeles";
                "original_transaction_id" = 1000000166363893;
                "product_id" = "com.ysb.sanguo.one";
                "purchase_date" = "2015-08-05 06:24:35 Etc/GMT";
                "purchase_date_ms" = 1438755875000;
                "purchase_date_pst" = "2015-08-04 23:24:35 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000166363893;
            },
                        {
                "is_trial_period" = false;
                "original_purchase_date" = "2015-08-05 08:30:46 Etc/GMT";
                "original_purchase_date_ms" = 1438763446000;
                "original_purchase_date_pst" = "2015-08-05 01:30:46 America/Los_Angeles";
                "original_transaction_id" = 1000000166385461;
                "product_id" = "com.ysb.sanguo.two";
                "purchase_date" = "2015-08-05 08:30:46 Etc/GMT";
                "purchase_date_ms" = 1438763446000;
                "purchase_date_pst" = "2015-08-05 01:30:46 America/Los_Angeles";
                quantity = 1;
                "transaction_id" = 1000000166385461;
            }
        );
        "original_application_version" = "1.0";
        "original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
        "original_purchase_date_ms" = 1375340400000;
        "original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
        "receipt_type" = ProductionSandbox;
        "request_date" = "2015-08-05 08:32:00 Etc/GMT";
        "request_date_ms" = 1438763520449;
        "request_date_pst" = "2015-08-05 01:32:00 America/Los_Angeles";
        "version_external_identifier" = 0;
    };
    status = 0;
}







参考:

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1

http://blog.csdn.net/a351945755/article/details/22919533

http://www.cnblogs.com/dqshll/p/3731386.html

http://blog.csdn.net/azhou_hui/article/details/45154421

http://blog.csdn.net/imanapple/article/details/47174993

http://blog.csdn.net/pbymw8iwm/article/details/42167125

http://blog.csdn.net/wave_1102/article/details/9190897



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值