小程序开发:Java 小程序生成带参二维码

开会的时候突然说了一句需求更变。。要求把普通二维码改成小程序带参二维码。。当时听完一脸懵逼的我。。。无奈。。第一次写小程序生成二维码。。一点头绪没有。。然后就。。去看官方文档。。额。。看得似懂非懂。。尴尬!!。。不说了。。直接看代码吧。。唉。。过程很曲折。。结局很美好。。还有注意。。我下文中踩过的坑!!一定要注意!!( 代码可直接复制粘贴使用 )

因为我接到的需求是,写一个代参的小程序码,这里我们就只贴出来了用到的 API 文档,详情请查看文档:

获取小程序码 API 文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html

这里需要注意的是:

至于啥是接口A…算了。。贴出来吧。。

接口 A :

适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,数量限制就上图…额…上上图

接口 B :

适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制

!!!这里我们用的是接口 B !!!直接进入正题!!!

首先获取 access_token :

咋获取。。额。。就是。。个人理解。。appid 和 secret 一拼就是 access_token 。。仅限个人理解哈!!

获取 access_token API 文档 :https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

这里我们用到这两个。。我也就只认识这两个。。咳咳

这个地方的请求方式 是 GET 方式 ,千万注意它的请求方式。。额。。GET 也是默认请求方式,官方文档有!

代码段:

/**

  • @param 用于获取access_token

  • @param apiKey 小程序id

  • @param secretKey 小程序密钥

  • @return access_token

  • @throws Exception

*/

public static String postToken() throws Exception {

String apiKey = “”;//小程序id

String secretKey = “”;//小程序密钥

String requestUrl = “https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=”+apiKey+“&secret=”+secretKey;

URL url = new URL(requestUrl);

// 打开和URL之间的连接

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// 设置通用的请求属性

connection.setRequestProperty(“Content-Type”, “application/json”);

connection.setRequestProperty(“Connection”, “Keep-Alive”);

connection.setUseCaches(false);

connection.setDoOutput(true);

connection.setDoInput(true);

// 得到请求的输出流对象

DataOutputStream out = new DataOutputStream(connection.getOutputStream());

out.writeBytes(“”);

out.flush();

out.close();

// 建立实际的连接

connection.connect();

// 定义 BufferedReader输入流来读取URL的响应

BufferedReader in = null;

if (requestUrl.contains(“nlp”))

in = new BufferedReader(new InputStreamReader(connection.getInputStream(), “GBK”));

else

in = new BufferedReader(new InputStreamReader(connection.getInputStream(), “UTF-8”));

String result = “”;

String getLine;

while ((getLine = in.readLine()) != null) {

result += getLine;

}

in.close();

JSONObject jsonObject = JSON.parseObject(result);

String accesstoken=jsonObject.getString(“access_token”);

return accesstoken;

}

这个时候如果你 ID 和 密钥 没错的话应该就能获取到 access_token 了

然后就是拿着我们的 access_token 去获取。。正主了!!!

注意这个地方的请求方式是 post !!!如果不转换提交方式会报错 43002

请求成功返回的是二进制数据,失败则返回 JSON 。。注意解析 JSON 查看错误码

详细请查看 API 文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/getWXACodeUnlimit.html

参数啥的我就不说了。。看文档。。我是来记录踩得坑的!!

代码段:

/**

  • 生成带参小程序二维码

  • @param scene 要输入的内容

  • @param accessToken token

*/

public static void postMiniqrQr(String scene, String accessToken) {

try{

URL url = new URL(“https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=”+accessToken);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

// conn.setConnectTimeout(10000);//连接超时 单位毫秒

// conn.setReadTimeout(2000);//读取超时 单位毫秒

// 发送POST请求必须设置如下两行

httpURLConnection.setDoOutput(true); // 打开写入属性

httpURLConnection.setDoInput(true); // 打开读取属性

httpURLConnection.setRequestMethod(“POST”);// 提交方式

// 不得不说一下这个提交方式转换!!真的坑。。改了好长时间!!一定要记得加响应头

httpURLConnection.setRequestProperty(“Content-Type”, “application/x-javascript; charset=UTF-8”);// 设置响应头

// 获取URLConnection对象对应的输出流

PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());

// 发送请求参数

JSONObject paramJson = new JSONObject();

paramJson.put(“scene”, scene); // 你要放的内容

paramJson.put(“path”, “pages/index/index”);

paramJson.put(“width”, 430); // 宽度

paramJson.put(“auto_color”, true);

printWriter.write(paramJson.toString());

// flush输出流的缓冲

printWriter.flush();

BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());

//创建一个空文件

OutputStream os = new FileOutputStream(new File(“C:/test/test.jpg”));

//ByteArrayOutputStream os = new ByteArrayOutputStream();

int len;

byte[] arr = new byte[1024];

while ((len = bis.read(arr)) != -1)

{

os.write(arr, 0, len);

os.flush();

}

os.close();

// 上传云储存

//InputStream is = new ByteArrayInputStream(os.toByteArray());

//retMap = UploadUtils.upload(is);

}

catch (Exception e)

{

e.printStackTrace();

}

}

重点标记一下!!!!加响应头!!!响应头!!!响应头!!!坑死我了。。百度了很久才找到一个正确的。。东拼西凑。。唉。。闹心。。对了。。关于小程序的错误码:https://www.cnblogs.com/lonhon/p/9660726.html 。。。至于为什么贴这个你们懂得。。哈哈

测试方法:

public static void main(String[] args) throws Exception {

String accessToken = postToken();
System.out.println(“获取的accessToken:”+accessToken);
postMiniqrQr(“要放进去的东西”,accessToken);
}
想想还缺啥。。好像不缺了吧。。应该不缺了。。本文仅限于记录个人经历!!!欢迎各位大佬指教!!

最后

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取
程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-hWLV9YPU-1719685235602)]

[外链图片转存中…(img-UK7KHOdn-1719685235603)]

[外链图片转存中…(img-Yq52F3VI-1719685235604)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java生成带参数的小程序二维码,可以使用第三方库或者API来实现。以下是一种可能的方法: 首先,你需要选择一个适合的二维码生成库。在这里,我们以Zxing库为例进行说明。你可以在Maven中添加对Zxing库的依赖,然后在Java项目中使用它。 接下来,你需要创建一个字符串,以包含带参数的小程序链接。例如,你可以将参数附加到小程序链接的末尾,如下所示:https://xxx.xxx.xxx?param1=xxx&param2=xxx。请根据你的具体需求自行替换链接和参数。 然后,你可以使用Zxing库生成带参数的小程序二维码。以下是一个代码示例: ```java import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class QrCodeGenerator { public static void main(String[] args) { String content = "https://xxx.xxx.xxx?param1=xxx&param2=xxx"; // 替换为你的带参小程序链接 int width = 300; int height = 300; try { BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height); BufferedImage qrCodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { qrCodeImage.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB()); } } File outputFile = new File("qr_code.jpg"); // 保存二维码的文件名和路径 ImageIO.write(qrCodeImage, "jpg", outputFile); } catch (WriterException | IOException e) { e.printStackTrace(); } } } ``` 运行上述代码后,它将生成一个名为"qr_code.jpg"的图像文件,其中包含带参数的小程序二维码。 当然,以上只是一种实现方法,你也可以使用其他类库或API来生成带参数的小程序二维码。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值