小程序发送公众号模版信息 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

小程序发送公众号模版信息

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:21

小程序的发送模版信息功能,经过修改,只能发送订阅信息,如需向公众号一样发送模版信息,需满足以下条件

一、微信开放平台花300元开通认证,认证通过后、去管理中心、小程序、绑定小程序(小程序登入账号就是微信公众号的账号and密码)

二、在公众号中绑定对应的小程序

三、在公众号中基本配置-服务器配置(启用-注意,启用此配置后,公众号自定义菜单会失效,需要自己开发对应的功能)

配置如下图

四、在服务器中上图地址创建url接口getGzhConfig方法,及相关代码

 //公众号服务器配置url
    public function getGzhConfig(){
        $timestamp = input('get.timestamp');
        $nonce = input('get.nonce');
        $token = 'cmxx';//自定义,对应令牌token名
        $signature = input('get.signature');
        $array = array($timestamp, $nonce, $token);
        sort($array);
        $stmstr = implode('', $array);
        $stmstr = sha1($stmstr);
        $echostr = input('get.echostr');
        if($stmstr == $signature && $echostr){
            echo $echostr;
            exit;
        } else {
            $this->responseMsg();
        }
    }

     //发送响应消息(暂只做关注处理,保存关注用户的信息,openid unionid,nickname等)
    public function responseMsg()
    {
        $postArr = file_get_contents("php://input");
        $postObj = simplexml_load_string($postArr);
        $type = strtolower($postObj->MsgType);

        //关注和向公众号发送消息是两个不同的事件
        //因此可以通过获取到的事件类型来决定回复什么内容
        switch ($type) {
            //关注事件回复内容
            case 'event':
                if (strtolower($postObj->Event) == 'subscribe') {
                    $this->getUserInfo($postObj->FromUserName);
                }
                break;
            default:
                break;
        }
    }

    //用户关注时,通过openId获取用户信息
    public function getUserInfo($openid){
        $token = $this->getWxAccessToken();
        $url  = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token."&openid=".$openid."&lang=zh_CN";
        $res = $this->curl($url);
        $userGzh = UserGzhModel::where('openid',$openid)->find();
        if(empty($userGzh)){
            UserGzhModel::create($res);
        }else{
            UserGzhModel::where('openid',$openid)->update($res);
        }

        //发送模版信息-关注公众号
        $template_id = "IXAHnaj1ZyOlWAoQu9CqMkfVQIzS0suHbfojhNiIDFQ";
        $strFirstVal = '您好,您已通xxxxx';
        $keyword1Val = $res['nickname'];
        $keyword2Val = getTimeData6(date("Y-m-d H:i:s"));
        $keyword3Val = 'aaa盒';
        $remark = '新人立赠6元优惠,赶紧开启您的点餐之旅吧!充值多多,优惠多多!';
        //参数说明:$openid = 用户openid   $template_id=模版id   $model=自定义类型     $strFirstVal=模版参数.....
        $this->sendMsg2AttGZH($res['openid'],$template_id,$strFirstVal,$keyword1Val,$keyword2Val,$keyword3Val,$remark);
    }
    
    //此方法只需提前运行一次,所有关注公众号的用户信息
    //获取所有关注公众号的用户信息,保存在数据库中,只用做一次,把旧的数据保存即可,新的用户关注时自动保存
    public function getGzhUser(){
        $token = $this->getWxAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$token;
        $res = $this->curl($url);
        foreach($res['data']['openid'] as $k=>$vo) {
//            p($vo);die;
            $this->getUserInfo($vo);
        }
    }

    /**
     * 获取公众号access_token
     */
    public function getWxAccessToken(){
        $appId = constant("APPIDGZH");
        $appSecret = constant("SECRETGZH");
        $access_token = Cache::get('wx_access_token:'.$appId);
        if($access_token){
            return $access_token;
        }else{
            //1.请求url地址
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
            $res = $this->curl($url);
            if(isset($res['errcode']) && $res['errcode']!=0){
                return ('获取access_token出错');
            }
            $access_token = $res['access_token'];

            Cache::set('wx_access_token:'.$appId,$access_token,5400);
            return $access_token;
        }
    }

  public function curl($url,$data = null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
        // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }

        $res = curl_exec($curl);
        curl_close($curl);
        $json_obj = json_decode($res,true);
        return $json_obj;
    }

通过以上的方法,就能把关注过公众号的openid保存在数据库中,当用户触发小程任务,需要发送模版信息时,就先通过小程序用户信息,从数据库中查询到该用户的公众号openid,然后通过此openid发送模版信息即可,怎么发送模版信息,在这里就不在描叙。

多年程序开发,2年开发微信小程序经验,已有数个稳定上线运营项目,PHP后台+小程序 全栈开发

兼职接单,欢迎咨询 微信号:x1880161

相关案例查看更多