??? 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,欢迎加入人工智能交流群(看我的动态),更多周边福利等你???

欢迎订阅本专栏或者关注我,大家一起努力每天一题算法题

最后,希望我的这篇文章能对你的有所帮助!

愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海!

前景

本次开发时又再次用到,结合之前的摸爬滚打的经验,我给大家整理下,做到一文就能让你明白[什么是订阅消息?]、[如何使用订阅消息]、[开发订阅消息],还在等什么?小程序学习订阅本专栏不香嘛?!,顺便关注走一走[滑稽]

目录

  • 前景
  • 什么是小程序订阅消息?
    • 1. 一次性订阅消息
    • 2. 长期订阅消息
    • 3. 设备订阅消息
    • 何为一次性模板?
    • 订阅消息的格式
  • 运行基本流程
  • 开发步骤
    • 第一步开通订阅消息
    • 选择消息模板
    • 小程序申请授权
    • 后端PHP封装、redis配置
    • 修改notify.php文件
    • 测试
  • 总结

什么是小程序订阅消息?

可以实现给授权了的用户进行消息推送,推送一些指定的消息,带动用户的点击,例如提醒用户签到,或者发送一些奖励到账等通知,目的就是一个,带动用户的点击,留住老用户。在这里我们需要通过,小程序的后台去开通订阅消息,订阅消息企业个人都可以开通,机关部门可以申请长期订阅模板、而其他的就只能选择一次性模板
消息类型

1. 一次性订阅消息

一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

2. 长期订阅消息

一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。

目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。

3. 设备订阅消息

设备订阅消息是一种特殊类型的订阅消息,它属于长期订阅消息类型,且需要完成「设备接入」才能使用。

设备订阅消息用于在设备触发某些需要人工介入的事件时(例如设备发生故障、设备耗材不足等),向用户发送消息通知。详见设备订阅消息文档

何为一次性模板?

简明扼要来说,就是用户授权一次可以获取一次消息,开发者不可以一直推送消息打扰用户

订阅消息的格式

订阅消息是不可以随便发送的,需要对应到格式,包括字数长度等等,可以看这个,这是一个签到模板

看下他的详情

活动名称

{{thing1.DATA}}

温馨提示

{{thing2.DATA}}

签到方式

{{thing5.DATA}}

签到状态

{{phrase6.DATA}}

这里的thing1、thing5都由字数的规范,防止推送垃圾消息,引流之类的

运行基本流程

前端通过组件接口用户进行授权,后端通过定时触发,将模板消息触发
可以通过宝塔的定时计划来进行触发,用到的各种鉴权,我们通过redis来存储

开发步骤

第一步开通订阅消息

选择消息模板


注意:如果没有想要的模板,去把小程序的服务类目多加几个

小程序申请授权

一次性订阅消息、长期订阅消息,接口

wx.requestSubscribeMessage

代码:

wx.requestSubscribeMessage({tmplIds: [],})

上面的tmplIds里面填写的就是申请到的模板ID,例如我的

6io5lFLo4OEdNjl2_F********RZEm6RMdHLQ

这里之前做过测试多个模板id一次性授权,存在bug,只会取第一个有效,啥意思呢?就是像这样

tmplIds: [‘1’,‘2’],
这个大家自己去测试


我们新建wxml文件:

<view style="height: 100rpx;"></view>
<button>抽奖</button>
<view style="height: 100rpx;"></view>
<button type="primary" bindtap="sign_up">签到</button>
<view style="height: 100rpx;"></view>
<button>购买</button>
<view style="height: 100rpx;"></view>
<button>分享</button>
注释:1每个人能每天能分享一次,重复分享积分不算入
2邀请新用户登录后加积分

新建js文件:

// pages/share/share.js
Page({/*** 页面的初始数据*/data: {},sign_up:function(){wx.requestSubscribeMessage({tmplIds: ['6io5lFLo4OEdNjl2_F********RZEm6RMdHLQ'],})},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

测试下可以正常授权

后端PHP封装、redis配置

在api目录下新建文件notify.php

<?php
// 微信小程序通知主要函数
//http_request 利用curl请求  两个参数   url连接地址   数据信息
function http_request($url,$data){$ch = curl_init();//初始化curl_setopt($ch, CURLOPT_URL, $url);//设置curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$output = curl_exec($ch);//执行 curl_close($ch);//关闭return $output;//返回结果
}//封装方法//签到通知function notify_sign($touser,$ACCESS_TOKEN,$order_num,$shop_name,$user_name9,$phone,$address){$template=array('touser'=>"$touser",//接收方openid'template_id'=>"8nHJ-TGMbPXBEROLpIEsba4ZMKt4lkJlJoEO5RcTYmk",    //模板的id'page'=>"pages/admin_order/admin_order",//点击小程序订阅消息跳转的页'data'=>array(// 'character_string1'=>array('value'=>"$out_trade_no",'color'=>"#00008B"),   'character_string12'=>array('value'=>"$order_num",'color'=>'#00008B'),  // 'amount4'=>array('value'=>"15",'color'=>'#00008B'),  'thing1'=>array('value'=>"$shop_name",'color'=>'#00008B'),'thing8'=>array('value'=>"$user_name9",'color'=>'#00008B'),'phone_number9'=>array('value'=>"$phone",'color'=>'#00008B'),'thing11'=>array('value'=>"$address",'color'=>'#00008B'))// 'phrase1'=>array('value'=>urlencode($plan),'color'=>'#00008B'),   //时间);$json_template=json_encode($template);$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$ACCESS_TOKEN;$res=http_request($url,urldecode($json_template));print_r($res);
}?>

下载redis服务,记得开放6379端口


新建access_token.php文件
通过定时任务对access_token的存储,在快过期时调用更新,这里说一次为啥不调用一次刷新一次access_token就好了,弄这么麻烦?因为当access_token刷新后已经通知过的模板消息就会失效,为了防止以前发的模板消息失效,能最大程度降低失效,可以用定时器的方法更新access_token即可

再看下官方怎么说的:

access_token 的存储至少要保留 512 个字符空间;
access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效;
建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;

<?php
//access_token
$appid="wxe20298c8e087576e";//小程序id
$secret="*****";//密钥
$grant_type="client_credential";
$access_token=curl_get("https://api.weixin.qq.com/cgi-bin/token?appid=$appid&secret=$secret&grant_type=$grant_type");
echo $access_token;
function curl_get($url){$header = array('Accept: application/json',);$curl = curl_init();//设置抓取的urlcurl_setopt($curl, CURLOPT_URL, $url);//设置头文件的信息作为数据流输出curl_setopt($curl, CURLOPT_HEADER, 0);// 超时设置,以秒为单位curl_setopt($curl, CURLOPT_TIMEOUT, 1);// 超时设置,以毫秒为单位// curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500);// 设置请求头curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//执行命令$data = curl_exec($curl);// 显示错误信息if (curl_error($curl)) {print "Error: " . curl_error($curl);} else {$result=json_decode($data,true);//  $ACCESS_TOKEN=$result['access_token'];curl_close($curl);//关闭连接//  return $result['access_token'];// //存入到redis
// // 如果未修改php.ini下面两行注释去掉ini_set('session.save_handler', 'redis');ini_set('session.save_path', 'tcp://127.0.0.1:6379');$redis = new redis();$redis->connect('127.0.0.1', 6379);$redis->set('kuaiquyin_wx_token',$result['access_token']);echo $redis->get('kuaiquyin_wx_token');}
}?>

我们访问测试下:

设计定时器触发更新access_token

修改notify.php文件

打开小程序模板的详情我们进行替换,例如我的:

那就需要把内容的数据替换

替换后notify.php文件如下:

<?php
// 微信小程序通知主要函数
//http_request 利用curl请求  两个参数   url连接地址   数据信息
function http_request($url,$data){$ch = curl_init();//初始化curl_setopt($ch, CURLOPT_URL, $url);//设置curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$output = curl_exec($ch);//执行 curl_close($ch);//关闭return $output;//返回结果
}//封装方法//签到function notify_sign($touser,$ACCESS_TOKEN){$template=array('touser'=>"$touser",//接收方openid'template_id'=>"6io5lFL**********HLQ",    //模板的id'page'=>"pages/jifen/jifen",//点击小程序订阅消息跳转的页'data'=>array(// 'character_string1'=>array('value'=>"$out_trade_no",'color'=>"#00008B"),   'thing1'=>array('value'=>"积分签到提醒",'color'=>'#00008B'),  // 'amount4'=>array('value'=>"15",'color'=>'#00008B'),  'thing2'=>array('value'=>"签到获得10积分",'color'=>'#00008B'),'thing5'=>array('value'=>"点击立即签到",'color'=>'#00008B'),'phrase6'=>array('value'=>"今天还没签到哦",'color'=>'#00008B'))// 'phrase1'=>array('value'=>urlencode($plan),'color'=>'#00008B'),   //时间);$json_template=json_encode($template);$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$ACCESS_TOKEN;$res=http_request($url,urldecode($json_template));print_r($res);
}?>

测试

通过定时计划我们先触发一次access_token的获取

然后新建sign.php文件

写入代码

<?php
//签到通知
header("Content-type:text/html;charset=utf-8");//字符编码设置  //通知include 'notify.php';//引用通知模板文件ini_set('session.save_handler', 'redis');ini_set('session.save_path', 'tcp://127.0.0.1:6379');$redis = new redis();$redis->connect('127.0.0.1', 6379);$redius_token=$redis->get('kuaiquyin_wx_token');//鉴权// $name=mb_substr($name,0,10,'utf-8');
notify_sign("你的openid",$redius_token,$name);

openid是小程序登陆后给的,可以去参考其他文章,这里不做说明
例如我的openid

写入后,去小程序点击签到授权

访问后报错:

我们看一下是啥错误

不好意思??忘记改了,忘记改openid了

改了之后:


微信成功收到消息

总结

以上就是今天的教程,做一个简单的记录,方便自己以后能用到,也希望能帮助到屏幕中困扰的你,谢谢支持

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

小程序如何使用订阅消息(PHP代码+小程序js代码)相关推荐

  1. openfire消息通知推送_微信小游戏内测「订阅消息」能力,这是召回用户的「大杀器」吗?...

    作者:蒋鸿昌 本文来源于「知晓程序」公众号.知晓云后端云服务,让你的小程序开发快人一步,添加「minsupport3」了解详情. 知晓云​cloud.minapp.com 一位投资人曾把最近 3 年微 ...

  2. 如何保护前端JS代码?前端js代码加密

    Web前端JS代码需要保护吗? 这得具体情况具体分析. 1.如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能.那不需要保护. 2.如果是精心设计一个绚丽的特效,如果想要保护这段自己付 ...

  3. 使用微信小程序新的订阅消息接口,主动推送。

    小程序订阅消息,昨天刚上线,今天就体验了一下,遇到不少问题,不过还好都解决了. 首先:你需要在小程序后台,选择一个模板,和公众号差不多,不过这里一定要注意,选择模板和你的类目有关系,只出现你类目相关的 ...

  4. 微信小程序云开发-订阅消息下发系统

    一.前言 本篇文章需要实现的是一个基于云开发搭配CMS实现的消息下发系统.当然不是简简单单的实现功能就好,在实现之前我们需要考虑这个功能的可拓展性以及可复性. 具体的业务场景:管理员登陆CMS系统后可 ...

  5. 【微信小程序】(三)订阅消息实现

    微信小程序订阅消息指的是用户在你的小程序中进行了一些操作,你的小程序可以在某一个时间点向该用户发送消息,通知用户操作的结果.比如用户想要小程序在某一天通知他去买票,在小程序中授予通知权限之后,小程序在 ...

  6. 微信小程序 云开发 订阅消息 获取下发权限失败 errCode: 20001

    通过下面的代码获取订阅消息的下发权限 提示错误 errMsg: "requestSubscribeMessage:fail No template data return, verify t ...

  7. 【Chrome】图片批量下载扩展zzllrr Imager小乐图客V1.4 (支持正则表达式、自定义JS代码、自定义引擎、多网站取图规则)...

    小乐图客 - Chrome浏览器图片批量下载工具,升级至V1.4 该版本实现的功能: 1.右下角集成众多网站引擎(相似图片搜索.图片搜索.网页搜索.图片上传等等). 2.选项中增加各类设置的重置.导入 ...

  8. Smarty中直接加JS代码和将JS代码写在literal标签里

    采用Smarty模板的html怎么加入JS代码呢? 如果按一般平常添加方法,会出错 .因为 Smarty会将"{}"解析为自己的方法,和js中的"{}"会冲突. ...

  9. android和js交互的代码,Android与JS代码交互

    现如今,很多Android APP都要与JS进行交互,而WebView就是Android与JS交互的桥梁,日常中最常见Android和JS交互有:APP注册协议,APP里的文章,APP里的活动页,这都 ...

最新文章

  1. Android开发之使用BroadcastReceiver实时监听电量(源代码分享)
  2. Cuda编程学习(一)
  3. iometer测试工具
  4. JVM学习笔记之-方法区,栈、堆、方法区的交互关系,方法区的理解,设置方法区大小与OOM,方法区的内部结构,方法区使用举例
  5. hdu 3367 Pseudoforest (最大生成树 最多存在一个环)
  6. mysql 压缩版安装
  7. GIS开源库shapeLib的使用方法
  8. IDEA快速修改类名和文件名
  9. 就业技术书文件表格_就业申请书
  10. [转]CISCO IOS命名规则
  11. 《计算机网络》第二章:物理层(The Physical Layer)
  12. Java面向对象编程 第一章 面向对象开发方法概述
  13. linux java heap space_Linux tomcat9 java.lang.OutOfMemoryError: Java heap space 解决方法
  14. 数据库基本操作和常用命令
  15. java md5加密 jar包,java md5加密工具类学习示例
  16. MediaRecorder录制视频和录音
  17. 2022年旅游业数据分析报告
  18. Word文档day01
  19. java公路车的气嘴_自行车气嘴的分类、特性和打气的方法
  20. 情侣纪念日网站html5源码教程

热门文章

  1. 想自学Java的速来!一文搞懂JVM架构和运行时数据区,满满干货指导
  2. PS中逆光调人像(包含发丝抠图)
  3. python秒数转化为时间格式_python将秒数转化为时间格式的实例
  4. 网银数字证书很“尴尬”
  5. 拼网站服务器地址,怎么拼网页服务器ip地址
  6. steam游戏搬砖,信息差赚钱项目
  7. 考研英语 小作文模板
  8. PYTHON爬取斗鱼英雄联盟所有在玩adc的主播房间信息
  9. python模拟声音输出_声音的输入输出
  10. 计算机左边桌面选项没了,我的电脑里的左侧工具栏不见了怎么办?