当前位置: 首页 > news >正文

微信生成带参数二维码(用户id), 扫码可获取用户id

生成带参数的二维码: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html

示例代码: 

    /*** 生成带参数的二维码** @param userId    用户id* @return*/@GetMapping@RequestMapping("/createTicket/{userId}")public AjaxResult createTicket(@PathVariable Long userId){String ossUrl = ticketService.createTicket(userId);Map<String, String> map = new HashMap<>();map.put("ossUrl", ossUrl);return AjaxResult.success("操作成功", map);}

    /*** 生成带参数的二维码** @param userId    用户id* @return*/@Overridepublic String createTicket(Long userId) {if (userId == null) {userId = 0L;}String url = String.format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=%s",SpringUtils.getBean(AccessTokenUtils.class).getAccessToken());// 生成永久二维码String data = String.format("{\"action_name\": \"QR_LIMIT_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": %d}}}", userId);// 发送POST请求获取ticketRestTemplate restTemplate = new RestTemplate();// {"ticket":"gQGi8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyNGN1TzRPaU5jSkgxMDAwMHcwMzUAAgRoga9lAwQAAAAA","url":"http:\/\/weixin.qq.com\/q\/024cuO4OiNcJH10000w035"}String ticketResponse = restTemplate.postForObject(url, data, String.class);// 解析ticketJSONObject jsonObject = JSONObject.parseObject(ticketResponse);String ticket = jsonObject.getString("ticket");//  根据ticket获取二维码图片URLString ticketUrl = String.format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s", ticket);// 上传ossString ossUrl = ossUtils.strToInputStreamUpload(ticketUrl);log.info("生成的带参数二维码URL:" + ossUrl);return ossUrl;}

扫码接收事件推送:
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html

示例代码: 

    /*** 接收用户消息并回复消息** @param request       xml内容* @return              xml格式的字符串*/@PostMapping("/validateWeChatServer")public String receiveMessage(HttpServletRequest request) {return weChatService.receiveMessage(request);}

  /*** 接收用户消息并回复消息** @param request       xml内容* @return              xml格式的字符串*/@Overridepublic String receiveMessage(HttpServletRequest request) {ServletInputStream inputStream = null;try {inputStream = request.getInputStream();HashMap<String, String> map = new HashMap<>();SAXReader reader = new SAXReader();try {// 读取request输入流, 获取Document对象Document document = reader.read(inputStream);// 获取root节点Element root = document.getRootElement();// 获取所有的子节点List<Element> elements = root.elements();for (Element element : elements) {map.put(element.getName(), element.getText());}log.info("接收到的用户消息: {}", map);} catch (DocumentException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}// 关注用户, 保存到数据库ResUser user = SpringUtils.getBean(IResUserService.class).attentionMedia(map.get("FromUserName"));// 回复消息String message = getReplyTextMessage(map, user);log.info("回复消息: {}", message);return message;} catch (IOException e) {e.printStackTrace();}return null;}

private String getReplyTextMessage(HashMap<String, String> map, ResUser user) {// 未关注用户时Event=subscribe, EventKey=qrscene_4(事件KEY值,qrscene_为前缀,后面是自定义的用户id)// 获取 "qrscene_" 后面的值Long userId = Long.valueOf(map.get("EventKey").substring("qrscene_".length()));// TODO}

接收到的用户消息: {Ticket=gQFC8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyaWplQzQzaU5jSkgxMDAwME0wM3oAAgR6r7BlAwQAAAAA, CreateTime=1706078168, EventKey=qrscene_4, Event=subscribe, ToUserName=gh_da9c697c8555, FromUserName=oUjEt6xFAs2ABHsmLyJeSUe-WVXI, MsgType=event}

相关文章:

微信生成带参数二维码(用户id), 扫码可获取用户id

生成带参数的二维码: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 示例代码: /*** 生成带参数的二维码** param userId 用户id* return*/GetMappingRequestMapping("/createTicket/{userId}")pu…...

微信小程序(二十一)css变量-定义页面主题色

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码&#xff1a; npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…...

WSL2 Debian系统添加支持SocketCAN

本人最近在使用WSL2&#xff0c;Linux系统选择的是Debian&#xff0c;用起来很不错&#xff0c;感觉可以代替VMware Player虚拟机。 但是WSL2 Debian默认不支持SocketCAN&#xff0c;这就有点坑了&#xff0c;由于本人经常要使用SocketCAN功能&#xff0c;所以决定让Debian支持…...

Redis的五种常用数据结构以及其底层实现

1.字符串 字符串作为Redis中最基础的数据结构&#xff0c;他存储的值可以是任何东西&#xff0c;可以是字符串&#xff0c;数字&#xff0c;二进制&#xff0c;但是字符串存储的值不能超过512M 在Redis中字符串的底层编码是根据值进行改变的 当存储的字符串是一个数字的时候…...

防御保护笔记

防火墙的主要职责在于&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作。 防火墙分类&#xff1a; 包过滤防火墙&#xff1a; 1&#xff0c;很多安全风险集中在应用层的&#xff0c;所以&#xff0c;仅关注三四层的数据无法做到…...

C++笔记之作用域解析符::和命名空间、作用域的关系

C++笔记之作用域解析符::和命名空间、作用域的关系 —— 杭州 2024-01-26 code review 文章目录 C++笔记之作用域解析符::和命名空间、作用域的关系1.`命名空间`和`作用域`两个术语的联系和区别命名空间(Namespace)作用域(Scope)联系与区别2.`作用域解析符::`和`命名空间`…...

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)

回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 <...

linux安装 黑方容灾备份与恢复系统软件v6.0 代理

1.环境准备 1.1硬件环境 内存>4G&#xff0c;cpu最低双核 1.2把SElinux状态改为Disabled &#xff08;1&#xff09;查看SElinux状态 输入getenforce命令 SELinux共有3个状态&#xff1a; enforcing &#xff08;执行中&#xff09;、permissive &#xff08;不执行但…...

STM32第一节——初识STM32

1 硬件介绍 1.1 硬件平台 配套硬件&#xff1a;以野火的STM32 F1霸道开发板为平台&#xff0c;若用的是别的开发板&#xff0c;可自己进行移植。 1.2 什么是STM32 STM32是由意法半导体&#xff08;STMicroelectronics&#xff09;公司推出的一系列32位的ARM Cortex-M微控制…...

多场景建模:美团HiNet

HiNet: Novel Multi-Scenario & Multi-Task Learning with Hierarchical Information Extraction 背景&#xff1a; 美团的多场景多任务&#xff08;ctr、ctcvr&#xff09; 解决方案 通过分层来分别学习多场景多任务 方案详情 点评&#xff1a;在底层Embedding时用…...

第二百九十三回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取图片文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …...

【网络协议分析】使用Wireshark分析UDP协议

一、实验目的 通过使用Wireshark抓取UDP流来分析学习UDP协议&#xff0c;比较TCP与UDP的不同。 二、实验过程 1、使用Wireshark抓取UDP报文流&#xff0c;常见的使用UDP协议的应用有DNS、QQ、在线游戏等。 2、分析抓取到的数据包&#xff0c;比较与TCP协议的异同。 我们选取DN…...

TensorFlow Lite中文本分类在Android上的实践

#1 Tensorflow Lite TensorFlow Lite(后续简称TFL) 是 Google 开发的一个用于移动设备和嵌入式设备的开源库,旨在为移动终端设备提供机器学习推断。它是 TensorFlow 框架的轻量级版本,专门优化了模型的大小和性能,以适应资源受限的移动设备和嵌入式系统。 TFL 提供了一种在移…...

使用vscode查bug

具体操作 修改CMakeList.txt # set(CMAKE_BUILD_TYPE "Release")//注释Release模式 set(CMAKE_BUILD_TYPE "Debug")//设置为Debug模式 # set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")//注释*这行代码是用来设置 CMake 构建系统中 Release 模式…...

LC 2846. 边权重均等查询

2846. 边权重均等查询 难度&#xff1a; 困难 题目大意&#xff1a; 现有一棵由 n 个节点组成的无向树&#xff0c;节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ui, vi, wi] 表示树中存在一条位于节点 …...

RabbitMQ简单模式和工作模式

RabbitMQ 是一个消息队列中间件&#xff0c;用于在分布式系统中进行消息传递。在 RabbitMQ 中&#xff0c;有几种工作模式&#xff0c;其中简单模式和工作模式是其中两种基本的模式之一。 简单模式&#xff08;Simple Mode&#xff09;&#xff1a; 在简单模式中&#xff0c;有…...

c语言实战之贪吃蛇

文章目录 前言效果展示游戏用到的图片游戏思路一览游戏前准备一、贪吃蛇、食物、障碍物节点坐标的结构体二、枚举游戏状态、和贪吃蛇的方向三、维护运行的结构体 游戏开始前的初始化一、学习图形库相关知识二、设置背景三、欢迎界面四、初始化贪吃蛇五、生成障碍物六、生成食物…...

Midjourney图片生成描述词记录(今天一天)

抄别人的描述词 /imagine prompt:https://&#xff08;你的图片地址&#xff09;.jpg Super handsome boy IP by pop mart , green suit, no hair, bald head, Scenes in spring , pastel color , mockup , fine luster , clean background ,3D render , Soft focus , oc , bl…...

类和对象 第五部分第四小节:赋值运算符重载

C编译器至少给一个类添加4个函数 1.默认构造函数无参&#xff0c;函数体为空 2.默认析构函数无参&#xff0c;函数体为空 3.默认拷贝沟早函数&#xff0c;对属性进行值拷贝 4.赋值运算符“operator”&#xff0c;对属性进行值拷贝 如果类中有属性指向堆区&#xff0c;做赋值操作…...

Django从入门到精通(一)

目录 一、Django环境搭建与命令 1.1、安装 1.2、命令行 创建项目 编写代码 运行 app概念 1.3、Pycharm创建项目 1.4、虚拟环境 创建虚拟环境 - 命令行 介绍 操作 基本问题 Pycharm 项目虚拟环境 django虚拟环境【安装django最新版本】 django虚拟环境【安装指…...

数据库分表分库的原则

什么是数据库分库分表 数据库分表&#xff08;Table Sharding&#xff09; 数据库分表是将一个大表按照某种规则拆分成多个小表存储在不同的物理表中的技术。通常&#xff0c;拆分规则是基于某个列的值进行拆分&#xff0c;例如根据用户ID或日期范围等进行拆分。每个小表只包…...

Java技术栈 —— Docker容器

Java技术栈 —— Docker容器 一、什么是Docker&#xff1f;二、如何安装Docker&#xff1f;三、如何使用Docker&#xff1f; 一、什么是Docker&#xff1f; docker的本意是码头工人。 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个…...

Mysql大数据量分页优化

前言 之前有看过到mysql大数据量分页情况下性能会很差&#xff0c;但是没有探究过它的原因&#xff0c;今天讲一讲mysql大数据量下偏移量很大&#xff0c;性能很差的问题&#xff0c;并附上解决方式。 原因 将原因前我们先做一个试验&#xff0c;我做试验使用的是mysql5.7.2…...

QT tcp与udp网络通信以及定时器的使用 (7)

QT tcp与udp网络通信以及定时器的使用 文章目录 QT tcp与udp网络通信以及定时器的使用1、QT网络与通信简单介绍2、QT TCP通信1、 服务器的流程2、 客户端的流程3、服务器的编写4、客户端的编写 3、QT UDP通信1、客户端流程2、客户端编写3、UDP广播4、UDP组播 4、定时器的用法1、…...

web架构师编辑器内容-添加自动保存的功能

对于频繁改动的应用&#xff0c;自动保存的功能是一个非常有用的功能&#xff0c;可以避免用户在没有保存的情况下丢失自己保存过的数据。 对于自动保存&#xff0c;一般有两种实现&#xff0c;参考语雀和石墨&#xff1a; 语雀采用的是定时保存的方式&#xff0c;大约在3分半…...

【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?

目录 1.既然redis那么快&#xff0c;为什么不用它做主数据库&#xff0c;只用它做缓存&#xff1f; 2.Redis 一般在什么场合下使用&#xff1f; 3.redis为什么这么快&#xff1f; 4.Redis为什么要引入了多线程&#xff1f; 1.既然redis那么快&#xff0c;为什么不用它做主数据…...

SpringBoot之JWT登录

JWT JSON Web Token&#xff08;JSON Web令牌&#xff09; 是一个开放标准(rfc7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任&#xff0c;因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法…...

【备战蓝桥杯】——循环结构

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-bFHV3Dz5xMe6d3NB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…...

探索Pyecharts关系图绘制技巧:炫酷效果与创意呈现【第42篇—python:Pyecharts水球图】

文章目录 Pyecharts绘制多种炫酷关系网图引言准备工作代码实战1. 基本关系网图2. 自定义节点样式和边样式3. 关系网图的层级结构4. 添加标签和工具提示5. 动态关系网图6. 高级关系网图 - Les Miserables 示例7. 自定义关系网图布局8. 添加背景图9. 3D 关系网图10. 热力关系网图…...