来源:http://inzaghi.cn/?p=231
一 校验方式
1. 发送HTTP POST的请求,将数据发送到App Store,其地址为:
https://buy.itunes.apple.com/verifyReceipt
2. App Store的返回值也是一个JSON格式的对象,包含两个键值对, status和receipt:
{
“status” : 0,
“receipt” : { … }
}
二 返回值说明
如果用户的收据是有效的,订阅被激活,则status的值为0。receipt对应的值为解码后的收据信息。如果你的服务器收到了非零值的状态码,对照表7-1查看:
表7-1 自动更新型订阅服务返回状态码
状态码 描述
21000 App Store无法读取你提供的JSON数据
21002 收据数据不符合格式
21003 收据无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 收据服务器当前不可用
21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证
21008 收据信息是产品环境中使用,但却被发送到测试环境中验证
注意:在这里的非零状态码只是针对自动更新型订阅服务,不能将这些状态码用在测试其他类型产品的返回值中。
JSON数据中的receipt栏位包含了解析过的收据信息。自动更新型订阅服务包含了一些新加的信息。请参考表7-2:
表7-2 自动更新型订阅服务的信息:
键名 描述
expires_date 订阅的过期时间,显示方式是从Jan 1, 1970, 00:00:00 GMT计算到过期时间的毫秒数。这个键不包含在恢复的交易信息中。
original_transaction_id 初次购买的交易标识。所有订阅的更新和恢复交易都共享这个标识
original_purchase_date 初次购买(订阅)的日期。
purchase_date 交易的日期。对于更新订阅的交易来说,这个日期表示更新日期。如果从App Store解析的数据是最新的订阅收据,这个值表示最近更新订阅的日期。
除了receipt-Data信息外,返回内容还可能包含另外两个信息。如果用户的订阅服务被激活并更新。则latest_receipt信息会被以base-64方式编码并包含在返回内容中。解码后的新的收据信息也会在latest_expired_receipt_info包含。你的服务器可以使用新的收据来维护最新更新订阅的信息。