下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法

下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法

下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法

微信发送模板消息
通常是微信公众号发送给关注人的信息

需要准备:

  1. https://api.weixin.qq.com/cgi-bin/token
    说明:这个地址是获取公众号access_token的官方接口地址
    A.需要带一个默认参数grant_type=client_credential(这个照用就可以 官方标配参数)
    B.公众号的appid 如:wx1b608b0bee000002
    C.公众号的secret 如:0945ed246f6b5fc3fd1e3c00000000ae
  2. 微信公众号需要申请需要的模板 也就有了模板ID
    微信发送模板消息_3d
    知道模板结构:
    微信发送模板消息_3d_02
  3. 准备好待接收模板信息的用户的openid
    如:粉丝1:ojaFp6PS03gSFUubQmoRcRdxKk3A 粉丝2:ojaFp6PS03gSFUubQmoRcRdxXXXXX

至此:准备工作就绪

发送模板消息过程:

第一步:根据第一步准备好的参数 get方式请求接口获取access_token
如:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx1b608b0bee000002&secret=0945ed246f6b5fc3fd1e3c00000000ae

得到结果:
{
“access_token”: “25_y5EvpM964jz8isCHh3YwZNegcfdYSW4IZTGSU3rfrWi_6KWwZBu5_E7QOuBxDGl4lxvpIdcoXcY_9PjdT_2usKBVHWTLxGJ1WGPmWgE8EOM_YWnjNj-V5FrrgaICLIfABAOXU”,
“expires_in”: 7200
}

说明:access_token的失效为7200秒,为了避免繁琐的请求接口数据,可以把access_token存储为本地json文件,redis获取其他自己常用的临时保存。

第二步:根据模板消息数据模型封装数据:get形式传参access_token post形式发送数据。

话不多说 上干货 代码奉上 后面有使用方法说明

class sendMsg{
    private $appid = "";
    private $secret = "";

    public $template='';

    public function __construct($appid,$secret)
    {
        $this->appid = $appid;
        $this->secret = $secret;
    }

    public function getAccessToken(){
        // 缓存文件名
        $file_path = "/access_token.txt";
        $str = '';
        if(is_file($file_path)) {
            $str = file_get_contents($file_path);//将整个文件内容读入到一个字符串中
            $str = str_replace("\r\n", "<br />", $str);
        }
        $data = json_decode($str); //转换为json格式

        if ($data->expire_time < time() or ! $data->expire_time) {

            //token过期的情况
            $temp_url = 'https://api.weixin.qq.com/cgi-bin/token?';
            $temp_url .= 'grant_type=client_credential';
            $temp_url .= '&appid='.$this->appid;
            $temp_url .= '&secret='.$this->secret;
            $res = $this->https_request($temp_url);
            $res = json_decode($res, true); // 对 JSON 格式的字符串进行编码
            $access_token = $res['access_token'];
            if ($access_token) {
                $tempdata['expire_time'] = time() + 3600; //保存1小时
                $tempdata['access_token'] = $access_token;
                $fp = fopen($file_path, "w"); //只写文件
                fwrite($fp, json_encode($tempdata)); //写入json格式文件
                fclose($fp); //关闭连接
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }


    /**
     * sendMsg constructor.
     * @param $touser   openid数组
     * @param $url      点击模板信息跳转地址
     * @param $template_id  模板id
     */
    public function sendMessage($touser,$url,$template_id){

        $access_token = $this->getAccessToken();
           //模板消息请求URL
        $wxurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $access_token;
        //遍历发送微信消息

        foreach ($touser as $value) {
            $data = $this->getDataArray($value,$template_id,$url);
            $json_data = json_encode($data);//转化成json数组让微信可以接收
            $res_json = $this->https_request($wxurl, urldecode($json_data));//请求开始
            $res = json_decode($res_json, true);
            if ($res['errcode'] == 0 && $res['errcode'] == "ok") {
                //成功
                echo $res_json;
            }else{
                //失败
                echo $res_json;
            }
        }
    }

    /**
     * 获取发送数据数组
     * @param $value 用户openid
     * @param $template_id 模板id
     * @param $url  点击模板跳转地址
     * @return array  返回 支持微信接口的模板数据
     */
    function getDataArray($value,$template_id,$url)
    {

        $template =$this->template;
        $data = array(
            'touser' => $value, //要发送给用户的openid
            'template_id' => $template_id,//改成自己的模板id,在微信后台模板消息里查看
            'url' => $url, //自己网站链接url
            'data' =>$template
        );
        return $data;
    }

    public function updateTemplate($id){
        $this->template = $this->baseTemplate($id);
    }
    /**
     * 模板库
     * @param $id
     * @return mixed
     */
    public function baseTemplate($id){
        $data = array(
            //一个模板
            'tjJ4m-gtcTaMOh3GQuVKEj-OZcUBtEDmpaty4leJH9I'=> array(
                'first' => array(
                    'value' => "first value",
                    'color' => ""//白色
                ),
                'keyword1' => array(
                    'value' => "keyword1 value",
                    'color' =>''//"#FF0000"//红色 "#FF0000"//红色
                ),
                'keyword2' => array(
                    'value' => "keyword2 value",
                    'color' => ''//"#FF0000"//红色"#00FF00"//绿色
                ),
                'keyword3' => array(
                    'value' => "keyword3 value",
                    'color' => ''//"#0000FF"//蓝色
                ),
                'remark' => array(
                    'value' => "\n remark value >>>",
                    'color' => "#0000FF"//蓝色 "#FFFF00"//黄色
                ),
            ),
            //第二个模板
            'id'=> array(
                'first' => array(
                    'value' => "first value",
                    'color' => "#000"
                ),
                'keyword1' => array(
                    'value' => "keyword1 value",
                    'color' => "#f00"
                ),
                'keyword2' => array(
                    'value' => "keyword2 value",
                    'color' => "#173177"
                ),
                'keyword3' => array(
                    'value' => "keyword3 value",
                    'color' => "#3d3d3d"
                ),
                'remark' => array(
                    'value' => "\n remark value >>>",
                    'color' => "#3d3d3d"
                ),
            )
        );

        return $data[$id];
    }

    //curl请求函数,微信都是通过该函数请求
    function https_request($url, $data = null)
    {
        $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);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

}

//调用方法
//这里是你要发送粉丝的openid
$touser = array('ojaFp6PS03gSFUubQmoRcRdxKk3A','ojaFp6PS03gSFUubQmoRcRdxKk3A');
//这个地址是点击消息跳转的页面
$url='';
$appid = 'wx1b608b0bee479ba2';
$secret = '0945ed246f6b5fc3fd1e3c1633dd07ae';

$a = new sendMsg($appid,$secret);
$template_id = 'tjJ4m-gtcTaMOh3GQuVKEj-OZcUBtEDmpaty4leJH9I';
//重构模板提示信息

$a->updateTemplate($template_id);
$a->template['first']['value'] = '恭喜您,您的预约审核通过!';
$a->template['keyword1']['value'] = '赵大夫';
$a->template['keyword2']['value'] = '2019年9月17日11:45';
$a->template['keyword3']['value'] = '尽快完成付款,我们就可以调配相关人员了!';
$a->template['remark']['value'] = "\n 点击进入订单详细 >>>";

//发送
$a->sendMessage($touser,$url,$template_id);

至此 模板消息发布完成
微信发送模板消息_d3_03

你的成功了吗 有问题留言吧