小程序通知消息推送

最近公司在搞微信小程序:抽奖小程序,打卡小程序;自己作为项目的负责人随时跟踪进度,小程序的前端参与写了一点点2,3个简单的页面,后台系统的搭建和开发我来搞等,感觉微信小程序的前端页面等很想vue,标签和绑定等;小程序的前端编写下一篇文章再写,这篇文章主要介绍小程序的通知消息推送的实现;

大家可以去看小程序的官方文档:

https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86

我们先看效果:


 

这是在微信小程序里申请的相关配置


 申请结果:



 这是申请需要填写的参数



 

这是文档提供的消息模板 示例

 好了,那我们看一下如何实现:

第一步:配置参数,如APPID,接收用户openID,appsec,模板IDtemplateid(微信里申请),url(点击消息调到小程序那个页面),form_id(前端给每次都不一样,微信防止滥发消息默认用户点击才发)等;

第二步:获取getAccessToken;

第三步:请求微信消息发送接口;

很简单吧,加公众号后台申请模板ID我用了3小时,调通;代码没怎么整理,明天上班去整理一下

下面是代码;

<?php

class IndexAction {

    private $appid;

    private $appsec;

    private $templateid;

    private $url;

    function __construct(){

        

        $this->appid = 'wxcxxxxxxxxxxxxxxxxxxxxxxxxx;

        $this->appsec = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

        

        $this->templateid = 'xxxxxxxxxxxxxxxxxxxxxx'; //微信公众号后台申请

        $this->url = '/pages/award-detail/award-detail?id=31'; //跳转地址

    }

    public function index()

    {

        $access_token = S("token");  //微信说7200有效,加个缓存避免频繁请求

        if(!$token){

            $access_token = $this->getAccessToken();

            S("token",$access_token,7200);

        }

      

        $data=[

            'touser'=> 'ocsi84gKLeAQj_jgNfjXxQRJnUHYKL', //陈海波 openid

            'template_id'=> $this->templateid,

            'page'=> $this->url,

            'form_id'=> 'e235b9dfbd7b156ee16b5347e912e3f6j9k7',  //前端每次点击都不一样

            'topcolor'=>"#FF0000",

            'data'=>array(

                'keyword1'=>array('value'=>'键盘',"color"=>"#173177"),

                'keyword2'=>array('value'=>'上海xx抽检之键盘抽检开奖通知',"color"=>"#173177")

            )

        ];

        //http请求微信发送接口

        $result = $this->curl_post_send_information($access_token,json_encode($data));

        

        dump($result);die;

    }

    

    

    // 获取 access_token

    private function getAccessToken(){

        

        $appid = $this->appid;

        $appsec = $this->appsec;

        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsec}";

        //$raw = curl_get($url);

        $raw = $this->curl_get_https($url);

        if(strlen($raw)>0){

            $data = json_decode($raw,true);

            if(json_last_error()==JSON_ERROR_NONE){

                if(key_exists('access_token',$data)){

                    return $data['access_token'];

                }else{

                    return false;

                }

            }else{

                return false;

            }

        }else{

            return false;

        }

    }

    //curl  get会话

    private function curl_get_https($url){

        $curl = curl_init(); // 启动一个CURL会话

        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_HEADER, 0);

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在

        $tmpInfo = curl_exec($curl);     //返回api的json对象

        //关闭URL请求

        curl_close($curl);

        return $tmpInfo;    //返回json对象

    }

    

    private function curl_post_send_information( $token,$vars,$second=120,$aHeader=array())  

    {  

        $ch = curl_init();  

        //超时时间  

        curl_setopt($ch,CURLOPT_TIMEOUT,$second);  

        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);  

        //这里设置代理,如果有的话  

        curl_setopt($ch,CURLOPT_URL,'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$token);  

        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);  

        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

        if( count($aHeader) >= 1 ){  

            curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);  

        }

        curl_setopt($ch,CURLOPT_POST, 1);  

        curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);  

        $data = curl_exec($ch);  

        if($data){  

            curl_close($ch);  

            return $data;  

        }  

        else {  

            $error = curl_errno($ch);  

            curl_close($ch);  

            return $error;  

        }  

    }  

}

有一个比较啃爹的问题就是,只能发一个消息,多个用户需要在外面加个foreach,比较蛋疼,之前做过APP的极光推送就比较好(单发,群组发,全体通知发),大家可以去微信公众号API里看看,还是有很多有用的接口和文档的什么获取系统信息用户信息等

猜你喜欢

转载自chenhaibo0806999.iteye.com/blog/2421796