zoukankan      html  css  js  c++  java
  • 微信公众号-模板消息通用接口封装

    微信公众号-模板消息通用接口封装

    近期做了微信公众号的消息通知,微信方面模板越来越规范化,跟测试的平台相差甚远(fuck,谁让人家要办硬)。

    话不多说,进入代码

    class OfficialSystem
    {
        public $tmplateConf;
        private $accessToken;       //微信accessToken
    
        public function __construct( $tmplateConf ,$accessToken ){
            $this->tmplateConf = $tmplateConf;
            $this->accessToken = $accessToken;
        }
    
        /**
        * 返回结果
        * @param $error bool 1 代表错误,0 无错误
        * @parame $msg string   返回信息
        * @param $data Array    返回内容
        * @param $isJson bool  1 返回json, 0 否
        **/
        public function returnResult( $error,$msg ,$data=[],$isJson=0 ){
            $result = [
                'error' => $error,
                'msg' => $msg,
                'data' => $data,
            ];
            if( $isJson ){
                echo json_encode($result);
                exit();
            }
            return $result;
        }
    
        /**
        * 发送消息
        * @param $modelId sting  微信模板id
        * @param $touser string  微信openid(公众号)
        * @param $url string    跳转地址
        * @param $miniPagepath string 小程序跳转路径
        * @param $miniAppid  string   小程序Appid
        * @param $list  Array   模板数据,如:[ ['value'=>'您好,您有新的订单','color'=>'blue',...] ]
        **/
        public function Sendmsg( $modelId,$touser,$url,$miniPagepath,$miniAppid,$list=[] ){
            if( empty($modelId) || empty($touser) || empty($list)  ) $this->returnResult(1,'参数缺失');
    
            $template_id =  !empty( $this->tmplateConf[$modelId] ) ? $this->tmplateConf[$modelId]:$this->returnResult(1,'模板错误');
    
            //模板消息内容  数组第一个作为标题,最后一个作为备注
            $data = [];
            foreach ($list as $k=>$v){
                $key = $k==0 ? 'first':"keyword".$k;
    
                if( !isset( $list[$k+1] ) ) $key = 'remark';
    
                $data[$key] = [
                    'value' =>  $v['value'],
                    'color' =>  !empty($v['color'])? $v['color']:'#173177',
                ];
            }
    
            $sends = $this->sendModelMsg($touser,$template_id,$url,$miniAppid,$miniPagepath,$data);
    
            $this->returnResult(0,'success',$sends);
        }
    
        /**
         * @param $touser   用户openid
         * @param $template_id
         * @param $url
         * @param $miniAppid
         * @param $miniPagepath     小程序跳转地址
         * @param $data     模板数据
         */
        public function sendModelMsg( $touser,$template_id,$url='',$miniAppid='',$miniPagepath='',$data ){
    
            $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$this->accessToken;
    
            $params = [
                'touser'            =>          $touser,
                'template_id'       =>          $template_id,
                'url'               =>          $url,
                'miniprogram'       =>          [ 'appid'=>$miniAppid,'path'=>$miniPagepath ]   ,
                'data'              =>          $data,
            ];
    
            $sends = $this->httpPost($interfaceUrl,json_encode($params));
            $sends = json_decode($sends,1);
    
            if( $sends&&$sends['errmsg']!='ok' ){
                 $this->returnResult(1,'消息发送失败',$sends);
            }
    
            return $sends;
        }
    
        /**
         * 获取用户信息
         * @param $openid  openid
         * @return mixed
         */
        public function getUserInfo( $openid='' ){
    
            $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$this->accessToken.'&openid='.$openid;
            $info = $this->httpGet( $interfaceUrl );
            $result = json_decode($info,1);
    
            return $result;
        }
    
        /**
         * @param $touser
         * @param $msgtype
         * @param $msgContent
         */
        public function sendCustomMsg( $touser,$msgtype,$msgContent){
    //        $params = [];
    //        $params['touser'] = $touser;
    //        $params['msgtype'] = $msgtype;
    //        $params["$msgtype"] = $msgContent;
    //        $params = json_encode($params);
            $params = '{"touser":"'.$touser.'","msgtype":"'.$msgtype.'","text":{'.$msgContent.'}}';
    
            $interfaceUrl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$this->accessToken;
            $sends = $this->httpPost($interfaceUrl,$params);//var_dump($params,json_encode($params),$sends);die;
            $sends = json_decode($sends,1);
            return $sends;
        }
    
        private function httpGet($url) {
            $curl = curl_init();
    
            curl_setopt_array($curl, array(
                CURLOPT_URL => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => array(
                    "cache-control: no-cache",
                    "content-type: application/x-www-form-urlencoded",
                ),
            ));
    
            $response = curl_exec($curl);
            $err = curl_error($curl);
    
            curl_close($curl);
    
            if ($err) {
                echo "cURL Error #:" . $err;die;
            } else {
                return $response;
            }
        }
    
        private function httpPost($url,$param){
            $curl = curl_init();
    
            curl_setopt_array($curl, array(
                CURLOPT_URL => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => $param,
                CURLOPT_HTTPHEADER => array(
                    "cache-control: no-cache",
                    "content-type: application/json",
                    'Content-Length:' . strlen($param)
                ),
            ));
    
            $response = curl_exec($curl);
            $err = curl_error($curl);
    
            curl_close($curl);
    
            if ($err) {
                return "cURL Error #:" . $err;
            } else {
                return $response;
            }
    
    }
    

    调用事例:

    $tmplateConf = [
         '1'      =>  'mnscOp2RHpQtDCt7OpZBLoDTU2fjJ_W75_Mat4rnfxM',         //订货通知模板
         '2'      =>  'DL4EAD47KT1tggbL2OR8iRAYLORI64V4YEM8mjQfSWU',         //入库通知模板
    ];
    $accessToken = 'o9BuWjkDBvLGV_nch9wPU_-KRp7M';
    $OfficialSystem = new OfficialSystem($tmplateConf,$accessToken);
    
    //消息内容
    $list = [
            ['value'=>'您好,您有新的订单','color'=>'blue'],
            ['value'=>'P201809010001','color'=>''],
            ['value'=>'服务中心店','color'=>''],
            ['value'=>'2018-06-01 10:30:30','color'=>''],
            ['value'=>'点击进入详情','color'=>''],
        ];
    $modelId = 1;
    $touser = 'o9BuWjkDBvLGV_nch9wPU_-KRp7M';
    $url = 'http://www.cnblogs.com/followyou';
    $sends = Sendmsg( $modelId,$touser,$url,$miniPagepath='',$miniAppid='',$list);
    var_dump($sends);
    

    成功返回:

            "errcode": "0",
            "errmsg": "ok",
            "msgid": "325381129559375872"
    

    仅供参考,代码也就这样哈!

  • 相关阅读:
    CxImage图像库的使用
    CxImage动态加载图片(判断图片文件类型)
    实现一个类似360的button
    cximage功能简介
    开源图像处理软件代码
    MFC + CxImage 实现自绘半透明按钮
    VC 下加载 JPG / JPEG / GIF / PNG 图片最简单的方法
    时序数据库InfluxDB:简介及安装
    学习springboot整合mybatis并编写测试类
    Mybatis-Plus使用全解
  • 原文地址:https://www.cnblogs.com/followyou/p/9187065.html
Copyright © 2011-2022 走看看