• PHP公众号开发给用户发微信消息提醒功能


      最近做的一个项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示。针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口,微信文档地址: https://mp.weixin.qq.com/wiki。

        这里跳过网页授权和用户信息获取,请求接口的步骤,主要看获取access_token,发布客服消息,验证是否关注公众号等接口。

    1. 获取access_token。

    // 获取access_token
    public function getAccessToken($weid) {
            $appID = "wxfaddfdfdfd6cf6fc3569";                                      // 服务号appID
            $appSecret = "071bebfdfdofdfd23687bf53d63a";                            // 服务号appSerect
    
            $url = "https://api.weixin.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'];
        }

    2. 判断是否关注公众号。

    // 判断当前用户是否关注公众号
    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.weixin.qq.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;
        }

    3. 发送客服消息。

    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.weixin.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);
        }

    4. 微信接口返回的是一个数组。

    5. 实现效果。

    公众号

  • 相关阅读:
    江西财经大学第一届程序设计竞赛 F题 -解方程
    HDU2553 N皇后问题
    2018年长沙理工大学第十三届程序设计竞赛 G 题:逃离迷宫
    Codeforces #475 div2
    埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 L题 K序列
    埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 I题 二数
    埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F题 1+2=3 ?
    埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 Wasserstein Distance
    hdu 5685
    hdu 5512 Pagodas
  • 原文地址:https://www.cnblogs.com/zerofc/p/11121619.html
Copyright © 2020-2023  润新知