PHP实现推送微信小程序模板消息
这边只会写如何实现,至于在公众号管理后台添加模板消息可以参考这篇文章: 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实现推送微信小程序模板消息的更多相关文章
- 微信小程序模板消息群发解决思路
基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...
- 微信小程序模板消息后端代码
利用spring 事件发送模板消息 1.定义事件 import com.ruoyi.project.salerauth.domain.TemplateMessage; import org.sprin ...
- 微信小程序模板消息
1 先去微信公众平台,选择现有模板,会有一个模板编号,模板中没有的关键词,可以申请新增. 微信公众平台直达:https://mp.weixin.qq.com 模板消息对应文档直达:https://de ...
- 微信小程序模板消息详解
先放代码 wxml: <form name='pushMsgFm' report-submit bindsubmit='orderSign'> <view> 单号: 0< ...
- node配置微信小程序解密消息以及推送消息
上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...
- 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法
主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...
- 120多套各种类别微信小程序模板源码打包下载
120多套各种类别微信小程序模板源码打包下载,以下是部分截图欢迎下载!120多套各种类别微信小程序模板源码打包下载 下载地址:https://pan.baidu.com/s/1Cfqyc9p2ZDOc ...
- node.js微信小程序配置消息推送
在开发微信小程序时,有一个消息推送,它的解释是这样的. 消息推送具体的内容是下面的这个网址 https://developers.weixin.qq.com/miniprogram/dev/fra ...
- 【原创】前端开发人员如何制作微信小程序模板
(我的博客网站中的原文:http://www.xiaoxianworld.com/archives/305,欢迎遇到的小伙伴常来瞅瞅,给点评论和建议,有错误和不足,也请指出.) 最近接触了一下微信小程 ...
随机推荐
- url相对路径变成绝对路径
var eleLink = document.createElement('a'); eleLink.href = "/wordpress/?p=9227"; console.lo ...
- springboot + mybatis 支持oracle和mysql切换含源码
1.springboot 启动类加入bean 如下 // DatabaseIdProvider元素主要是为了支持不同的数据库@Beanpublic DatabaseIdProvider getData ...
- go 面向对象
结构体 创建结构体变量和访问结构体字段 package main import "fmt" //创建结构体变量和访问结构体字段 type Person struct { Name ...
- Python之一、#!/usr/bin/python到底是什么意思
引用https://www.cnblogs.com/furuihua/p/11213486.html 关于脚本第一行的 #!/usr/bin/python 的解释,相信很多不熟悉 Linux 系统的同 ...
- (办公)记事本_linux关机和重启命令
参考谷粒学院的linux视频教程:http://www.gulixueyuan.com/course/300/task/7091/show .sync Linux sync命令用于数据同步,sync命 ...
- 程序员:我终于知道post和get的区别
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/kebi007/article/detail ...
- Uva12716 素数筛思想的应用
Uva12716 题意: 输入整数n,1<= n <=3e7,问有多少个整数对(a,b)满足:1 <= b <= a <= n,且gcd(a,b)== a XOR b 解 ...
- 如何开发自己的第一个 Serverless Component
前言 上一篇 基于 Serverless Component 的全栈解决方案 介绍 Serverless Component 是什么和如何使用 Serverless Component 开发一个全栈应 ...
- dubbo的使用
dubbo现在用的也不多,基本都在用spring cloud那一套,所以不详细写这个dubbo了. 1.zookeeper的安装 2.demo示例 我们需要把提供者注册到dubbo注册中心,消费者去订 ...
- ABS与PC材质
PC材料和ABS材料都是最常用的塑料材质,它们在材质.价格.性能上都有不同点. (一)PC材料 优点:PC是一种综合性能优良的非晶型热塑性树脂,具有优异的电绝缘性.延伸性.尺寸稳定性及耐化学腐蚀性,较 ...