网站首页 > 基础教程 正文
1. 方法分三种
(1)收据校验解析
(2)服务器回调通知
(3)定时任务(每12h轮询)
2. 收据校验
(1)参数:receipt-data(凭证,必传)、uuid(设备标识,必传)、uid(用户id,选填)
(2)根据凭证信息+key,到apple 获取账单信息:
A. 正式环境:https://buy.itunes.apple.com/verifyReceipt
B. 沙盒环境:https://sandbox.itunes.apple.com/verifyReceipt
C. 请求方式:POST
D. 参数:password(共享秘钥)、receipt-data(凭证信息)
(3)解析票据进行,status=0,票据为正常信息($data)
【
21000:App Store无法读取你提供的JSON数据、
21002:收据数据不符合格式
21003:收据无法被验证
21004:你提供的共享秘钥和账户的共享秘钥不一致
21005:收据服务器当前不可用
21006:收据是有效的,但订阅服务器已经过期。当收到这个信息时,解码后的收据信息也包含在返回的内容中
21007:收据信息时测试用(sandbox),但却被发送到产品环境中验证
21008:收据信息时产品环境中使用,但却被发送到测试环境中验证
】
(4)获取latest_receipt_info 信息,遍历信息对每笔订单进行重新分析 ($item)
(5)解析数据:$data['environment'](环境)、$item['transaction_id'](订单id)
(6)If(isset($item[‘expires_date_ms’])) //判断是否存在过期时间来获取是消耗型还是订阅型
(7)订阅型:
If($item[‘original_transaction_id’]==$item[‘transaction_id’]) // 首次订单
$item[‘is_trial_period’] //false:非试用期 true:试用期
$pending_renewal_info=array_column($data['pending_renewal_info'], 'original_transaction_id');
//解析 pending_renewal_info
$key = $item['original_transaction_id'];
if ($pending_renewal_info[$key]['auto_renew_status'] == 0) //关闭订阅状态,修改当前最新订单的状态
if ($pending_renewal_info[$key]['auto_renew_status'] == 1) //开启订阅状态,修改当前最新订单的状态
存储信息:
(1)凭证信息存储:
表A:所有凭证(transation_id、original_transaction_id、receipt_data、createtime、uuid、uid、data、create_type、notify_type); create_type(创建类型):1凭证验证、2定时任务、3服务器回调;notify_type:服务器回调类型;data:(create_type=1或2:存储票据信息,create_type=3:存储回调的数据)
表B:当前最新凭证(transation_id、original_transaction_id、receipt、createtime、updatetime)
表C:订单信息(uid、uuid、transaction_id,product_id、original_transaction_id,quantity、purchase_date_ms、original_purchase_date_ms、expires_date_ms、cancellation_date_ms、is_trial_period、auto_renew_status、web_order_line_item_id、is_in_intro_offer_period、is_subscription、createtime、updatetime、subscription_fee_status);is_trial_period:是否为试用期0=否,1=是;auto_renew_status:自动更新订阅状态:0=已关闭订阅,1=继续续订;subscription_fee_status:扣费状态:0:免费试用1:扣费成功 2:退款 3:扣费失败;
注意:退款可能是对当前一笔订单申请了退款,也有可能是对过去发生的订单申请了退款,所以需要对所有订单进行查看,判断是否发生了变化,对未到期的退款订单需要改变到期时间
3. 定时任务
(1)过了试用期、开启了订阅状态、还未生成付费订单
(2)找出上期扣费成功,且到期前24h的所有单子
根据原始单号查询最新凭证,获取票据信息,进行解析
4.服务器回调通知
(1)$param = $this->request->param(); //获取服务器回调所有信息
(2)$param['notification_type'] //服务器回调类型
【
INITIAL_BUY:初次购买订阅
CANCEL:客户端取消订阅(根据目前返回值,该类型也代表已退款)
DID_CHANGE_RENEWAL_PREF:(指客户对其订购计划进行了更改,该更改在下一次续订时生效)
DID_CHANGE_RENEWAL_STATUS:(订阅续订状态发生了更改,如取消自动订阅)
DID_FAIL_TO_RENEW:(表示由于计费问题而无法续订的订阅)
DID_RECOVER:(表示成功的自动更新已过期的订阅,而订阅过去未能续订)
DID_RENEW:(表示客户的订阅已成功自动续订了一个新的交易时段)
】
(3)$param['unified_receipt']['latest_receipt_info'] 获取latest_receipt_info 信息,遍历信息对每笔订单进行重新分析
猜你喜欢
- 2025-01-12 8个必会的高效提取数字法,你知道几个?
- 2025-01-12 条件太太太太太多怎么求和?教你5招,轻松就搞定
- 2025-01-12 函数公式的左膀右臂:ROW、COLUMN函数知多少
- 2025-01-12 【excel】从现在开始掌握sortby函数,各类排序都不怕!
- 2025-01-12 Vlookup一次性查找多个值,4种方法,你更喜欢哪种?
- 2025-01-12 常用公式,效果挺好
- 2025-01-12 获取列号函数COLUMN的应用技巧
- 2025-01-12 INDEX函数怎么用?两种方法全在这儿
- 2025-01-12 快速查询,INDEX和MATCH函数必须会!
- 2025-01-12 EXCEL:别想得太复杂,动态的职工信息表,用INDEX函数就可搞定
- 01-128个必会的高效提取数字法,你知道几个?
- 01-12条件太太太太太多怎么求和?教你5招,轻松就搞定
- 01-12函数公式的左膀右臂:ROW、COLUMN函数知多少
- 01-12【excel】从现在开始掌握sortby函数,各类排序都不怕!
- 01-12Vlookup一次性查找多个值,4种方法,你更喜欢哪种?
- 01-12常用公式,效果挺好
- 01-12获取列号函数COLUMN的应用技巧
- 01-12INDEX函数怎么用?两种方法全在这儿
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)