这边只会写如何实现,至于在公众号管理后台添加模板消息可以参考这篇文章: https://www.cnblogs.com/txw1958/p/wechat-template-message.html,当然这篇也有具体的实现代码。

微信小程序开发文档: https://developers.weixin.qq.com/miniprogram/dev/api/sendTemplateMessage.html

注意点:

1、能收到推送消息的人是在七日内使用过小程序的人;需要开发者在用户使用程序的过程中创建表单,生成表单id,并且存储起来;

2、一个表单id只能被使用一次,推送过则无效了(所以存储起来的表单id要做好定期清理);

3、推送消息有两个接口地址,一个是统一服务消息、一个是模板消息千万不要调用错了。

实现代码:

/*用户在使用程序的过程中保存用户提交表单的id*/
public function addRecordAction()
{
$params['touser'] = $this->_req->getPost('touser', "");
$params['form_id'] = $this->_req->getPost('formId', "");
$params['create_time'] = time();
$params['update_time'] = time();
$model = new FormUserModel();
$preCheck = $model->checkUser($params['touser']); //该函数用于检测库里有没有存在该用户的表单记录,如果存在先删除再新增一条记录。
if ($preCheck) {
$res = $model->saveMsgData($params);
if ($res) {
response::succ('操作成功!');
}
}
response::error('操作失败,请重试~');
}
/*新建一条模板消息*/
public function saveTmpMsgAction() //这里的keyword1、2、3、4分别对应在微信管理后台模板消息的内容
{
$detail['keyword1'] = $this->_req->getPost('keyword1', "");
$detail['keyword2'] = $this->_req->getPost('keyword2', "");
$detail['keyword3'] = $this->_req->getPost('keyword3', "");
$detail['keyword4'] = $this->_req->getPost('keyword4', "");
$detail['template_id'] = $this->_req->getPost('template_id', "");
$detail['emphasis_keyword'] = $this->_req->getPost('emphasis_keyword', ""); 这个加粗的部分是在keyword1\2\3\4里选择一个。如果想加粗keyword1的字,这个值就应该填keyword1.DATA,2的话就是keyword2.DATA,以此类推。
$detail['page'] = $this->_req->getPost('page', "pages/index/index"); 这里的page设置是推送消息是否带有进入小程序的入口,一开始建议不填写,确认消息能推送了再加上。 $model = new SendTmpMsgModel();
$res = $model->saveMsgData($detail);
if ($res) {
response::succ('保存成功!');
}
response::error('保存失败,请重试~');
} /*推送消息操作*/
public function pushMsgAction()
{
$id = (int)$this->_req->getPost('id', 0); //获取某个模板配置id
if (!$id) {
response::err_lack_param();
}
$fmodel = new FormUserModel();
$deadTime = time() - 7 * 24 * 60 * 60;
$formUsers = $fmodel->getFormData($deadTime); //该函数用于获取有效的表单id(有效的表单id:创建的时间在7日内,没被使用过的); if (!empty($formUsers)) {
$model = new SendTmpMsgModel();
$detail = $model->getMsgDetail($id); //获取该记录的模板信息
$wxModel = new WxAuthModel();
foreach ($formUsers as $item) { //只能单个用户单个用户的推送,所以这边用循环处理 $detail['form_id'] = $item['form_id'];
$detail['touser'] = $item['touser'];
$data = json_encode($detail);
$res = $wxModel->pushMsg($data);
if ($res['errcode']!=0) {
file_put_contents('/tmp/heka_pushMsg_error.' . date("Ymd") . '.log', date('Y-m-d H:i:s') . "\t" . $res['errmsg'] . "\n", FILE_APPEND);
} else {
$fmodel->changeStatus($item['id']);
}
}
$res = $model->changeMsg($id); //推送成功,改变该表单信息记录的状态为已推送过的。
if (!$res) {
response::error('操作失败,请重试~');
}
response::result('操作成功!');
}
response::error('暂无推送对象( T _ T )');
} - 与微信相关的处理尽可能放一个model里处理,这样微信有改动的时候直接修改这个model就好了。 /*获取access_token,不能用于获取用户信息的token*/
public function getAccessToken()
{
$token_file = '/dev/shm/heka_token.json';
$data = json_decode(file_get_contents($token_file));
if ($data->expire_time < time()) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this->http_request($url));
$access_token = $res->access_token;
if ($access_token) {
$data->expire_time = time() + 3600;
$data->access_token = $access_token;
file_put_contents($token_file, json_encode($data));
}
} else {
$access_token = $data->access_token;
}
return $access_token;
} public function pushMsg($data) //推送模板消息
{
$access_token = $this->getAccessToken();
$res_url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=$access_token";
$res = $this->http_request($res_url, $data,'json');
return $res;
}

PHP实现推送微信小程序模板消息的更多相关文章

  1. 微信小程序模板消息群发解决思路

    基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...

  2. 微信小程序模板消息后端代码

    利用spring 事件发送模板消息 1.定义事件 import com.ruoyi.project.salerauth.domain.TemplateMessage; import org.sprin ...

  3. 微信小程序模板消息

    1 先去微信公众平台,选择现有模板,会有一个模板编号,模板中没有的关键词,可以申请新增. 微信公众平台直达:https://mp.weixin.qq.com 模板消息对应文档直达:https://de ...

  4. 微信小程序模板消息详解

    先放代码 wxml: <form name='pushMsgFm' report-submit bindsubmit='orderSign'> <view> 单号: 0< ...

  5. node配置微信小程序解密消息以及推送消息

    上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...

  6. 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

    主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...

  7. 120多套各种类别微信小程序模板源码打包下载

    120多套各种类别微信小程序模板源码打包下载,以下是部分截图欢迎下载!120多套各种类别微信小程序模板源码打包下载 下载地址:https://pan.baidu.com/s/1Cfqyc9p2ZDOc ...

  8. node.js微信小程序配置消息推送

    在开发微信小程序时,有一个消息推送,它的解释是这样的. 消息推送具体的内容是下面的这个网址   https://developers.weixin.qq.com/miniprogram/dev/fra ...

  9. 【原创】前端开发人员如何制作微信小程序模板

    (我的博客网站中的原文:http://www.xiaoxianworld.com/archives/305,欢迎遇到的小伙伴常来瞅瞅,给点评论和建议,有错误和不足,也请指出.) 最近接触了一下微信小程 ...

随机推荐

  1. nCompass-产品配置基础

    nCompass-产品配置基础 设备上架后,浏览器登陆设备的管理IP,输入用户名和密码, 登入进入视图展示页面 1. 添加许可 新设备上架之后,要添加许可方能使用. 步骤: 系统设置 --- 许可-- ...

  2. LaTex安装介绍

    写在前面 很多的会议.期刊要求投稿使用LaTex编辑,而不是Word,使用好LaTex后,论文的排版任务确实会变得轻松. 1.下载软件 LaTex有很多衍生版,常用的推荐是Tex live,安装方式选 ...

  3. 查看mysql是否锁表了

    1.查看表是否被锁: (1)直接在mysql命令行执行:show engine innodb status\G. (2)查看造成死锁的sql语句,分析索引情况,然后优化sql. (3)然后show p ...

  4. Excel_单元格格式_查找替换、定位

    不重复! 显示格式:Ctrl+1 1,合并后居中,填充颜色,设置单元格边框,划斜线,格式刷(单击,双击) 2,单元格数字格式,格式不会改变值!自定义(编码规则) 4个 a :只显示星期:周+aaa:周 ...

  5. Exception in thread "main" java.lang.NoClassDefFoundError:org/springframework/beans/factory/config/EmbeddedValueResoler

    参考自:https://www.cnblogs.com/quanbin/p/11100337.html 解决方法:检查发现spring的核心包spring-bean版本和其他核心包版本不同,更改为和其 ...

  6. 二次剩余的判定及Cipolla算法

    二次剩余 ppp是奇素数.所有的运算都是在群Zp∗Z_{p}^{*}Zp∗​中的运算.方程x2=a≠0x^2=a \neq 0x2=a̸​=0问是否有解,以及解是什么?若有解,aaa就是模ppp的二次 ...

  7. windows使用proxifier全局代理 - 配置可用; windows10 配置全局代理 走 socks5

    最近windows上需要配置全局代理 走 socks5,发现同类型的有 cow pcap 等解决方案,通过尝试发现还是proxifier 比较好用! 下载:https://www.proxifier. ...

  8. maven的核心概念——依赖

    一.STS集成maven(以下是mac版的STS) 1.点击Spring Tool Suite,点击preferences maven中的installations 点击add,选择对应的路径即可 点 ...

  9. .net生成PDF文件的几种方式

    以下为在.net mvc中,生成pdf的几种方式,资料都是在做项目时网上找的 1.使用Microsoft.Office.Interop.Word.dll将word转换为PDF dll可以单独下载,一般 ...

  10. PHP OOP

    <?php //1. Class and object /* object-oriented concept an object can be almost any items or conce ...