Java微信公众号开发之创建带参数二维码

生成带参数二维码接口文档:生成带参数二维码

一、介绍

1.1、目前有2种类型的二维码:

1. 临时二维码:临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量,主要用于帐号绑定等不要求二维码永久保存的业务场景
2. 永久二维码:永久二维码,是无过期时间的,但数量较少(目前为最多10万个),主要用于适用于帐号绑定、用户来源统计等场景

1.2、获取带参数的二维码有两种方式:

 1. 如何获取:先获取二维码ticket,然后凭借ticket通过接口换取二维码图片,但是得到ticket之前首先得获取微信全局唯一接口调用凭据,根据微信返回二维码中url参数自行生成二维码

 2. 二维码参数类型:

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),分别介绍临时二维码和永久二维码的创建二维码ticket 过程。

参数可以是整型scene_id,也可以是字符串类型scene_str两种,区别如下:

### Java 处理微信公众号带参数二维码URL并转换保存为图片 #### 创建二维码Ticket 为了从微信服务器获取带参数二维码,首先需要创建一个二维码ticket。这一步骤涉及到向微信公众平台发送HTTP POST请求来获得有特定场景值的二维码ticket。 ```java import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class WeChatQrCodeUtil { private static final String CREATE_QR_CODE_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN"; public static String createQRCodeTicket(String accessToken, int sceneId) throws Exception { OkHttpClient client = new OkHttpClient(); RequestBody body = new FormBody.Builder() .add("action_name", "QR_LIMIT_SCENE") // 或者 QR_SCENE 如果是临时二维码 .add("scene_id", String.valueOf(sceneId)) .build(); Request request = new Request.Builder() .url(CREATE_QR_CODE_URL.replace("ACCESS_TOKEN", accessToken)) .post(body) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); ObjectMapper mapper = new ObjectMapper(); Map<String, Object> responseBodyMap = mapper.readValue(response.body().string(), HashMap.class); return (String) responseBodyMap.get("ticket"); } } } ``` 这段代码展示了如何构建POST请求以创建一个新的二维码ticket[^2]。 #### 使用Ticket换取二维码图像数据 一旦获得了有效的`ticket`,就可以利用它去交换实际的二维码图像。通常情况下,这个过程不需要额外的身份验证,因为ticket本身已经包含了必要的授权信息。 ```java import java.io.InputStream; import java.net.URL; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; public BufferedImage getQRCodeImageFromTicket(String ticket) throws Exception { URL qrImageUrl = new URL("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + URLEncoder.encode(ticket)); InputStream inputStream = null; try { HttpURLConnection connection = (HttpURLConnection)qrImageUrl.openConnection(); connection.setRequestMethod("GET"); inputStream = connection.getInputStream(); return ImageIO.read(inputStream); // 返回BufferedImage对象以便后续操作 } finally { if (inputStream != null) { inputStream.close(); } } } ``` 上述函数接收一个`ticket`作为输入,并返回代表二维码图案的一个`BufferedImage`实例[^3]。 #### 将二维码图像保存至文件系统 最后一步就是把得到的二维码图像存储下来。可以使用标准库中的工具类完成这项工作: ```java import java.nio.file.Paths; import java.nio.file.Path; import java.io.File; public void saveQRCodeToFile(BufferedImage image, Path outputPath) throws IOException { File outputfile = new File(outputPath.toString()); ImageIO.write(image, "png", outputfile); } ``` 通过这种方式,能够有效地将来自微信API的二维码转化为本地磁盘上的PNG格式文件[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinkingcao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值