IOS内购自动续订
1、状态码 官方地址
21000 失败
21002 一般是凭证问题,base64一下再由后端校验试试
21007 测试环境的收据请求到了正式环境
21003 收据无法验证,解决方案:将共享密钥也传给苹果去验证
21004 你提供的共享密钥和账户的共享密钥不一致 password参数
21005 收据服务器当前不可用,再试一次
21006 此收据有效,但订阅已过期。当此状态代码返回到您的服务器时,接收数据也会被解码并作为响应的一部分返回。仅针对自动续订订阅的 iOS 6样式交易收
21008 这个收据是来自生产坏境,但是被送到了测试环境进行验证
21009 内部数据访问错误,稍后再试
21010 用户帐户无法找到或已被删除
状态代码21100-21199是名种内部数据访问错误。
2、凭证说明 官方地址
沙盒续期时间是缩短了的,并且会在5次续订(一共6条收据)后自动取消
实际时间 | 测试时间 |
---|---|
1周 | 3分钟 |
1个月 | 5分钟 |
2个月 | 10分钟 |
3个月 | 15分钟 |
6个月 | 30分钟 |
1年 | 1小时 |
{
"environment": "Production", //请求环境
"receipt": {
"receipt_type": "Production",
"adam_id": xxx,
"app_item_id": xxx,
"bundle_id": "com.xxx",
"application_version": "2",
"download_id": xxx,
"version_external_identifier": xxx,
"receipt_creation_date": "2022-10-24 07:14:36 Etc/GMT",
"receipt_creation_date_ms": "1666595676000",
"receipt_creation_date_pst": "2022-10-24 00:14:36 America/Los_Angeles",
"request_date": "2023-02-24 03:29:47 Etc/GMT",
"request_date_ms": "1677209387760",
"request_date_pst": "2023-02-23 19:29:47 America/Los_Angeles",
"original_purchase_date": "2022-07-04 03:24:29 Etc/GMT",
"original_purchase_date_ms": "1656905069000",
"original_purchase_date_pst": "2022-07-03 20:24:29 America/Los_Angeles",
"original_application_version": "2",
"in_app": [ //所有订单都可能存在,主要是非订阅订单
{
"quantity": "1",
"product_id": "xxxx",
"transaction_id": "xxxx",
"original_transaction_id": "xxx",
"purchase_date": "2022-07-04 03:25:29 Etc/GMT",
"purchase_date_ms": "1656905129000",
"purchase_date_pst": "2022-07-03 20:25:29 America/Los_Angeles",
"original_purchase_date": "2022-07-04 03:25:30 Etc/GMT",
"original_purchase_date_ms": "1656905130000",
"original_purchase_date_pst": "2022-07-03 20:25:30 America/Los_Angeles",
"expires_date": "2022-07-11 03:25:29 Etc/GMT",
"expires_date_ms": "1657509929000",
"expires_date_pst": "2022-07-10 20:25:29 America/Los_Angeles",
"web_order_line_item_id": "xxx",
"is_trial_period": "false",
"is_in_intro_offer_period": "false",
"in_app_ownership_type": "PURCHASED"
}
]
},
"latest_receipt_info": [ //订单订阅集合,从上往下订单时间倒序,第一个为最新的支付订单
{
"quantity": "1",
"product_id": "xxx", //订单产品id,apple后台支付配置的参数
"transaction_id": "xxx", //apple当前订单号
"original_transaction_id": "xxx", //apple原始订单号,该用户在该产品第一笔支付订单,可当做同一批订单朔源
"purchase_date": "2022-11-25 08:19:27 Etc/GMT", //订单时间
"purchase_date_ms": "1669364367000",
"purchase_date_pst": "2022-11-25 00:19:27 America/Los_Angeles",
"original_purchase_date": "2022-07-04 03:25:30 Etc/GMT", //最初购买时间
"original_purchase_date_ms": "1656905130000",
"original_purchase_date_pst": "2022-07-03 20:25:30 America/Los_Angeles",
"expires_date": "2023-11-25 08:19:27 Etc/GMT", //订阅过期时间
"expires_date_ms": "1700900367000",
"expires_date_pst": "2023-11-25 00:19:27 America/Los_Angeles",
"web_order_line_item_id": "xxx",
"is_trial_period": "false", //是否是试用订单
"is_in_intro_offer_period": "false",
"in_app_ownership_type": "PURCHASED",
"subscription_group_identifier": "xxx"
}
],
"latest_receipt": "------------加密串------------",
"pending_renewal_info": [
{
"auto_renew_product_id": "xxx",
"product_id": "xxx",
"original_transaction_id": "xxx",
"auto_renew_status": "0"
}
],
"status": 0 //状态成功
}
3、接入回调 官方地址
回调通知配置:苹果后台可配置生产环境和沙箱环境的APPLE回调通知地址
提示:接入apple支付回调apple提供了v1和v2两种类型,v2需要多一步加解密的操作
关于退款:
通过苹果官方文档得知:
- v1版,通知类型没有REFUND,确认是否退款首先通知类型是 CANCEL,其次该笔收据字段 cancellation_date_ms 存在,即用户已退款
- v2版,通知类型为REFUND,即为退款
功能说明:该通知主要是订单状态的变更等,包括续订,付费通知,取消订阅,退款等通知,可进行订单处理
类型 | 说明 |
---|---|
INITIAL_BUY | 首次购买 |
REFUND | 退款 |
CANCEL | 取消订阅 |
DID_RENEW | 自动续订 |
INTERACTIVE_RENEWAL | 应用界面或appstore手动续订 |
DID_RECOVER | 恢复订阅 |
{
"notification_type":"DID_RENEW", //通知类型,该类型为续订通知
"auto_renew_product_id":"xxx",
"password":"xxx", //共享密钥,可以验证是否真实通知
"environment":"Sandbox",
"original_transaction_id":xxx,
"unified_receipt":{
"status":0,
"environment":"Sandbox",
"latest_receipt_info":[ //第一笔为最新的通知订单
{
"quantity":"1",
"product_id":"xxx",
"transaction_id":"xxx", //当前订单号
"purchase_date":"2022-06-08 09:51:55 Etc/GMT",
"purchase_date_ms":"1654681915000",
"purchase_date_pst":"2022-06-08 02:51:55 America/Los_Angeles",
"original_purchase_date":"2022-06-08 04:36:20 Etc/GMT",
"original_purchase_date_ms":"1654662980000",
"original_purchase_date_pst":"2022-06-07 21:36:20 America/Los_Angeles",
"expires_date":"2022-06-08 09:54:55 Etc/GMT",
"expires_date_ms":"1654682095000",
"expires_date_pst":"2022-06-08 02:54:55 America/Los_Angeles",
"web_order_line_item_id":"xxx",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"original_transaction_id":"xxx", //原始订单号,该产品首次的订单号
"in_app_ownership_type":"PURCHASED",
"subscription_group_identifier":"xxx"
},
{
"quantity":"1",
"product_id":"xxx",
"transaction_id":"xxx",
"purchase_date":"2022-06-08 09:48:03 Etc/GMT",
"purchase_date_ms":"xxx",
"purchase_date_pst":"2022-06-08 02:48:03 America/Los_Angeles",
"original_purchase_date":"2022-06-08 04:36:20 Etc/GMT",
"original_purchase_date_ms":"1654662980000",
"original_purchase_date_pst":"2022-06-07 21:36:20 America/Los_Angeles",
"expires_date":"2022-06-08 09:51:03 Etc/GMT",
"expires_date_ms":"1654681863000",
"expires_date_pst":"2022-06-08 02:51:03 America/Los_Angeles",
"web_order_line_item_id":"xxx",
"is_trial_period":"false",
"is_in_intro_offer_period":"false",
"original_transaction_id":"xxx",
"in_app_ownership_type":"PURCHASED",
"subscription_group_identifier":"xxx"
}
],
"pending_renewal_info":[
{
"auto_renew_status":"1",
"auto_renew_product_id":"xxx",
"product_id":"xxx",
"original_transaction_id":"xxx"
}
]
},
"bvrs":"xxx",
"bid":"com.xxx",
"auto_renew_status":"true"
}
4、一些说明
- latest_receipt_info集合订单按时间倒序排序,所以第一笔为最新的订单
- ios收据为账户维度,即收据和通知获取的数据为该账户的历史订单集合,非当前支付
- 同一个产品包括同产品组,在同一个账户支付会生成一个原始订单号,可根据该订单号溯源
- 订单校验只适用于恢复订阅和收据校验,具体支付处理按通知为主
5、特别注意
- 凭证的3个关键字 in_app、last_receipt_info、last_receipt(最新的加密收据)
- 自动续订订阅类型,在到期后会再生成一条购买记录,这条记录会出现在last_receipt_info里,但不会出现在in_app里
- 自动续订订阅类型可以配置试用,试用记录只有在latest_receipt_info里,is_trial_period字段才是true
- 消耗型购买记录有可能不会出现在latest_receipt_info,因此需要检查in_app来确保校验正确
原文链接---https://www.cnblogs.com/program01/p/17296052.html
版权声明:
作者:admin
链接:http://blog.mryxh.cn/3799.html
文章版权归作者所有,未经允许请勿转载。
THE END