苹果充值验证

来源:互联网 发布:虚拟网络社交的好处 编辑:程序博客网 时间:2024/05/01 19:43


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对于还原交易,这个值保存了原始交易IDoriginal_purchase_date对于还原交易,这个值保存了原始交易日期app_item_id字符串,App Store用来唯一地标识一个创建了支付交易的iOS应用。如果你的服务器支持多个iOS应用,你可以使用这个值来区分不同的应用。在sandbox中运行的应用没有app_item_id,因此这个键也不存在version_external_identifier唯一标识你的应用修订版本的任意数值。sandbox应用没有这个键bidiOS应用的Bundle IDbvrsiOS应用的版本号


测试验证结果:

{    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 0
原创粉丝点击