这篇文章主要为大家介绍了PHP实现给用户发微信消息提醒功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
以前有一个项目项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示。针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口。
这里跳过网页授权和用户信息获取,请求接口的步骤,主要看获取access_token,发布客服消息,验证是否关注等等接口。
// 获取access_tokenpublic function getAccessToken($weid) {$appID = "wxfaddfdfdfd6cf6fc3569";// 服务号appID$appSecret = "071bebfdfdofdfd23687bf53d63a";// 服务号appSerect$url = "https://api.wei*xin*.*qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appSecret";$content = ihttp_get($url); // 自定义请求函数if(is_error($content)) {return error('-1', '获取微信公众号授权失败, 请稍后重试!错误详情: ' . $content['message']);}if (empty($content['content'])) {return error('-1', 'AccessToken获取失败,请检查appid和appsecret的值是否与微信公众平台一致!');}$token = @json_decode($content['content'], true);if ($token['errcode'] == '40164') {return error(-1, $this->errorCode($token['errcode'], $token['errmsg']));}if(empty($token) || !is_array($token) || empty($token['access_token']) || empty($token['expires_in'])) {$errorinfo = substr($content['meta'], strpos($content['meta'], '{'));$errorinfo = @json_decode($errorinfo, true);return error('-1', '获取微信公众号授权失败, 请稍后重试! 公众平台返回原始数据为: 错误代码-' . $errorinfo['errcode'] . ',错误信息-' . $errorinfo['errmsg']);}$record = array();$record['token'] = $token['access_token'];$record['expire'] = TIMESTAMP + $token['expires_in'] - 200;$cachekey = cache_system_key('accesstoken', array('acid' => $weid));cache_write($cachekey, $record);return $record['token'];}
// 判断当前用户是否关注公众号public public function isSubscribe($weid,$userid) {// 获取当前用户信息$userinfo = pdo_get('hcface_users',array('uid'=>$userid));//return $userinfo;if(empty($userinfo)) {return false;}// 获取access_token$accessToken = $this->getAccessToken($weid);// 是否关注接口$url = "https://api.w*e*ixin.q*q.com/cgi-bin/user/info?access_token=".$accessToken."&openid=".$userinfo['openid']."&lang=zh_CN";$res = ihttp_request($url);if(is_error($res)) {return false;}if($res['code'] != '200') {return false;}$result = @json_decode($res['content'],true);if($result['subscribe'] == 1) {$updateData = [];// 判断当前用户头像和昵称是否更换if($userinfo['avatar'] != $result['headimgurl']) {$updateData['avatar'] = $result['headimgurl'];}if($userinfo['nickname'] != $result['nickname']) {$updateData['avatar'] = $result['nickname'];}if(!empty($updateData)) {pdo_update('hcface_users',$updateData,array('uid'=>$userid));}}$userInfoData = ["subscribe" => $result['subscribe'],"user_openid" => $userinfo['openid'],"nickname" => $userinfo['nickname'],];return $userInfoData;}
public function solPushMsg($openid, $content, $wid) {// 获取access_token$accessToken = $this->getAccessToken($wid);$data = array('touser' => $openid,// 用户openID'msgtype' => 'text','text' => ['content' => $content, // 内容],);$url = 'https://api.we*ixin.**qq.com/cgi-bin/message/custom/send?access_token='.$accessToken; $res = ihttp_request($url,json_encode($data,JSON_UNESCAPED_UNICODE)); // json_encode第二个参数必须带上,不然发出的消息可能是unicode编码的if(is_error($res)) {return false;}if($res['code'] != '200') {return false;}return @json_decode($res['content'],true);}