一、准备工作

  1. 微信公众平台接口调试工具
  2. 小程序的唯一标识(appid)
  3. 小程序的密钥(secret)

二、获取access_token

打开微信公众平台接口调试工具,在参数列表中输入小程序的appid和secret,点击检查问题,如果appid和secret正确,则可以返回正确的access_token结果(图中下方的红框)

三、生成微信小程序二维码

生成小程序二维码官方文档

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

一共有三种生成二维码的方式,可以根据使用场景去选择,这里我使用的是第三种生成方式 wxacode.getUnlimited

wxacode.createQRCode
获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,详见获取二维码。
POST https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN wxacode.get
获取小程序码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,详见获取二维码。
POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN wxacode.getUnlimited
获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。 更多用法详见 获取二维码。
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

使用wxacode.getUnlimited生成小程序二维码

详细信息请参看官方文档
获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。 更多用法详见 获取二维码。
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

  

 说明

通过该接口生成的小程序码,永久有效,数量暂无限制。用户扫描该码进入小程序后,开发者需在对应页面获取的码中 scene 字段的值,再做处理逻辑。使用如下代码可以获取到二维码中的 scene 字段的值。
调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode
// 这是首页的 js
Page({
onLoad: function(options) {
// options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
var scene = decodeURIComponent(options.scene)
}
})

获取接口调用凭证

 1     /**
2 * 接口调用凭证 access_token
3 */
4 public static String postToken(String appId, String appKey) throws Exception {
5
6 String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appKey;
7 URL url = new URL(requestUrl);
8 // 打开和URL之间的连接
9 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
10 connection.setRequestMethod("POST");
11 // 设置通用的请求属性
12 connection.setRequestProperty("Content-Type", "application/json");
13 connection.setRequestProperty("Connection", "Keep-Alive");
14 connection.setUseCaches(false);
15 connection.setDoOutput(true);
16 connection.setDoInput(true);
17
18 // 得到请求的输出流对象
19 DataOutputStream out = new DataOutputStream(connection.getOutputStream());
20 out.writeBytes("");
21 out.flush();
22 out.close();
23
24 // 建立实际的连接
25 connection.connect();
26 // 定义 BufferedReader输入流来读取URL的响应
27 BufferedReader in;
28 if (requestUrl.contains("nlp"))
29 in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));
30 else
31 in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
32 StringBuilder result = new StringBuilder();
33 String getLine;
34 while ((getLine = in.readLine()) != null) {
35 result.append(getLine);
36 }
37 in.close();
38 JSONObject jsonObject = JSONObject.parseObject(result.toString());
39 return jsonObject.getString("access_token");
40 }

调用微信接口生成微信小程序二维码

 1     /**
2 * 生成微信小程序二维码
3 *
4 * @param filePath
5 * 本地生成二维码路径
6 * @param page
7 * 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
8 * @param scene
9 * 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
10 * @param accessToken
11 * 接口调用凭证
12 */
13 public static void generateQrCode(String filePath, String page, String scene, String accessToken) {
14
15 try {
16
17 //调用微信接口生成二维码
18 URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);
19 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
20 httpURLConnection.setRequestMethod("POST");// 提交模式
21 // conn.setConnectTimeout(10000);//连接超时 单位毫秒
22 // conn.setReadTimeout(2000);//读取超时 单位毫秒
23 // 发送POST请求必须设置如下两行
24 httpURLConnection.setDoOutput(true);
25 httpURLConnection.setDoInput(true);
26 // 获取URLConnection对象对应的输出流
27 PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
28 // 发送请求参数
29 JSONObject paramJson = new JSONObject();
30 //这就是你二维码里携带的参数 String型 名称不可变
31 paramJson.put("scene", scene);
32 //注意该接口传入的是page而不是path
33 paramJson.put("page", page);
34 //这是设置扫描二维码后跳转的页面
35 paramJson.put("width", 200);
36 paramJson.put("is_hyaline", true);
37 paramJson.put("auto_color", true);
38 printWriter.write(paramJson.toString());
39 // flush输出流的缓冲
40 printWriter.flush();
41
42 //开始获取数据
43 BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
44 OutputStream os = new FileOutputStream(new File(filePath));
45 int len;
46 byte[] arr = new byte[1024];
47 while ((len = bis.read(arr)) != -1) {
48 os.write(arr, 0, len);
49 os.flush();
50 }
51 os.close();
52 } catch (Exception e) {
53 e.printStackTrace();
54 }
55
56 System.out.println("打开地址查看生成的二维码:" + filePath);
57
58 }

测试类

 1     public static void main(String[] args) throws Exception {
2
3 //获取接口调用凭证access_token
4 String appId = "小程序id";//小程序id
5 String appKey = "小程序密钥";//小程序密钥
6 String token = postToken(appId, appKey);
7
8 //生成二维码
9 generateQrCode("E:\\tools\\qrCode\\test.png", "pages/index/index", "aa=108&bb=2&cc=3", token);
10
11 }

注意

1      1.获取小程序appId 与appKey
2 2.生成小程序二维码页面参数传入的是page而不是path,其他的接口是path。
3 page后面不允许加参数,参数需要通过scene传入。而小程序也需要通过scene获取参数。
4 3.生成小程序二维码可将二维码写入本地,也可上传至服务器。自行选择
5

Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)的更多相关文章

  1. Java 扫描微信公众号二维码,关注并自动登录网站

    https://blog.csdn.net/qq_42851002/article/details/81327770 场景:用户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: ...

  2. java 扫描微信公众号二维码,关注并登录逻辑

    场景:户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: 系统生成带参数的临时二维码:参数 scene_str 自定义为唯一值(可以是uuid),临时二维码的生成方式参照官方接 ...

  3. 微信小程序二维码推广统计

    微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...

  4. 微信小程序参数二维码6问6答

    微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...

  5. 微信小程序二维码识别

    目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出 ...

  6. 微信小程序-二维码汇总

    小程序二维码在生活中的应用场景很多,比如营销类一物一码,扫码开门,扫码付款等...小程序二维码分两种? 1.普通链接二维码 即跟普通的网站链接生成的二维码是一个意思,这种二维码的局限性如下: 对于普通 ...

  7. 图片的URL上传至阿里云OSS操作(微信小程序二维码返回的二进制上传到OSS)

    当我们从网络中获取一个URL的图片我们要存储到本地或者是私有的云时,我们可以这样操作  把url中的图片文件下载到本地(或者上传到私有云中)  public String uploadUrlToOss ...

  8. php生成微信小程序二维码源码

    目前有3个接口可以生成小程序码,开发者可以根据自己的需要选择合适的接口.第一步:获取   access_token public function getWxAccessToken(){ $appid ...

  9. 微信小程序二维码是无法识别二维码跳转到小程序

    今天测试了一下,微信小程序圆形二维码是不能直接识别跳转到小程序: 但h5页面的那种微信公众号二维码是可以直接识别

随机推荐

  1. php生成器 yield 转

    一.yield介绍  文档介绍说道:生成器函数的核心是yield关键字.它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给 ...

  2. 第十六章 IP子网的划分

    一.引入 1.根据IP地址的类别进行IP地址分配的方法表现出越来越多的弊端 2.为了解决分类IP地址划分带来的地址浪费,就需要使用子网划分(Subnetting)的方法 3.VLSM和CIDR可以进一 ...

  3. Python之tuple元组详解

    元组:有序,一级元素不可以修改.不能被增加或删除(元组是可迭代对象) 一般写法括号内最后面加个英文逗号用来区分: test  =  (,) test1 = (11,22,) 例: test = (12 ...

  4. Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储

    原文链接:https://fuckcloudnative.io/posts/kubernetes-storage-using-ceph-rbd/ 本文详细介绍了如何在 Kubernetes 集群中部署 ...

  5. Jmeter入门(3)- Jmeter录制脚本

    一. 录制web端 1. Badboy的介绍和安装 1.1 使用第三方工具Badboy来录制. 免费的web自动化测试工具 一个浏览器模拟工具 主要进行脚本的录制和回访,和对录制脚本进行调试,可以将脚 ...

  6. 3号随笔,搭建web环境

    创建数据库可能会遇到的问题 数据库语法错误: 如果写错了就会报错. 搭建web项目,我采用了MVC结构搭建 模型层写数据包装,controller层写业务代码,service写数据库内容,创建之后就搭 ...

  7. 论文解读《Plug-and-Play Priors for Model Based Reconstruction》

    这篇论文主要概述了model-baesd的方法在解决图像恢复的逆问题的很好的效果,降噪问题其实就是前向模型的H是一个恒等算子,将state-of-the-art的降噪算法(先验模型)和相对应的逆问题的 ...

  8. Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)

    前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...

  9. 【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community

    FROM:http://lazyfoo.net/tutorials/SDL/06_extension_libraries_and_loading_other_image_formats/windows ...

  10. CodeForces 1408I Bitwise Magic

    题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...