内容较多!!!如果有没涉及到的欢迎补充或提问。

一、订阅模板,前端调用

根据官方文档来:第一步

在小程序里面找到消息订阅,随便选个模板就行,我们需要的是模板id

https://mp.weixin.qq.comhttps://mp.weixin.qq.com/      在前端页面我们只需要调用方法

wx.requestSubscribeMessage({
                  tmplIds: ['填写我们申请的模板id'],
                  success (res) { 
                  }
        })

调用这个方法必须是在点击时间里面出发,它不能默认触发。下面为前端页面触发样式

当用户允许之后,只能获取到一条消息,个人小程序只能进行一次消息订阅,只有再次触发这个方法,用户点击允许,才可以接收到下个消息,但有个bug,用户可以连续点很多次允许,那么就可以接收到很多次消息。

二、获取token

前端的任务已经完成,下面是后端的内容,我们先以php为例子。

我们不使用云调用的话,首先我们需要获取access_token  获取access_token  的方法在官方文档里面有。auth.getAccessToken | 微信开放文档

需要在后端调用的接口为

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

需要appid  和appsecret 这两个参数我们从小程序里面可以找到:开发管理==》开发设置 appsecret 忘记的话 重置即可。

下面贴上后端获取access_token的代码:PHP

$openid = $_POST['openid'];$appid = '小程序的appid';//小程序的appid     $secret = '小程序的$appSecret';// 小程序的$appSecret$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";$res = curl_get($url);$res = json_decode($res,1);if($res['errcode']!=0) throw new Exception($res['errmsg']);$token = $res['access_token'];//保存下来token,下面要用

三、后端发送消息

做测试的话,可以在前端,设置一个事件,在后端写一个接口。前端去调用接口,去实现消息发送

第三步的官方文档:subscribeMessage.send | 微信开放文档

后端调用接口需要的参数为:上面获取到的token 和下图

其中data:是消息模板中的数据,数据填写根据自己的模板数据填写。在小程序里,打开自己的模板就可以看到对应的额数据怎么填写:上图中的number0 就对应这个图中的thing2,value就对应这个图中的data,随便填。

看具体代码部分

强调一下,使用php的时候,post_data 不要设置成对象,要设置成数组的形式,然后将post_data转化成json格式不然会报错47001

 $post_data = ['touser' => '用户的openid,你只需要前端调接口的时候穿过来就行','template_id' => '你的模板id','page' => '/pages/index',//你点击消息要跳转的页面'miniprogram_state' => "developer",//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版'lang' => 'zh_CN','data'=>['thing2'=>["value"=> "你可以睡觉了"],'thing3'=>["value"=> "你已经很多天没有睡了"],'name1'=>["value"=> "帅气的黑大王"]]];$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={$token}";// send_post($url, $post_data);$curl = curl_init();$post_data = json_encode($post_data);    // $post_data = http_build_query($post_data);curl_setopt($curl,CURLOPT_URL,$url1);curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT_POSTFIELDS,$post_data);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);$resulet = curl_exec($curl);var_dump($resulet);

此时我们在前端页面增加点击事件测试一下:下图为测试结果

四、后端python代码

import requests
import time
from flask import Flask, json, request, jsonify, render_template
from hashlib import sha1app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False  #解决中文乱码appid = ''
secret = ''
openid = None
template_id = ''@app.route('/', methods=['GET', 'POST'])
def home():return '<h1>Home</h1>'# 小程序消息发送启用接口
@app.route('/check_msg_auth', methods=['GET'])
def check_msg_auth():signature = request.args.get("signature")timestamp = request.args.get("timestamp")nonce = request.args.get("nonce")echostr = request.args.get("echostr")print("echostr: ", echostr)token = "qimhui"tmpArr = [token, timestamp, nonce]tmpArr.sort()tmpStr = "".join(tmpArr)s1 = sha1()s1.update(json.dumps(tmpStr).encode())tmpStr = s1.hexdigest()print("tmpstr: ", tmpStr)return echostr# 登录获取openid
@app.route('/login', methods=['POST'])
def login():ret_json = {'status': 0, 'msg': '未访问', 'data': None}global openidtry:code = request.form.get('code')print("---------------code =", code)url = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" % (appid, secret, code)res = requests.get(url).json()openid = res.openidprint("----------res =", res)ret_json['data'] = resexcept Exception as e:ret_json['msg'] = str(e)ret_json['status'] = 1finally:return jsonify(ret_json)# 获取access_token
@app.route('/get_authtoken', methods=['POST'])
def get_authtoken():url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % (appid, secret)res = requests.get(url).json()print("----------res =", res['access_token'])return res['access_token']# 发送消息
@app.route('/send_msg', methods=['POST'])
def send_msg():ret_json = {'status': 0, 'msg': '成功', 'data': None}try:access_token = get_authtoken()print("-----------access_token =", access_token)url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=%s" % (access_token)curr_time = time.strftime("%Y年%m月%d日 %H:%M:%S", time.localtime())payload = {"access_token": access_token,"touser": openid,"template_id": template_id,"page": "pages/index/iconView","miniprogram_state": "developer","lang": "zh_CN","data": {"thing1": {"value": ""},"date2": {"value": curr_time},"thing3": {"value": ""},"thing4": {"value": "中国"}}}# res = json.dumps(payload)# print("res =", res)data = json.dumps(payload, ensure_ascii=False)res = requests.post(url, data=data.encode("utf-8")).json()ret_json['data'] = resexcept Exception as e:ret_json['msg'] = str(e)ret_json['status'] = 1finally:return jsonify(ret_json)if __name__ == '__main__':# get_authtoken()app.run()

么么哒。

微信小程序消息订阅完整教程前端+后端。相关推荐

  1. 微信小程序 消息订阅 长期订阅 一次授权 多次接收 微信服务通知

    微信小程序消息订阅 长期订阅 一次授权 多次接收 发送微信服务通知消息 这里讲长期订阅! 长期订阅! 长期订阅! 需求描述: – 根据用户不同标签(租户.业主.维修师傅.居委会成员)一键向人员统一发送 ...

  2. 微信小程序消息订阅超详细流程步骤

    第一步:登录微信小程序管理后台 链接https://mp.weixin.qq.com 第二步:在左侧栏目找到订阅消息菜单栏  --我的模板   ,可以去公共模板库增加自己想要的模板 如果没有自己想要的 ...

  3. 微信小程序 -- 消息订阅实现

    消息订阅实现 1. 步骤一:获取模板 ID(前端同学的范围) 2.步骤二:获取下发权限(前端同学的范围) 3. 步骤三:调用接口下发订阅消息(后端同学的范围) 4. 代码示例 效果图开发者工具与真机效 ...

  4. 微信小程序之订阅消息实现

    微信小程序基于微信用户群体,以轻量级无需下载的优势,取代了众多笨重的APP. 而微信小程序的订阅消息,是开发者常用的功能,适用于小程序功能推广,提高用户粘性. 这里我的权限只能使用一次订阅消息,以一次 ...

  5. uniapp如何使用微信小程序的订阅信息推送消息给用户?

    1.首先获取小程序用户登录openId // 获取openidasync opid() {let self = thiswx.login({success(res) {if (res.code) { ...

  6. 微信小程序消息模板设计及实现

    本文以微信小程序内置的两个模板:购买成功和评论回复提醒为例来阐述第三方微信小程序平台的设计. 小程序端 微信用户支付成功后,微信服务通知中会收到支付成功服务提醒.见下图: 商家端 用户完成评价后,商家 ...

  7. 微信小程序消息通知开发

    微信小程序消息通知开发及注意点 大致流程图: #mermaid-svg-kKvz8B789cmQ7zco {font-family:"trebuchet ms",verdana,a ...

  8. 微信小程序开发的完整流程介绍,新手必读

    自从跳一跳小程序游戏出现后,一夜之间,小程序就变得家喻户晓了,功能开发也越来越丰富,在微信搜一搜就会发现许多大品牌早已有自己的小程序了,越来越多的企业和商家都看中了这个风口,想快速开发出一款属于自己的 ...

  9. nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能

    利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...

最新文章

  1. 德勤发布《中国智能制造分析报告》
  2. 生成Rss聚合页xml内容信息
  3. java compareto date_int compareTo(Date anotherDate)
  4. NIOS2随笔——uCOS-II实时操作系统
  5. android学汇资料总整理
  6. 【转】AB实验设计思路及实验落地
  7. NanoDet-Plus的学习笔记
  8. 活动现场控制管理利器--节目文件,会议文件,PowerPoint文件,多媒体文件编辑组织管理播放平台--双屏版软件,欢迎下载使用.
  9. 六轴UR机械臂标准DH正逆运动学公式推导+代码验证C++
  10. 河南省邓州市计算机学校,2019年邓州市职业技术学校招生简章及招生专业
  11. 转DICOM学习笔记
  12. “二手”市场的困境:用户习惯培养阶段
  13. DataBinding快速入门(还在用findViewById?)
  14. 共话行业新趋势,神州信息亮相毕马威中国金融科技高峰论坛
  15. 《去哪儿网支付系统架构演进全历程》阅读有感
  16. IP routing not enabled 是没有开启routing功能 只要 执行 ip routing 就可以
  17. 从0获取10万种子用户实操全流程
  18. Android /iPhone/iPad UI之常用图标尺寸规范
  19. 5 年经验年薪百万,一位阿里 P8 分享自己的成长干货
  20. excel合并同类项(去除重复项)数据并求和

热门文章

  1. CSR8675项目实战:BlueEarphone 左右声道各10个Speaker EQ
  2. IOS微信下问题1 底部导航栏导致标签位置偏移
  3. 谈servlet生命周期
  4. QLayout布局间消除间隙和QLayout边缘空白调整
  5. icloud 邮箱收发服务器,iCloud解决超大邮件问题
  6. 爬取中国大学排名并以csv格式存储
  7. vue中input禁止输入中文_input禁止键盘及中文输入,但可以点击
  8. K2P K2 OpenWrt 搭配光猫单臂路由上网
  9. linux中病毒排查步骤,linux系统下病毒排除思路
  10. 计算机名词解释 虚拟机,名词解释:什么是虚拟机