微信公众号被动回复功能处理业务笔记!
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;
}