码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【小程序】一次关于小程序消息推送能力的分析及实现


    一、推送消息需求

            一个简单常见的需求:推送小程序消息通知到用户!

            需要解决的问题:

    • 小程序消息推送服务有什么限制?
    • 小程序可支持推送哪些类型消息?
    • 如何实现小程序消息通知推送服务?

    二、小程序提供的能力

            小程序支持通过【消息模板】向“订阅消息”的用户推送消息通知!

    • 支持向主动“订阅消息”的用户推送通知(注意:这里是“订阅消息”而非订阅小程序),不支持主动向未订阅消息用户推送通知
    • 支持通过【消息模板】发送“订阅消息”,不支持发送任意无模板消息;
    • 一般小程序不支持自定义消息模板(目前自定义消息模板功能已废弃,暂不确定哪些类型小程序或仍可自定义消息模板,有哪些方面的限制)
    • 一般小程序仅支持从官方提供的公共模板库中选择【消息模板】
    • 一般小程序仅可支持发送“一次性订阅消息”,即“一次订阅,一次推送”
    • 目前仅公共服务类小程序可支持发送“长期订阅消息”,即“一次订阅,长期推送”

    1、订阅消息能力

    小程序订阅消息 | 微信开放文档

     2、三种消息类型

    由于长期订阅目前仅面向公共服务开放,如此我等普通小程序就只能选择一次性订阅了!

     3、不支持自定义模板

    1)自定义消息模板接口已废弃

     2)不支持新建自定义模板

    三、订阅消息的实现流程分析

    1、实现步骤

    小程序订阅消息 | 微信开放文档

    2、完整流程

            实现发送订阅消息,首先需要配置消息模板、获取小程序的appkey、secret、用户openid、token等,因此,从0到1的完整实现流程如下:

    四、一次性订阅消息的实现及示例

    1、配置消息模板+获取appid+secret

    链接:微信公众平台

     1)配置消息模板

    2)获取appid + secret

    2、登录认证并获取openid

     小程序登录 | 微信开放文档

     

    1)获取code

    wx.login(Object object) | 微信开放文档

    1. wx.login({
    2. success (res) {
    3. if (res.code) {
    4. //发起网络请求
    5. wx.request({
    6. url: 'https://example.com/onLogin',
    7. data: {
    8. code: res.code
    9. }
    10. })
    11. } else {
    12. console.log('登录失败!' + res.errMsg)
    13. }
    14. }
    15. })

    2)获取openid

    auth.code2Session | 微信开放文档

    GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    

    3、订阅消息

     wx.requestSubscribeMessage(Object object) | 微信开放文档

    1. wx.requestSubscribeMessage({
    2. tmplIds: [''],
    3. success (res) { }
    4. })

    4、获取token

    auth.getAccessToken | 微信开放文档

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

    5、发送订阅通知

    subscribeMessage.send | 微信开放文档

    1. POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
    2. Accept: */*
    3. Cache-Control: no-cache
    4. Content-Type: application/json;charset=UTF-8
    5. {
    6. "touser": "OPENID",
    7. "template_id": "TEMPLATE_ID",
    8. "page": "index",
    9. "miniprogram_state":"developer",
    10. "lang":"zh_CN",
    11. "data":{
    12. "character_string1":{
    13. "value":"FK20220819001"
    14. },
    15. "phrase2":{
    16. "value":"审批通过"
    17. },
    18. "time3":{
    19. "value":"2022年08月19日 15:01"
    20. },
    21. "thing4":{
    22. "value":"领导同意了"
    23. }
    24. }
    25. }

    注意:data数据的key与消息模板定义一致

    6、示例

    四、链接

    微信公众平台

    小程序订阅消息 | 微信开放文档

    小程序登录 | 微信开放文档

    wx.login(Object object) | 微信开放文档

    auth.code2Session | 微信开放文档

    wx.requestSubscribeMessage(Object object) | 微信开放文档

    auth.getAccessToken | 微信开放文档

    subscribeMessage.send | 微信开放文档


     

  • 相关阅读:
    数据库分析与优化
    异步DNS的实现
    【从头构筑C#知识体系】1.8 语句
    深度学习 神经网络(4)线性回归-Pytorch实现房价预测
    SystemVerilog语法中,在Class中引用层次化信号
    前端 CSS 经典:边框转圈动画效果
    01测试基础
    力扣刷题61-旋转链表
    加入推动辅助的机器人智能抓取
    1.1数据结构的基本概念
  • 原文地址:https://blog.csdn.net/blue225/article/details/126430746
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号