Python 版本是 3.5.2 ,后端架构是 Django == 1.11.1 和 MySQL 。
非自动订阅式购买
首先理流程
- iOS 端发起支付请求
- 支付成功后,携校验所需数据向服务端发起校验请求
- 服务端将参数进行包装,向 AppStore 发起校验请求
- AppStore 返回响应,包含着用户在 App 中所有交易的收据
- 服务端解析响应,用 iOS 传来的数据与 AppStore 返回的数据进行比对,数据一致即为校验成功
- 校验完成后,服务端走业务逻辑,给 iOS 端返回响应
校验所需的参数
- receiptData:base64 编码的收据信息 - 请求 AppStore 的主数据
- transactionId:交易单号 - 与 AppStore 返回的数据进行比对的键
- productId:购买的产品标识 - 与 AppStore 返回的数据进行比对的值
请求 AppStore
- 服务端准备参数
{'receipt-data': receiptData, 'password': 'xxxxxxxxxxxx'}
,password 为非自动订阅式购买必传 - post 请求至 https://buy.itunes.apple.com/verifyReceipt/ (沙盒环境:https://sandbox.itunes.apple.com/verifyReceipt/)
解析响应
响应示例:
{
'receipt':
{
'receipt_creation_date_ms': '1562909318000',
'adam_id': 0,
'receipt_creation_date': '2019-07-12 05:28:38 Etc/GMT',
'version_external_identifier': 0,
'original_purchase_date_pst': '2013-08-01 00:00:00 America/Los_Angeles',
'original_purchase_date_ms': '1375340400000',
'bundle_id': 'xxxxxxx',
'receipt_creation_date_pst': '2019-07-11 22:28:38 America/Los_Angeles',
'request_datea_ms': '1562909325495',
'app_item_id': 0,
'original_purchase_date': '2013-08-01 07:00:00 Etc/GMT',
'request_date_pst': '2019-07-11 22:28:45 America/Los_Angeles',
'original_application_version': '1.0',
'application_version': '1',
'receipt_type': 'ProductionSandbox',
'download_id': 0,
'request_date': '2019-07-12 05:28:45 Etc/GMT',
'in_app': [
{
'is_trial_period': 'false',
'original_purchase_date_ms': '1562908866000',
'quantity': '1',
'purchase