微信模版消息封装接口

微信模版消息封装接口

本文主要就微信模板消息写了个通用接口,参数参考微信文档。

  1. 使用模版消息,首先需在微信公众号设好微信模版,如(微信测试号模版消息设置):
    enter description here
    模版消息:
    您的订单已签收! 上门取货时间:{{FIRST.DATA}} 货物名称:{{KEYWORD1.DATA}} 物流公司:{{KEYWORD2.DATA}}
    “{{keywords.DATA}}”时我们接下来要传的数据参数,可以看到每个模版有自己的模版id;

  2. 发送模版消息接口(微信)
    enter description here
    enter description here
    调用接口:https://api.weixin.qq.com/cgi-bin/template/send?access_token=ACCESS_TOKEN
    注意下post参数就是个json格式数据,需要对应你的模板消息数据,上面的列子对应的post参数为:

/*
*data 是 模板数据
*color 否 模板内容字体颜色,不填默认为黑色
*/
  {
           "touser":"OPENID",  //指定用户openid
           "template_id":"UFHH7QQjA2MO7_wIfMNhobF5WPaPl_O8LuZS0LWNY7U",
           "url":"",  
           "miniprogram":"",          
           "data":{
                   "FIRST": {
                       "value":"2019年9月22日 15:30",
                       "color":"#173177"
                   },
                   "KEYWORD1":{
                       "value":"安踏运动鞋",
                       "color":"#173177"
                   },
                   "KEYWORD2": {
                       "value":"韵达物流",
                       "color":"#173177"
                   }                
           }
       }
  1. 封装接口(php)
    为了避免post数据的不可控性(不同模版的参数属性不一致),依据模版的数据结构,做了一套通用的接口。在这之前需要获取微信access_token的方法,提供个参考类文件:
    JSSDK.php

    //获取access_token信息
     public function jssdk_param(){
        $jssdk = new JSSDK();
        $signPackage = $jssdk->getSignPackage();

        $data = array();
        $token = md5(microtime(true));
        $_SESSION['signtoken'] = $token;
        $data['token'] = $token;
        $data['signPackage'] = $signPackage;
        $data['access_token']=$jssdk->getAccessToken();
        return $data;
    }
    
    #发送模版消息
    public function actionSendModelMsg(){
        $param = array();
        $param['touser'] = $_POST['touser'];
        $param['template_id'] = $_POST['template_id'];
        $param['url'] = $_POST['url']; 
        $param['miniprogram'] = $_POST['miniprogram']; 
        $data =$_POST['data']; 
        if( ! $param['touser'] ) $this->error("touser不能为空");
        if( ! $param['template_id'] ) $this->error("请提供合法的模版id");
        if( !$data ) $this->error('请提供模版数据');
        $param['data'] = json_decode($data,1);

        $d = $this->jssdk_param();
        $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$d['access_token']}";
        $res = $this->https_request($url,json_encode($param),'json');
        echo json_encode($res);
    }
    
       //发送请求
     function https_request($url,$data,$type){
            if($type=='json'){
                 $headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
            }
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);                                
                curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );
            $output = curl_exec($curl);
            curl_close($curl); print_r($output);die;
            return $output;
     }
     
        
    #返回错误信息
     public  function error($msg){
        header("Content-type: application/json");
        $o['code'] = '1';
        $o['errorMsg'] = $msg;
        echo json_encode($o);
        die;
    }

这样来发送模版主要变更的就是data参数了,配置好参数,业务处理完http方式调下接口就可以了。

posted @ 2017-08-23 17:05  walkingSun  阅读(1613)  评论(0编辑  收藏  举报
**/