TP5后台微信小程序formId管理方法

应用场景:微信小程序开发中,如果要向用户发送模板消息,需要用到formId,而每个formId使用后即失效(支付产生的prepay_id只有一个,只能发送一条模板消息),因此对于需要给单个用户发送多条模板消息的场景,需要对formId进行收集、管理。本文只提供后台保存、获取及管理formId的示例,不涉及小程序收集。注意:本示例不保存formId的收集时间,因此无法据此删除过期for...
摘要由CSDN通过智能技术生成

 

应用场景:微信小程序开发中,如果要向用户发送模板消息,需要用到formId,而每个formId使用后即失效(支付产生的prepay_id只有一个,只能发送一条模板消息),因此对于需要给单个用户发送多条模板消息的场景,需要对formId进行收集、管理。

本文只提供后台保存、获取及管理formId的示例,不涉及小程序收集。

注意:本示例不保存formId的收集时间,因此无法据此删除过期formId,而是优先使用最新收集的formId,维护最新的formId集合,当连续7天之内收集不到用户的formId,就无法向用户发送模板消息。

示例代码如下,请根据你的实际做相应调整:


    /**
     * 保存一个新收集的formId,以text数据类型保存在数据库中,以逗号分隔
     * @$user_id string 用户id
     * @$formId string 新增的formId
     * @return mixed
     */
    public function addFormId($user_id, $formId)
    {

        # 查询原有的 formId
        $oriFormId = self::get(['user_id' => $user_id])['form_id']; 
        # 原来有就在后边加上,原来没有就只有新收集的formId
        $oriFormId = ($oriFormId) ? explode(',', $oriFormId . ',' . $formId) : [$formId];

        #--检查方法,仅保留最新指定数量的formId:
        $oriFormId = $this->checkNewFormId($oriFormId);

        # 将检查处理方法返回的数组转换成字符串,并保存
        $newFormid = implode(',', $oriFormId[0]);
        self::update(['form_id' => $newFormid], ['user_id' => $user_id], true);

    }

    /**
     * 获取一个formId用于发送模板消息
     * @$user_id string 用户id
     * @return string
     */
    public function getFormId($user_id)
    {

        # 原来的 formId
        $oriFormId = self::get(['user_id' => $user_id])['form_id'];
        # 用户无formId的处理,根据实际需求来定
        if (empty($oriFormId)) return ['msg' => '该用户无formId'];
        $oriFormId = explode(',', $oriFormId);

        #--删除最新的一个formId
        $res = array_pop($oriFormId);
        #--检查方法,仅保留最新指定数量的formId:
        $oriFormId = $this->checkNewFormId($oriFormId);

        # 更新formId集合
        $newFormid = implode(',', $oriFormId[0]);
        self::update(['form_id' => $newFormid], ['user_id' => $user_id], true);

        #--返回最新的一个formId及当前用户formId的数量:
        return [$res,$oriFormId[1]];

    }

    /**
     * 仅保留最新的指定数量的 formId
     * @$oriFormId array 原来的 formId
     * @return array
     */
    public function checkNewFormId($oriFormId)
    {

        #--指定保留formId的数量:
        $num = 60;

        # formId数量:
        $count = count($oriFormId);
        if ($count > $num) {
            foreach ($oriFormId as $k => $i) {
                if ($k < ($count - $num)) {
                    # 大于指定保留数量时,会删除较旧的formId,保留较新的(本例是60个)。
                    unset($oriFormId[$k]);
                } else {
                    break;  #--指定数量以内的保留,直接退出循环
                }
            }
        }

        #--返回最新的formId集合及其数量:
        return [$oriFormId, ($count > $num) ? $num : $count];

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值