当前位置: 首页 > news >正文

微信公众号之模板消息使用

微信模板消息发送

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

下面是服务号的模板列表

422101-20180719150503872-1126326284.png

下面是具体的模板

422101-20180719150541299-897962759.png

其中模板ID很重要,可以将它配置到配置文件中。

'TEMPLATE_ID'                  => [
        'FEEDBACK'  =>'B5fhxVF4XuBfOd7t5Pdly_w0U8wT0XqBfJkob6CzUdE',
        'SEND_KEY'  =>'PzUme3sAzfGRJKGIh3Fuz5t82dmdv_NroyYYToTEmOI',
]

下面开始具体操作!

要想发送模板消息,首先需要获取AccessToken。

private function _get_access_token() {
       ...
       return $access_token;
}

有了AccessToken,就需要传递参数了。

发送模板消息,需要使用JSON方式传递参数。

// 发送模板消息
const API_SEND_TEMPLATE = 'https://api.weixin.qq.com/cgi-bin/message/template/send';
public function send_template_msg() {
        $access_token = $this->_get_access_token();
        $uri = self::API_SEND_TEMPLATE.'?access_token='.$access_token;

        $openid = $_POST['openid'];
        $template_id = $_POST['template_id'];
        $url = $_POST['url'] ? $_POST['url'] : '';
        $miniprogram = $_POST['miniprogram'] ? $_POST['miniprogram'] : '';
        $data = $_POST['data'];

        $params = [
            'touser' => $openid,
            'template_id' => $template_id,
            'url'    => $url,
            'miniprogram' => $miniprogram,
            'data'  => $data
        ];

//        $params = [
//            'touser' => 'oW-YE1hoOv9eSopqH1CK9BWidDxg',
//            'template_id' => 'B5fhxVF4XuBfOd7t5Pdly_w0U8wT0XqBfJkob6CzUdE',
//            'url'    => 'http://www.baidu.com',
//            'miniprogram' => '',
//            'data'  => [
//                'first' => [
//                    'value' => 'first',
//                    'color' => '#173177'
//                ],
//                'keyword1' => [
//                    'value' => 'keyword1',
//                    'color' => '#173177'
//                ],
//                'keyword2' => [
//                    'value' => 'keyword2',
//                    'color' => '#173177'
//                ],
//                'remark' => [
//                    'value' => 'remark',
//                    'color' => '#173177'
//                ]
//            ]
//        ];


        $res_data = Http::doPostJson($uri, $params);

        $res_data = json_decode($res_data, true);
        if ($res_data['errcode'] != 0) {
            $this->ajaxReturn($this->jsonError(10001, '接口请求失败'));
        }

        $this->ajaxReturn($this->jsonSuccess(1, '成功', $res_data['msgid']));
}

其中openid是否确定发给谁?template_id是确定使用什么模板发送。url是跳转地址,miniprogram是跳转到小程序。data是具体的模板内容。

再来看看牛逼的doPostJson函数,

// 通过POST方式发送json数据
static public function doPostJson($url = '', $param = [] ,$contentType = 'json') {
        $ch = curl_init();
        // 请求地址
        curl_setopt($ch, CURLOPT_URL, $url);
        // 请求参数类型
        $param = $contentType == 'json' ? urldecode(json_encode($param)) : http_build_query($param);
        // 关闭https验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // post提交
        if($param){
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
        }
        // 返回的数据是否自动显示
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 执行并接收响应结果
        $output = curl_exec($ch);
        // 关闭curl
        curl_close($ch);
        return $output !== false ? $output : false;
}

醉醉核心的就是这句了,

$param = $contentType == 'json' ? urldecode(json_encode($param)) : http_build_query($param);

OK了,下面看看效果吧~~~

提前说一下,这个测试必须用线上的测试,因为微信需要一个IP白名单才能获取到AccessToken!

要想授权成功,使用JSSDK,还需要将域名加入到安全域名!

422101-20180719151735551-1052064091.png

这里的模板也很有讲究了!自己申请,一个月只有三次机会,审核要7到15天,关键还不一定能通过。你必须要关注公众号,才能收到模板消息。

相关文章:

  • Windows Unity ARKit发布到IOS相关设置及错误解决
  • Spring配置补充
  • 基于 HTML5 结合互联网+ 的 3D 隧道
  • Ligowave无线网桥15级手拉手链路设计及稳定性保障
  • JAVAOOP异常
  • RxJava mini
  • 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲
  • 使用在线yum源安装maridb并配置,以及跳过密码并修改。
  • 绝对音乐No.1
  • 阿里云和腾讯云VPC互通配置
  • java成神之路截图
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue-cli原理分析
  • 数据库sql优化
  • 阿里十年,只剩下这套Java开发体系了
  • JavaScript-如何实现克隆(clone)函数
  • AngularJS指令开发(1)——参数详解
  • bootstrap创建登录注册页面
  • Git的一些常用操作
  • LintCode 31. partitionArray 数组划分
  • php中curl和soap方式请求服务超时问题
  • TypeScript迭代器
  • vuex 笔记整理
  • 前端之React实战:创建跨平台的项目架构
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 如何优雅地使用 Sublime Text
  • 深度学习中的信息论知识详解
  • 数据仓库的几种建模方法
  • 听说你叫Java(二)–Servlet请求
  • 一天一个设计模式之JS实现——适配器模式
  • 译有关态射的一切
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • postgresql行列转换函数
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #HarmonyOS:基础语法
  • #laravel 通过手动安装依赖PHPExcel#
  • #NOIP 2014# day.1 T2 联合权值
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (第61天)多租户架构(CDB/PDB)
  • (二十三)Flask之高频面试点
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)模仿学习-完成后台管理页面查询
  • .NET Core 版本不支持的问题
  • .Net MVC + EF搭建学生管理系统
  • .NET 中的轻量级线程安全
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET连接数据库方式
  • .net中应用SQL缓存(实例使用)
  • .stream().map与.stream().flatMap的使用
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [Android] 修改设备访问权限
  • [C++]:for循环for(int num : nums)