微信公众号被动回复功能处理业务笔记!

2021-03-04  本文已影响0人  DragonersLi
需求:
非工作时间人不在电脑旁,处理工作业务,需用手机登录后台,在手机上处理比较麻烦。有没有更好的方法处理在手机上处理?
想到了公众号,利用微信公众号被动回复的方式。去处理业务!

利用微信被动回复功能,先接收发送者微信OPENID,和发送的内容。判断OPENID是否有处理业务的权限,有的话再判断发送内容,利用正则匹配功能,找出关键词去处理业务。

/*
* 如果发送者有权限处理业务
* 匹配关键词,有注销,则取出手机号去处理注销业务
* 关键词有两个手机号,就把前面旧手机号改成后面新手机号
* 以上匹配失败,则处理被动回复
*/
 if(in_array($user_openid,config('system.wechat_customer'))){//客服处理修改手机号
    if(strpos($message['Content'],'注销') !== false) { //字符串有注销
        return $this->delUser($message['Content']);//注销账号
   }
       return $this->editMobile($message['Content']);//修改手机号
}else{
      return $this->text($message['Content']);//处理被动回复文本
 }
    /**
     * 注销手机号
     * "注销134xxxxxxxx"
     * @param string $str
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    private function delUser($str = ''){

            preg_match("/1[0-9]{10}?/", $str, $matches);
            $user = User::field('id,mobile,is_member vip')
                ->withSum(['withdraw'=>function($query,&$withdraw){//取现总额
                    $query->where("status != 30");
                    $withdraw = 'withdraw_money';
                }],'money')
                ->withSum(['share'=>'income_money'],'sum')//总佣金
                ->where(['mobile'=>$matches[0]])
                ->find();
            dlog('mobile_delete',"注销手机号:".$str);
            if(!empty($user)){//要注销的账号存在
                if($user->income_money || $user->withdraw_money || $user->vip>23){//有佣金和提现或是会员不能删除账号
                    return  $text = new Text((($user->vip > 23) ?'超级合伙人':'合伙人')."账号:{$user->id},手机号:{$user->mobile},有佣金{$user->income_money},提现{$user->withdraw_money}.不能注销!");exit;
                }
                $res = User::where(['mobile'=>$matches[0]])->delete();
                dlog('mobile_delete',"注销手机号:".User::getLastSql());
                    if($res){//注销成功
                        return  $text = new Text("{$matches[0]}账号注销成功!");exit;
                    }else{
                        return  $text = new Text("{$matches[0]}注销失败,请联系客服人工处理!");exit;
                    }
            }
            return  $text = new Text("{$matches[0]}手机号不存在!");exit;

    }
    /**
     * 客服修改手机号
     * "把188xxxxxxxx改成134xxxxxxxx";
     * @param string $str
     * @return Text
     */
    private function editMobile($str = ''){
        dlog('mobile_edit',$str);
        preg_match_all("/1[0-9]{10}?/", $str, $matches);
        if(!empty($matches[0][0]) && !empty($matches[0][1])){//匹配出两个手机号
            dlog('mobile_edit',$matches[0][0].'---'.$matches[0][1]);
            $id_old = User::where(['mobile'=>$matches[0][0]])->value('id');
            dlog('mobile_edit',"旧手机号:".User::getLastSql());
            if($id_old){//旧手机号存在
                $id_new = User::where(['mobile'=>$matches[0][1]])->value('id');
                if(!$id_new){//新手机号不存在
                    $id_new = User::where(['id'=>$id_old])->update(['mobile'=>$matches[0][1]]);
                    dlog('mobile_edit',"新手机号:".User::getLastSql());
                    return  $text = new Text("ID为{$id_old}的手机号由{$matches[0][0]}更改为{$matches[0][1]}成功");exit;
                }
                    return  $text = new Text("新手机号{$matches[0][1]}存在,请先注销");exit;
            }
                return  $text = new Text("旧手机号{$matches[0][0]}不存在,请确认");exit;

        }
            return  $text = new Text('手机号匹配失败,请确认输入格式是否正确');exit;

    }
上一篇 下一篇

猜你喜欢

热点阅读