iOS应用内支付(IAP)服务端端校验详解

IAP流程

IAP流程分为两种:

一种是直接使用Apple的服务器进行购买和验证,

另一种就是自己假设服务器进行验证。由于国内网络连接Apple服务器验证非常慢,而且也为了防止黑客伪造购买凭证,通用做法是自己架设服务器进行验证。

下面我们通过图来看看两种方式的差别:

使用Apple服务器


 

自己架设服务器


这里重要主要讲讲服务端这一块的校验过程因为涉及到校验合法性。
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 收据信息是产品环境中使用,但却被发送到测试环境中验证
原文地址:https://www.cnblogs.com/wangboy91/p/7162335.html