IAP流程
IAP流程分为两种:
一种是直接使用Apple的服务器进行购买和验证,
另一种就是自己假设服务器进行验证。由于国内网络连接Apple服务器验证非常慢,而且也为了防止黑客伪造购买凭证,通用做法是自己架设服务器进行验证。
下面我们通过图来看看两种方式的差别:
使用Apple服务器
![](http://upload-images.jianshu.io/upload_images/277755-4663ea575d694cff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
自己架设服务器
![](http://upload-images.jianshu.io/upload_images/277755-43961b62c506f3c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里重要主要讲讲服务端这一块的校验过程因为涉及到校验合法性。
1、首先拿到客户端的支付receiptData和transaction信息
2、服务端通过receiptData通过向苹果服务器post数据发起校验
3、服务端端对苹果服务器响应数据做处理和校验订单的合法性。
3、如果订单合法则对订单做出相应处理。
附录:
苹果服务器响应体数据
{
"status": 0,
"environment": "Sandbox",
"receipt": {
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "应用标识",
"application_version": "版本号",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "2017-07-13 08:33:57 Etc/GMT",
"receipt_creation_date_ms": "1499934837000",
"receipt_creation_date_pst": "2017-07-13 01:33:57 America/Los_Angeles",
"request_date": "2017-07-13 08:34:02 Etc/GMT",
"request_date_ms": "1499934842771",
"request_date_pst": "2017-07-13 01:34:02 America/Los_Angeles",
"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",
"original_application_version": "1.0",
"in_app": [
{
"quantity": "1",
"product_id": "",
"transaction_id": "",
"original_transaction_id": "",
"purchase_date": "2017-05-20 04:22:32 Etc/GMT",
"purchase_date_ms": "1495254152000",
"purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
"original_purchase_date": "2017-05-20 04:22:32 Etc/GMT",
"original_purchase_date_ms": "1495254152000",
"original_purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
"is_trial_period": "false"
},
{
"quantity": "1",
"product_id": "",
"transaction_id": "",
"original_transaction_id": "",
"purchase_date": "2017-05-20 04:28:32 Etc/GMT",
"purchase_date_ms": "1495254512000",
"purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
"original_purchase_date": "2017-05-20 04:28:32 Etc/GMT",
"original_purchase_date_ms": "1495254512000",
"original_purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
"is_trial_period": "false"
}
]
}
}
状态说明
状态码 描述
21000 App Store无法读取你提供的JSON数据
21002 收据数据不符合格式
21003 收据无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 收据服务器当前不可用
21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证
21008 收据信息是产品环境中使用,但却被发送到测试环境中验证
21000 App Store无法读取你提供的JSON数据
21002 收据数据不符合格式
21003 收据无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 收据服务器当前不可用
21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证
21008 收据信息是产品环境中使用,但却被发送到测试环境中验证