Java实现微信公众号直接发送参数二维码给用户

news2024/11/19 18:21:11

文章目录

  • 前言
  • 一、参数二维码的作用
  • 二、功能实现
    • 1. 生成带参数二维码
    • 2. 上传二维码图片
    • 3. 发送带参数二维码给用户
  • 总结


前言

公众号开发近些年是一个比较热门的方向,今天为大家讲解的是用Java如何实现自动生成二维码图片,有如何把这个和用户信息单独绑定的二维码图片直接发送给用户。

在这里插入图片描述

有了参数二维码,可以做很多事情,比如公众号关注的来源统计和用户强相关的网页展示推送,另外直接将二维码发给用户,也对一些流量转化有着更加直接的帮助。 今天本片文章从参数二维码的意义入手再到如何通过代码实现发送参数二维码给到用户进行逐步剖析。喜欢记得收藏关注哟。


一、参数二维码的作用

微信参数二维码是一种特殊的二维码,通过微信公众号后台生成,在扫描后会自动带上一些参数信息,这些参数信息可以被开发者读取并进行相应的处理。

微信参数二维码的作用主要有以下几个方面:

  • 带参数关注公众号:开发者可以在二维码中加入特定的参数信息,用户扫描后就可以直接关注公众号,并附带对应的参数信息。

  • 带参数扫码支付:商户可以在二维码中加入商品、价格等参数信息,用户扫码后就可以直接进行支付。

  • 跳转到指定页面:开发者可以在二维码中加入链接地址,用户扫描后就可以直接跳转到对应的页面。

  • 统计扫描量:微信公众号后台提供了扫描统计功能,开发者可以通过二维码参数来统计扫描量,了解宣传效果。

微信参数二维码是一种方便快捷的推广和交互工具,在公众号运营和商户营销中得到了广泛的应用。

二、功能实现

本文章用到的主要类包是com.github.binarywang:weixin-java-mp:3.3.0,大家需要在maven或者gradle里面提前加入包依赖。实现发送参数二维码的步骤是,先生成一个参数二维码,然后把它上传到公众号后台,api会返回一个mediaId,然后把mediaId带着,通过sendCustomMessage方法就可以发送给用户了。具体核心代码如下步骤。

1. 生成带参数二维码

参数二维码有临时和永久的两种,永久的有数量限制,一般我们创建临时的就够用了。

WxMpQrCodeTicket qrCodeTicket = wxMpService.getQrcodeService().qrCodeCreateTmpTicket(sceneId, expireSeconds); // 生成临时带参数二维码
String url = wxMpService.getQrcodeService().qrCodePictureUrl(qrCodeTicket.getTicket(), true); // 获取二维码图片URL

说明:

  • sceneId:场景ID,可以是数字或字符串,长度限制为1到64。根据自己的情况命名。
  • expireSeconds:二维码有效时间,单位为秒,最大不超过2592000(即30天)。

2. 上传二维码图片

String SHOW_QRCODE_WX_BASE_URL = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="
String marketQrcode = SHOW_QRCODE_WX_BASE_URL + ticket.getTicket();
String filePath = (new FileUtil()).download(marketQrcode);
String mediaId = wxMpService.getMaterialService().mediaUpload(WxMediaUploadType.IMAGE, new File(filePath)); // 上传二维码图片并获取mediaId

说明:

  • WxMediaUploadType.IMAGE:媒体文件类型为图片。
  • File(url):待上传的文件路径。

上面的new File(filePath),中的filePath是一个本地地址,我们先需要把参数二维码下载到本地进行上传。代码是。

public String download(String remoteFilePath) throws Exception {
        //获取项目路径
        File directory = new File("your file path");
        String path = directory.getCanonicalPath();
        File fileDir =new File(path);
        if(!fileDir.exists()){
            fileDir.mkdirs();
        }

        //设置图片名称,这个随意,我是用的当前时间命名
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
        String date = dateFormat.format(new Date());
        String fileName = date + ".png";

        String filePath = path + "/" + fileName;

        URL urlfile = null;
        HttpURLConnection httpUrl = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        File f = new File(filePath);
        try {
            urlfile = new URL(remoteFilePath);
            httpUrl = (HttpURLConnection) urlfile.openConnection();
            httpUrl.connect();
            bis = new BufferedInputStream(httpUrl.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream(f));
            int len = 2048;
            byte[] b = new byte[len];
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
            }
            bos.flush();
            bis.close();
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return filePath;
    }

3. 发送带参数二维码给用户

WxMpCustomMessage message = WxMpCustomMessage.IMAGE().toUser(openId).mediaId(mediaId).build(); // 构造发送图片消息
wxMpService.getCustomService().sendCustomMessage(message); // 发送消息

说明:

  • openId:接收消息的用户openid。
  • WxMpCustomMessage.IMAGE():构造发送图片消息。
  • mediaId(mediaId):指定要发送的图片的mediaId。

总结

以上就是今天要讲的内容,Java实现微信公众号直接发送参数二维码给用户。有疑问的地方,欢迎下方留言讨论哦,或者想获取更完整的代码可关注下面公众号与我直接联系。更多公众号开发的精彩内容,即将呈现。

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

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

相关文章

Python3数据分析与挖掘建模(12)复合分析-相关分析与实现示例

1. 相关分析 1.1 概述 相关分析是一种统计分析方法,用于研究两个或多个变量之间的关系和相互影响程度。它帮助我们了解变量之间的线性关系、趋势和相关程度。 在相关分析中,常用的指标是相关系数,用于衡量两个变量之间的相关程度。最常见的…

linux 定时任务

可以用非root用户创建定时任务 Linux crontab 是用来定期执行程序的命令。 当安装完成操作系统之后,默认便会启动此任务调度命令。 crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 注意:新创建的 cro…

怎么查询电脑的登录记录及密码更改情况?

源头是办公室公用的电脑莫名其妙打不开了,问别人也都不知道密码是多少 因为本来就没设密码啊!(躺倒) 甚至已经想好了如果是50万想攻破电脑,被po抓住要怎么花这笔钱了 是我想太多 当然最后也没解决,莫名…

27 getcwd 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 获取当前路径 不过 我们这里是从 具体的实现 来看一下 测试用例 就是简单的使用了一下 getcwd rootubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c #inc…

11.DIY可视化-拖拽设计1天搞定主流小程序-小程序首页公告详情页面

小程序首页公告详情页面 本教程均在第一节中项目启动下操作 小程序首页公告详情页面前言一、添加界面,布局1.设定组件样式:数据绑定 二. 新增接口三:绑定公告四.查看效果五.动态参数设置 :之前是指定了公告单条数据2.优化还在那时详情页<p>标签:借助工具查看,清空绑定修改…

【树莓派】树莓派4B镜像安装(使用Raspberry Pi image)

本文主要记录下如何使用Raspberry Pi image 软件进行树莓派镜像进行安装。 官网&#xff1a;Raspberry Pi OS – Raspberry Pi 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1G7z1Fdvk5Chmhj894WPU3A 提取码&#xff1a;xnzw 一、格式化SD卡 若SD卡存在…

【Linux】按键驱动程序

【Linux】按键驱动程序 前言&#xff1a; 一、按键驱动程序的背景知识 1.1 查询方式 1.2 休眠-唤醒方式 1.3 poll方式 1.4 异步通知 1.5 总结 二、按键驱动程序的框架 三、按键驱动程序实战 3.1 头文件&#xff08;button_drv.h&#xff09; 3.2 驱动程序&#xf…

我的开源实践之路!这一路我遇到的困难和收获总结

Datawhale干货 作者&#xff1a;诸葛子房&#xff0c;Datawhale成员 从参与Apache开源项目&#xff0c;到凭借业务需求独自开发个人开源项目&#xff1b;从项目开源出来无人问津到至今500star&#xff0c;多个企业级用户&#xff0c;在开源过程中&#xff0c;我也从走过低谷&a…

Matplotlib的一些总结

plt.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue) 参数说明&#xff1a; 1.num&#xff1a;图像编码或者名称&#xff0c;数字是编码&#xff0c;字符串是名称 2.figsize&#xff1a;宽和高&#xff0c;单位是英尺 3.dpi&#xff1a;指…

chatgpt赋能python:Python怎么取二进制低三位?

Python怎么取二进制低三位&#xff1f; 在Python编程中&#xff0c;处理位运算是一个非常常见的任务。其中&#xff0c;取二进制低三位也是其中的一项操作。那么&#xff0c;如何实现这个操作呢&#xff1f;本篇文章将为大家介绍Python如何取二进制低三位的方法。 什么是二进…

苹果Vision Pro:虚拟现实走进个人计算机未来

一段时间以来&#xff0c;虚拟现实&#xff08;VR&#xff09;这个概念以其无限的潜力吸引了全世界&#xff0c;用户可以进入身临其境的计算机生成的环境中&#xff0c;这些环境通常模糊了数字和物理世界之间的界线。多年来&#xff0c;VR 技术持续以惊人的速度发展&#xff0c…

软考A计划-系统架构师-学习笔记-第三弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

yolov4——你总能在这找到你想要的答案

目录 一&#xff1a;前言 二&#xff1a;一些数据增强的方法 三&#xff1a;自提议 四&#xff1a;dropout 普通的dropout yolov4的dropblock 五&#xff1a;Label smothing 标签平滑 六&#xff1a; GIOU&#xff0c;DIOU&#xff0c;CIOU 七&#xff1a; 对网络结构的…

代码随想录算法训练营第五十五天 | 力扣 392.判断子序列, 115.不同的子序列

392.判断子序列 题目 392. 判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace&quo…

Mysql 经典面试题总结

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Flask+pyecharts实现电影数据分析可视化

之前有写过pyecharts实现电影数据分析可视化和Djangopyecharts实现电影数据分析可视化&#xff0c;但是综合起来感觉还是有缺陷&#xff0c;所以我使用Flaskpyecharts重新整合一下电影数据可视化。 下面是完成后的截图 这应该就算是可视化大屏了吧 文章目录 代码结构index.cs…

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置 1、时钟初始化流程 一般流程为startup_mm32f3273g.s中调用system_mm32f3273g.c中的SystemInit函数完成系统时钟的初始&#xff0c;而system_mm32f3273g.c中函数是空的。 原来MindSdk时钟初始化的流程放到了clock_i…

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统

在国空、村规的实际工作中&#xff0c;将要素类加载到地图中后&#xff0c;需要将图斑的符号系统修改成国空或村规的样式。一般的做法是使用样式库或已经做好的图层文件进行匹配&#xff0c;这个工具要实现的功能是直接应用特定的符号系统&#xff0c;其实用的方法也就是GP工具…

HTMLCSS Day02 CSS简介与选择器

文章目录 1.CSS32.语法2.1.CSS声明&#xff08;CSS declarations&#xff09;2.2.CSS声明块&#xff08; CSS declaration blocks&#xff09;2.3.CSS规则集2.4.CSS可读性- 空白&#xff08; White space&#xff09;- 注释&#xff08; Comments&#xff09;- 速记写法&#x…

【OpenMMLab AI实战营第二期】目标检测笔记

目标检测 目标检测的基本范式 划窗 使用卷积实现密集预测 锚框 多尺度检测与FPN 单阶段&无锚框检测器选讲 RPN YOLO、SSD Focal Loss与RetinaNet FCOS YOLO系列选讲 什么是目标检测 目标检测&#xff1a;给定一张图片&#xff0c;用矩形框框出所有感兴趣物体同…