文章目录
- 前言
- 一、参数二维码的作用
- 二、功能实现
- 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实现微信公众号直接发送参数二维码给用户。有疑问的地方,欢迎下方留言讨论哦,或者想获取更完整的代码可关注下面公众号与我直接联系。更多公众号开发的精彩内容,即将呈现。