公众号模版消息推送

1、登录微信公众平台,开通模版消息
在这里插入图片描述
2、完成服务类目,根据自己项目的需求,选择类似的服务类目,后续可直接使用所选类目下的模版(现在基本上不能再自行创建模版了)
在这里插入图片描述


    /******************* 微信公众号推送  start **********************/
    /**
     * @note  发送模板消息【下单成功推送】
     * @param $data
     * @author: 夜色殘 [995562569@qq.com]
     * @Time: 2023/07/10   17:15
     */
    public static function send_template_order($data){

        //已改版,不支持再传自定义标题及备注信息   https://developers.weixin.qq.com/community/develop/doc/00080e73bbc5c079e0af3591b51c00
        //组建推送数据
        $data = [
            "touser"=>$data['wx_openid'], //对方的openid,前一步获取
            "template_id"=>"tDM14RR4f1Hk8IXTJd1UDQ_mtNRXeLZtlaeslXrn3M0", //模板id
            "data"=>[
                "short_thing1"=>[
                    "value"=> '出票成功' , //出票状态
                ],
                "thing2"=>[
                    "value"=> $data['start_city'].'——'.$data['end_city'] , //行程
                ],
                "time3"=>[
                    "value"=> date('Y-m-d',$data['appointment_time']) , //出发时间
                ],

            ]
        ];

        //获取access_token
        $wx_accession_token = self::getAccessToken() ;
        $data = json_encode($data);
        $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$wx_accession_token;
        $res = postCurl($url,$data,'',$type="POST");;
        return $res ;
    }

    /**
     * @note  发送模板消息【后台订单状态变更】
     * @param $data
     * @author: 夜色殘 [995562569@qq.com]
     * @Time: 2023/07/10   17:15
     */
    public static function send_template_notice($data){


        //已改版,不支持再传自定义标题及备注信息   https://developers.weixin.qq.com/community/develop/doc/00080e73bbc5c079e0af3591b51c00

        //获取access_token
        $wx_accession_token = self::getAccessToken() ;

        $title = $data['title'] ; //标题
        $time = date('Y-m-d H:i:s',$data['create_time']) ; //发送时间
        $content = $data['content'] ; //内容

        foreach ($data['user_list'] as $item){
            //组建推送数据
            $return = [
                "touser"=> $item['wx_openid'], //对方的openid,前一步获取
                "template_id"=>"NdwBBjPdc3CxCTUp95FSHfUJ86aPGVz6BRjE8oWzTuw", //模板id
                "data"=>[

                    //自定义颜色、首行内容及尾部备注字段已被去除,仅能展示对应的字段的文字且不超过20个字符。https://mp.weixin.qq.com/s/hvLO4Vs75NXDA__SxuyKXw
                    "first"=>[
                        "value"=> $title , //异常描述
                        "color"=> '#173177'//自定义颜色【已弃用】
                    ],

                    "keyword1"=>[
                        "value"=> $time , //发送时间
                        "color"=> '#173177'//自定义颜色
                    ],
                    "keyword2"=>[
                        "value"=> $content , //异常描述
                        "color"=> '#173177'//自定义颜色
                    ],

                    "remark"=>"感谢您的一贯支持", //自定义参数【已弃用】

                ]
            ];


            $return = json_encode($return,320);
            error_log(date("Y-m-d H:i:s").'   send_template_recharge----'.$return.PHP_EOL,'3','send_template_recharge.log');

            $url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$wx_accession_token;
            $res = postCurl($url,$return,'',$type="POST") ;

        }


        return $res ;

    }

    /**
     * Notes:获取微信access_token【过期自动获取并记录过期时间】
     * User: 任性不起来了
     * Date: 2023/7/18 11:19
     */
    public static function getAccessToken(){
        session_start();

        $access_token = $_SESSION['access_token'];
        $access_token_expire = $_SESSION['access_token_expire'];
        $WeChat_config = addons_config('WeChat');

        if(!$access_token || $access_token_expire < time() ){

            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$WeChat_config['code_appid'].'&secret='.$WeChat_config['code_appsecret'];

            $weixin = file_get_contents($url); //通过code换取网页授权access_token
            $jsondecode = json_decode($weixin); //对JSON格式的字符串进行编码
            $array = get_object_vars($jsondecode); //转换成数组


            if($array['access_token']){
                $_SESSION['access_token'] = $array['access_token'] ;
                $_SESSION['access_token_expire'] = time() + 7000 ;
            }

        }
        return $_SESSION['access_token'] ;

    }


    /******************* 微信公众号推送  end **********************/



if (!function_exists('postCurl')) {
    /**
     *$this->postCurl方法
     */
    function postCurl($url,$body,$header,$type="POST"){
        $header[] = 'User-Agent: Apipost client Runtime/+https://www.apipost.cn/';
        $header[] = 'Accept: application/json';
        //1.创建一个curl资源
        $ch = curl_init();
        //2.设置URL和相应的选项
        curl_setopt($ch,CURLOPT_URL,$url);//设置url
        //1)设置请求头
        //array_push($header, 'Accept:application/json');
        //array_push($header,'Content-Type:application/json');
        //array_push($header, 'http:multipart/form-data');
        //设置为false,只会获得响应的正文(true的话会连响应头一并获取到)
        curl_setopt($ch,CURLOPT_HEADER,0);
//		curl_setopt ( $ch, CURLOPT_TIMEOUT,5); // 设置超时限制防止死循环
        //设置发起连接前的等待时间,如果设置为0,则无限等待。
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
        //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        //2)设备请求体
        if ($body) {
            //$b=json_encode($body,true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $body);//全部数据使用HTTP协议中的"POST"操作来发送。
        }
        //设置请求头
        if($header){
            curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
        }
        //上传文件相关设置
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算

        //3)设置提交方式
        switch($type){
            case "GET":
                curl_setopt($ch,CURLOPT_HTTPGET,true);
                break;
            case "POST":
                curl_setopt($ch,CURLOPT_POST,true);
                break;
            case "PUT"://使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求。这对于执行"DELETE" 或者其他更隐蔽的HTT
                curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"PUT");
                break;
            case "DELETE":
                curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"DELETE");
                break;
        }


        //4)在HTTP请求中包含一个"User-Agent: "头的字符串。-----必设

//		curl_setopt($ch, CURLOPT_USERAGENT, 'SSTS Browser/1.0');
//		curl_setopt($ch, CURLOPT_ENCODING, 'gzip');

        curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
        //5)


        //3.抓取URL并把它传递给浏览器
        $res=curl_exec($ch);
        $code=curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $result=json_decode($res,true);
        //4.关闭curl资源,并且释放系统资源
        curl_close($ch);
        if(empty($result))
            return $res;
        else
            $result['code']=$code;
        return $result;

    }
}
if (!function_exists('http_curl_get')) {
    /**
     *  curl  get请求
     */
    function http_curl_get($url,$type=1) {
        $curl = curl_init();
        curl_setopt($curl,CURLOPT_TIMEOUT,5000);
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
        curl_setopt($curl,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
        curl_setopt($curl,CURLOPT_URL,$url);
        if($type == 1){
            curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
        }
        $res = curl_exec($curl);
        if($res){
            curl_close($curl);
            return $res;
        }else {
            $error = curl_errno($curl);
            curl_close($curl);
            return $error;
        }
    }
}



  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值