这边只会写如何实现,至于在公众号管理后台添加模板消息可以参考这篇文章: 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. redis 5.0.7 源码阅读——跳跃表skiplist

    redis中并没有专门给跳跃表两个文件.在5.0.7的版本中,结构体的声明与定义.接口的声明在server.h中,接口的定义在t_zset.c中,所有开头为zsl的函数. 一.数据结构 单个节点: t ...

  2. clr via c# Array2

    1,Array类型生成方式以及实际类型 private static void ArrayIntro() { String[] sa = new String[1]; Array a1 = Array ...

  3. 【01】HTML_day01_03-HTML常用标签

    typora-copy-images-to: media 第01阶段.前端基础.HTML常用标签 学习目标 理解: 相对路径三种形式 应用 排版标签 文本格式化标签 图像标签 链接 相对路径,绝对路径 ...

  4. Xilinx FPGA控制器的Everspin STT-DDR4设计指南

    自旋转移扭矩磁阻随机存取存储器(STT-MRAM)是一种持久性存储技术,可利用各种工业标准接口提供性能,持久性和耐用性. Everspin推出了STT-MRAM产品,该产品利用称为JE-DDR4的JE ...

  5. mybatis 配置--->确认jar包是否正确

    mybatis 配置之前,首先要确保服务器jar包是否成功 配置jar包如下添加mybaties-3.5.2. jar, maven 的 pom.xml 配置如下,查看配置是否成功见 如上分类 Mav ...

  6. beego orm的使用

    在使用beego model 去操作数据库时 有一些疑惑  找到了一个比较好的博文 原文地址 : https://my.oschina.net/u/252343/blog/829912 (Kelvin ...

  7. .net core 3.0+unit of work (一)

    1.先将unit of work源码下载 2.引入自己的项目 3.根据原始项目示意在自己项目的startup里注册仓储 由于我不想对每个实体都注册一遍,我使用了泛型仓储(core 2.0好像不支持) ...

  8. 关于Synchronized研伸扩展

    代码1 synchronized方法 synchronized void method(){ .......... } 代码2 synchronized代码块 synchronized (obj){ ...

  9. 2019sdqdCSP-J游记

    特别鸣谢:Miku -------------------------- 中午上了车,和ljx坐在一块.太阳是多么好啊,我们在看着刚出的tg题,cmz找不到了准考证,sbl在临时打印准考证 等到好不容 ...

  10. Magento 2 中请求( Request ) 后执行的基本过程

    入口 :index.php 引导 Bootstrap::run()  定义于 ./vendor/magento/framework/App/Bootstrap.php 用于 index.php 应用 ...