php实现微信小程序消息通知
大家好,又见面了,我是你们的朋友全
接入消息通知指引地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/callback_help.html
文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#%E6%A8%A1%E7%89%88%E6%B6%88%E6%81%AF%E7%AE%A1%E7%90%86
看完这两个地址基本上你就明白是怎么实现消息通知的了,下面就是需要根据自己的业务需求写php代码了
php中业务分为以下几个步骤:
1、小程序后台消息模板设置获取模板ID
2、微信公众平台|小程序->设置->开发设置 获取AppID(小程序ID)、AppSecret(小程序密钥 注:重置后导致之前的失效)
3、通过AppID、AppSecret调用接口生成ACCESS_TOKEN
4、获取form_id
5、发送模板消息
下面是实现上面步骤的详细过程:
一、获取模板ID

二: 获取AppID(小程序ID)、AppSecret(小程序密钥 注:重置后导致之前的失效)

三、生成ACCESS_TOKEN
接口地址:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
复制

代码实现:
public function getAccessToken(Request $r)
{
$appId = Input::get('appId',NULL);
$appSecret = Input::get('appSecret',NULL);
$r = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret"); //返回的是字符串,需要用json_decode转换成数组
$data = json_decode($r,true);
return $data['access_token'];
}
四、获取form_id
需要在小程序上做个form表单提交,可以前端生成传到后台,就可以获取到了
注:
页面的 <form/> 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息(多个地方生成form_id传给后端)。
form_id的长度:Android是13位时间戳、iOS是32位GUID
form_id其实就是前端负责获取,传给后端,后端将form_id存起来,在业务中用到消息通知的时候从表里面取出来
form_id中需要注意的一点:一个form_id只能用一次,所以在建表的时候需要给个status区分已使用和未使用的状态(这个坑已经进去过,发送完模板不修改status值,会使得消息通知偶尔成功,偶尔失败)
复制
五、发送模板消息
上面需要的参数都准备好了,OK,这里自己封装了一个方法。然后在用到的地方调用的
封装的方法如下:
复制
public function sendMessage()
{
$token = $this->getToken();
$post = [];
$post['touser'] = '用户openId';
$post['page'] = 'index';
$post['emphasis_keyword'] = 'keyword1.DATA';
$post['color'] = '#173177';
$post['template_id'] = '模板id';
$post['form_id'] = 'formId';
$post['data'] = [
'keyword1'=>['value'=>'xxxxxx','color'=>'#173177'],
'keyword2'=>['value'=>'2018-03-06 14:22:34','color'=>'#173177'],
'keyword3'=>['value'=>'xxxxxx','color'=>'#173177']
];
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$token;
$re = $this->curl_url($url,$post);
return $re;
}
private function curl_url($url, $json)
{
$body = json_encode($json);
$headers = array("Content-type: application/json;charset=UTF-8", "Accept: application/json", "Cache-Control: no-cache", "Pragma: no-cache");
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
调用:
复制
public function send(Request $r)
{
$wechat = new WeChatApi();
$re = $wechat->sendMessage();
return $re;
}
到这里就可以实现消息通知了
php实现微信小程序消息通知的更多相关文章
- 微信小程序消息通知-打卡考勤
微信小程序消息通知-打卡考勤 效果: 稍微改一下js就行,有不必要的错误,我就不改了,哈哈! index.js //index.js const app = getApp() // 填写微信小程序ap ...
- 微信小程序--消息推送配置Token令牌错误校验失败如何解决
微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...
- .NET CORE 微信小程序消息验证的坑
进入微信小程序,点击开发->选择消息推送->扫码授权,填写必要参数 进入接口开发: /// <summary> /// 验证小程序 /// </summary> / ...
- Java实现 微信小程序 + 消息推送
实现效果: 下面要显示五个字段 接下来,参照官方文档,一步步实现: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open- ...
- 微信小程序消息模板
wxml: <form bindsubmit='sendSms' report-submit='true' id='fo'> <button form-type='submit'&g ...
- 微信小程序消息推送,前端操作
<form bindsubmit="getFormId" report-submit="true"> <button form-type=&q ...
- 微信小程序-通知滚动小提示
代码地址如下:http://www.demodashi.com/demo/14044.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序的坑(持续更新中)
参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...
- 微信小程序项目总结
最近公司做的项目,我主要负责小程序前端页面也API数据请求页面渲染工作,因为对微信小程序的不熟悉,在做的过程中不免做了很多弯路.现在总结如下: 首先遇到的问题就是"微信小程序尺寸单位&quo ...
- 微信小程序客服消息开发实战:实时在手机上接收小程序客服消息通知,以及在手机上回复
在微信小程序开发中,可以非常方便的集成客服功能,只需要一行代码便可以将用户引导至客服会话界面.这行代码就是: <button open-type="contact" bind ...
随机推荐
- bzoj 3309
奇怪的莫比乌斯反演... 题意:定义$f(n)$表示将$n$质因数分解后质因子的最高幂次,求$\sum_{i=1}^{a}\sum_{j=1}^{b}f(gcd(i,j))$ 首先肯定是反演嘛... ...
- Appium+Python UI自动化框架
import datetimefrom appium.webdriver.common.touch_action import TouchActionfrom appium import webdri ...
- 浙大版《C语言程序设计(第3版)》题目集 习题3-1 比较大小(10 分)
本题要求将输入的任意3个整数从小到大输出. 输入格式: 输入在一行中给出3个整数,其间以空格分隔. 输出格式: 在一行中将3个整数从小到大输出,其间以"->"相连. 输入样例 ...
- 智利SUBTEL更新WiFi 6技术法规!
2022年9月6日,智利电信监管机构(SUBTEL) 发布了第2844号豁免决议,更新了1985号豁免决议,即短程设备的固定技术标准. 主要更新如下: • 2.4 GHz频段已在医疗设备目录中删除,现 ...
- ubuntu | virtualbox报错:不能为虚拟电脑打开一个新任务
百度了几个办法 都不行. 还得是gxd,说在vmware虚拟机设置勾上这个就行了
- C代码调用C++动态库
最近在工作中遇到了修改C++代码嵌入到C代码中去,C肯定不能直接用C++代码,就需要自己去修改成C代码,所以我就决定在C中调用C++动态库(谁让我懒呢),话不多说,直接上步骤 第一步:编写C++代码 ...
- mybatis核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- SSD目标检测网络解读(含网络结构和内容解读)
SSD实现思路 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Pri ...
- 字节过滤流 --->对象流(存入对象的)----> ObjectOutputStream: 用法
前提:1).要有一个类 并创建这个类的对象2)要让类必须继承Serializable接口3)transient修饰的属性 值不参与序列化1创建字节输出节点流FileOutputStream fos = ...
- python发布定时任务(schedule模块)
最近公司开始让在自己开发的软件上写日志,有几次下班了都忘了写,好几次都是给领导发邮件,说明一下自己没有写日志这件事,很麻烦.但是我一想我每天都要写,岂不是很麻烦,想想自己之前有爬虫经验,为什么自己不写 ...