微信小程序开发--4.3订阅消息

news2024/11/27 0:14:51

 首先在微信公众平台登录相应的微信小程序,左侧导航栏找到功能,点进去订阅消息,点击开通,点击选用,在公共模板库中选用订阅消息的模板。

js

wx.requestSubscribeMessage({
        tmplIds:['aDRNef2_ty37dXyqVXyUADSyO8BXOZRWYiHie4sReUc'],// 最多支持3条
        success(res) {
          // 'accept'表示用户同意订阅该条id对应的模板消息
          if (res['aDRNef2_ty37dXyqVXyUADSyO8BXOZRWYiHie4sReUc'] === 'accept') {
            // 用户同意订阅,调用云函数或服务器接口发送订阅消息
            wx.request({
              url: 'https://api3-dev.qinghansoft.com/api/xl-message-subscribeUser',
              data: {
                openid:wx.getStorageSync('openid'),
              },
              success(res) {
                console.log('订阅消息成功', res)
              },   
              fail(err) {
                console.error('订阅消息失败', err)
              }
            })
          }
        }
 })

 tmplIds就是模板ID。

 wx.request里的API

import logging 
import azure.functions as func
import json
import mysql.connector
import datetime
import os
import requests
import time
from datetime import date

def main(req: func.HttpRequest) -> func.HttpResponse:
        date=str(datetime.date.today())
        appid=''#对应小程序的appid
        appsecret=''#对应小程序的appsecret
        payload = {
        'appid': appid,
        'secret': appsecret,    
        'grant_type':'client_credential',     
        }
        r = requests.get('https://api.weixin.qq.com/cgi-bin/token',params=payload)
        resJSON= r.json()
        access_token=resJSON['access_token']
        openid = req.params.get('openid')
        template_id = req.params.get('template_id')# 获取用户订阅的模版消息id
        data = {
            "touser":openid,#用户的openid
            "template_id":template_id,#模板ID
            "page":"index",
            "miniprogram_state":"formal",
            "lang":"zh_CN",
            "data": {
                "thing1": {"value": "理疗卡"},
                "time3": {"value": date}
            }
        }
        payload2 = {
              'access_token': access_token
            }  
        p = requests.post('https://api.weixin.qq.com/cgi-bin/message/subscribe/send',params=payload2,data=json.dumps(data))
        return func.HttpResponse(access_token,status_code=200)

先用https://api.weixin.qq.com/cgi-bin/token拿到小程序的access_token(两小时过期),然后用https://api.weixin.qq.com/cgi-bin/message/subscribe/send向对应用户发送订阅信息,注意传递的data中的data要与模板详情里的详细内容相对应。

appid、appsecret在微信公众平台的设置里面查看。

参考文档:发送订阅消息 | 微信开放文档(注意必填项)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手撕双链表

> 作者简介:დ旧言~,目前大一,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 望小伙伴们点赞👍收藏✨加关注哟💕&#x1…

3D视觉到三维视觉之结构光

3D视觉是计算机视觉的终极体现形式 2D视觉技术主要在二维空间下完成工作,三维信息基本上没有得到任何利用,而三维信息才真正能够反映物体和环境的状态,也更接近人类的感知模式。近年来,学术界和工业界推出了一系列优秀的算法和产…

【【萌新的RISC-V学习之再看计算机组成与设计大收获总六】】

萌新的RISC-V学习之再看计算机组成与设计大收获总六 我们在进行设计的时候首先要明白一点 就是 确定我们的设计所需要的 指令的大小和 地址的大小 指令集是32位的 而 地址则一般更多的是64位 数据也是64位 PC与指令寄存器之间的关系 PC是用来保存当前指令的地址。假设地址是0…

Huggingface遇到 Couldn‘t reach xxx on the Hub (ConnectionError)解决方法

文章目录 遇到的问题解决方法参考 遇到的问题 使用服务器下载Huggingface的数据集,显示ConnectionError: Couldn’t reach ‘Salesforce/dialogstudio’ on the Hub (ConnectionError) 具体代码如下: dataset load_dataset("Salesforce/dialogs…

Scanner类用法(学习笔记)

Scanner类用法(学习笔记,后续会补充) 1.next()用法 package com.yushifu.scanner; import java.util.Scanner;//util java工具包 //Scanner类(获取用户的输入) Scanner s new Scanner&#…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建: 进入 $otter_home/lib 目录执行:bash install.sh 打包: 进入$otter_home目录执行:mvn clean install -Dmaven.test.skip -Denvrelease发布包位置:$otter_home/target 项目背景 阿里…

【量化交易】151个量化交易策略解析

我又来推书了~ 今天分享的这本书,量化交易领域的同学们肯定喜欢(doge),它就是Zura Kakushadze大佬(“Alpha101”作者)撰写的《151 Trading Strategies》。(文末领) 《151 Trading …

创建对象内存分析

package com.mypackage.oop.demo03;public class Pet {String name;int age;//无参构造public void shout(){System.out.println("叫了一声");} }package com.mypackage.oop.demo03;public class Application03 {public static void main(String[] args) {Pet dog n…

vue中el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案 使用强制提前加载dialog方法

问题描述 在没有进行任何操作的时候,使用 this.$refs.xxxx 无法获取el-dialog中的内部元素,这个问题会导致很多bug,其中目前网络上也有许多关于这个问题的解决方案,但是大多数是使用el-dialog中的open在dialog打开的时候使用thi…

typescript类型详解

typescript类型概述 typescript是JavaScript的超集,ts提供了js所有的功能.并且额外增加了:类型系统 所有的js代码都是ts代码js有类型(比如,number/string等),但是js不会检查变量的类型是否发生变化,而ts会检查.ts类型系统的主要优势为:可以显示标记出代码中的意外行为,从而降…

spi协议精讲

spi 总线是一种 高速的、全双工,同步串行总线,有四根线MISO MOSI SCLK CS 2.通信过程 3.极性和相位 因为没有像iic一样规定上升沿还是下降沿发送数据,spi的通信取决于极性和相位,因此有四种工作模式 CPHA0 表示SCK 第一个边沿时&…

Jetpack Compose 介绍和快速上手

Compose版本发展 19年,Compose在Google IO大会横空出世,大家都议论纷纷,为其前途堪忧。 21年7月Compose 1.0的正式发布,却让大家看到了Google在推广Compose上的坚决,这也注定Compose会成为UI开发的新风向。 23年1月…

基于springboot+vue的便利店信息管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

IDEA最新激 20活23码

人狠话不多 大家好,最近Intelli Idea官方的校验规则进行了更新,之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家,希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…

所有字母异位词

class Solution { public:vector<int> findAnagrams(string s, string p) {std::vector<int> idxs;// 先获取p的hash串std::string dstr getHash(p);for (int i 0; i<s.length(); i) {// 使用滑动窗口&#xff0c;每次截取p的长度串并hashstd::string sub_str…

【Shiro】基本使用

1、环境准备 1、Shiro不依赖容器&#xff0c;直接创建maven工程即可 2、添加依赖 <dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.9.0</version></depen…

华为云云耀云服务器L实例评测|部署宝塔及使用宝塔管理服务器

在昨天的文章中,我们了解了一些关系实例的概念性的东西,并且购买了服务器,然后登录上后进行了简单的操作,今天我将会按照官网给出的教程,进行部署宝塔及使用宝塔对服务器进行管理的实践,那么 就让我们开始吧! 第一步:购买华为云云耀云服务器L实例 这个可以参考我的上一篇文章,…

关于医疗器械的检测认证

医疗器械注册审评流程&#xff1f; 【每日分享23.7.27】医疗器械产品注册申报流程&#xff08;超详细版&#xff09;之注册申报受理及审评审批 - 知乎 (zhihu.com) 医疗器械注册审评流程&#xff08;附图&#xff09;_申报_咨询_机构 (sohu.com) 型式试验&#xff1f; 型式试验…

Python 图形化界面基础篇:获取文本框中的用户输入

Python 图形化界面基础篇&#xff1a;获取文本框中的用户输入 引言 Tkinter 库简介步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建文本框步骤4&#xff1a;获取文本框中的用户输入步骤5&#xff1a;启动 Tkinter 主事件循环 完整…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年5月scratch编程等级考试四级真题 选择题(共10题,每题2分,共50分) 1、下列积木运行后的结果是 (说明:逗号后面无空格) A、我 B、爱 C、中 D、国 答案:B 考点分析:考查字符串相关积木的使用,逗号也是一个字符,所以两个连起来后第8个字符就是爱字,答案…