请教下ios 内购自动订阅的技术细节

公司要实现一个vip会员功能,需要有自动订阅。
从网上搜集的资料,自动续费有三种模式。
1.通过客户端
2.苹果推送
3.循环历史票据信息
现在实现的代码如下,
就是想问其中是否存在bug

        $receipts = $data['latest_receipt_info']; // 自动续订订阅项时才会有
        if (!isset($data['latest_receipt_info'])) {
            $receipts = $data['receipt']['in_app']; // 消费类型
        }
        if (empty($receipts)) {
            return api_400('in_app信息为空');
        }
        //根据自身需求返回数据
        $returnData = [];
        //多物品信息
        foreach ($receipts as $product) {
            //订单重复验证
            $orderCheck = PaymentOrderModel::where(['otn' => $product['transaction_id']])
                ->find();
            if ($orderCheck) {
                continue;
            }
            //产品验证
            $productCheck = ProductModel::where(['os_type' => 1, 'ename' => $product['product_id']])
                ->find();
            if (!$productCheck) {
                return api_400('没有找到对应产品的金额,ID:' . $product['product_id']);
            }
            // 启动事务
            Db::startTrans();
            try {
                //创建订单
                //业务处理
                Db::commit();
                // 提交事务
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                return api_400($e->getMessage());
            }

        }
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

我们用的是两种方式:

  1. 通过客户端请求接口
  2. 苹果后台配置回调接口,苹果主动推送

没有看到你提及original_transaction_id,如果没有登录状态,比如苹果主动推送的场景,需要通过原始订单号去查用户信息,付费信息(到期时间计算等)。

$transactionId    = data_get($data, 'transaction_id');
$oriTransactionId = data_get($data, 'original_transaction_id');

暂时没用轮询票据的,对于自动订阅的,只要测试联调成功了,不太可能存在苹果不推送的情况。另外回调接口接入日志,真要是出现掉单,也方便排查。当然还可以通过用户提供的扣款截图,通过对应的API排查https://api.storekit.itunes.apple.com/inApps/v1/lookup/{$this->tradeNo}

Laravel

2年前 评论

对于自动订阅取latest_receipt_info这个数据,然后按时间最大倒序,取第一条,然后把订单列表有效期这个字段写到数据库就可以了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!