(1)收据校验解析

(2)做事器回调关照

(3)定时任务(每12h轮询)

ios与php干货iOS苹果内购办事端php订单处置 PHP

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 信息,遍历信息对每笔订单进行重新剖析