微信小程序获取二维码
原文链接:https://blog.csdn.net/w410589502/article/details/77702358/
版权归原有博主,此处为了方便自己是查看,故copy一份,B接口调用,亲测有效
前言:目前小程序推出了自己的识别码,小程序码,这个圆形的码看起来比二维码好看。本文总结微信小程序的获取小程序码和二维码并生成二维码图片的接口开发。主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发。
微信小程序API文档:获取二维码
一、简介
通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面。目前微信支持两种二维码,小程序码(左),小程序二维码(右),如下所示:
二、获取小程序码
目前有两个接口可以生成小程序码,开发者可以根据自己的需要选择合适的接口。
1 不带参数有限个数小程序码接口
适用于需要的码数量较少的业务场景
接口地址:
https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
注:获取accesstoken的方法跟微信公众获取accesstoken方法一致,不过小程序获取accesstoken需要小程序的appid和appsercet。登录 https://mp.weixin.qq.com ,就可以在网站的“设置”-“开发者设置”中,查看到微信小程序的 AppID 了,注意不可直接使用服务号或订阅号的 AppID 。
获取微信小程序的 AppID文章地址:小程序简易教程
(1)POST 参数说明
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
path | String | 不能为空,最大长度 128 字节 | |
width | Int | 430 | 二维码的宽度 |
auto_color | Bool | false | 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 |
line_color | Object | {“r”:”0”,”g”:”0”,”b”:”0”} | auth_color 为 false 时生效,使用 rgb 设置颜色 例如 {“r”:”xxx”,”g”:”xxx”,”b”:”xxx”} |
注意:通过该接口生成的小程序码,永久有效,但数量有效,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。
(2)请求接口测试
使用http请求插件postman或者RESTClient请求测试。
请求测试结果返回一个小程序码图片,与微信公众平台生成二维码不同,小程序码直接返回文件流,不是微信公众平台的url和ticket。
(3)java接口开发
注:此接口是基于Spring RestTemplate进行http请求,进行http请求有很多方法和工具类,可自行百度或参考下面的参考文章。接口只是提供一个解决方法的思路。
public Map getminiqrQr(String accessToken) {RestTemplate rest = new RestTemplate();InputStream inputStream = null;OutputStream outputStream = null;try {String url = "https://api.weixin.qq.com/wxa/getwxacode?access_token="+accessToken;Map<String,Object> param = new HashMap<>();param.put("page", "pages/index/index");param.put("width", 430);param.put("auto_color", false);Map<String,Object> line_color = new HashMap<>();line_color.put("r", 0);line_color.put("g", 0);line_color.put("b", 0);param.put("line_color", line_color);LOG.info("调用生成微信URL接口传参:" + param);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(param, headers);ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);LOG.info("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody());byte[] result = entity.getBody();LOG.info(Base64.encodeBase64String(result));inputStream = new ByteArrayInputStream(result);File file = new File("C:/Users/wangqiulin/Desktop/1.png");if (!file.exists()){file.createNewFile();}outputStream = new FileOutputStream(file);int len = 0;byte[] buf = new byte[1024];while ((len = inputStream.read(buf, 0, 1024)) != -1) {outputStream.write(buf, 0, len);}outputStream.flush();} catch (Exception e) {LOG.error("调用小程序生成微信永久小程序码URL接口异常",e);} finally {if(inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if(outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}return null; }
说明:accessToken的获取方法就不多说,因为小程序二维码很坑爹的返回文件流,导致我们必须对流进行处理转换成图片保存到本地,这样还有一个严重的后果就是无法将二维码保存到数据库中,每次想获取二维码必须请求接口,此接口最多生成不超过100000个,请大家谨慎使用。
2 带参数无限个数小程序码接口
适用于需要的码数量极多,或仅临时使用的业务场景
接口地址:
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
获取accessToken的方法跟接口1一致。
(1)POST 参数说明
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
scene | String | 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&’()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式) | |
page | String | 必须是已经发布的小程序页面,例如 “pages/index/index” ,如果不填写这个字段,默认跳主页面 | |
width | Int | 430 | 二维码的宽度 |
auto_color | Bool | false | 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 |
line_color | Object | {“r”:”0”,”g”:”0”,”b”:”0”} | auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {“r”:”xxx”,”g”:”xxx”,”b”:”xxx”} |
注意:通过该接口生成的小程序码,永久有效,数量暂无限制。用户扫描该码进入小程序后,开发者需在对应页面获取的码中 scene 字段的值,再做处理逻辑。使用如下代码可以获取到二维码中的 scene 字段的值。调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode。同时需要注意,此接口的page参数中不能带任何参数,参数都在scene 参数中处理,切记!!!
// 这是首页的 js
Page({onLoad: function(options) {// options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scenevar scene = decodeURIComponent(options.scene)}
})
(2)请求接口测试
(3)java接口开发
public Map getminiqrQr(String sceneStr, String accessToken) {RestTemplate rest = new RestTemplate();InputStream inputStream = null;OutputStream outputStream = null;try {String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken;Map<String,Object> param = new HashMap<>();param.put("scene", sceneStr);param.put("page", "pages/index/index");param.put("width", 430);param.put("auto_color", false);Map<String,Object> line_color = new HashMap<>();line_color.put("r", 0);line_color.put("g", 0);line_color.put("b", 0);param.put("line_color", line_color);LOG.info("调用生成微信URL接口传参:" + param);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(param, headers);ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);LOG.info("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody());byte[] result = entity.getBody();LOG.info(Base64.encodeBase64String(result));inputStream = new ByteArrayInputStream(result);File file = new File("C:/Users/wangqiulin/Desktop/1.png");if (!file.exists()){file.createNewFile();}outputStream = new FileOutputStream(file);int len = 0;byte[] buf = new byte[1024];while ((len = inputStream.read(buf, 0, 1024)) != -1) {outputStream.write(buf, 0, len);}outputStream.flush();} catch (Exception e) {LOG.error("调用小程序生成微信永久小程序码URL接口异常",e);} finally {if(inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if(outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}return null; }
3 获取小程序二维码
适用于需要的码数量较少的业务场景
接口地址:
https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
(1)POST 参数说明
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
path | String | 不能为空,最大长度 128 字节 | |
width | Int | 430 | 二维码的宽度 |
注意:通过该接口生成的小程序二维码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。
示例:
{"path": "pages/index?query=1", "width": 430}
注:pages/index 需要在 app.json 的 pages 中定义
(2)请求接口测试
(3)java接口开发
public Map getminiqrQr(String accessToken) {RestTemplate rest = new RestTemplate();InputStream inputStream = null;OutputStream outputStream = null;try {String url = "https://api.weixin.qq.com/wxaapp/createwxaqrcode?access_token="+accessToken;Map<String,Object> param = new HashMap<>();param.put("page", "pages/index/index");param.put("width", 430);LOG.info("调用生成微信URL接口传参:" + param);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(param, headers);ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);LOG.info("调用小程序生成微信永久二维码URL接口返回结果:" + entity.getBody());byte[] result = entity.getBody();LOG.info(Base64.encodeBase64String(result));inputStream = new ByteArrayInputStream(result);File file = new File("C:/Users/wangqiulin/Desktop/1.png");if (!file.exists()){file.createNewFile();}outputStream = new FileOutputStream(file);int len = 0;byte[] buf = new byte[1024];while ((len = inputStream.read(buf, 0, 1024)) != -1) {outputStream.write(buf, 0, len);}outputStream.flush();} catch (Exception e) {LOG.error("调用小程序生成微信永久二维码URL接口异常",e);} finally {if(inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if(outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}return null; }
三、说明
1:通过该接口,仅能生成已发布的小程序的二维码。
2:可以在开发者工具预览时生成开发版的带参二维码。
3:接口1加上接口2,总共生成的码数量限制为100,000,请谨慎调用。
4 : POST 参数需要转成 json 字符串,不支持 form 表单提交。
5 : auto_color line_color 参数仅对小程序码生效。
参考文章
java微信小程序参数二维码生成带背景图加字体(无限生成)
java调用微信小程序API createwxaqrcode 产生二维码
RestTemplate下载文件
原文链接:https://blog.csdn.net/w410589502/article/details/77702358/
版权归原有博主,此处为了方便自己是查看,故copy一份,B接口调用,亲测有效
微信小程序获取二维码相关推荐
- 微信小程序获取二维码中URL中带的参数
解析微信小程序获取二维码中的url参数 onLoad: function (options) { console.log(options) let qrUrl = decodeURIComponent ...
- 微信小程序获取二维码接口整理,.Net Core后台获取小程序二维码
2019独角兽企业重金招聘Python工程师标准>>> 一.关于二维码接口说明 参考:https://my.oschina.net/tianma3798/blog/1811307 获 ...
- 微信小程序--获取二维码(java后端)
获取二维码 根据业务需要,用户点击分享当前页面,需将小程序当前页面生成二维码,其他用户扫描二维码,跳转至分享页面: 官方文档地址 获取二维码 请求参数 封装请求参数发送请求,请求成功,微信会返回的图片 ...
- uni-app微信小程序生成自定义参数二维码,跳转小程序指定页面,获取参数;uni-app微信小程序获取二维码自定义参数;微信小程序生成动态参数二维码;uni-app微信小程序获取动态参数二维码;
一.场景需求: 在小程序个人名片页面A页面,生成用户的个人名片二维码(该二维码携带用户的唯一标识id):微信扫一扫或长按图片识别这个二维码,可以跳转到小程序的B页面,并且在B页面拿到二维码上的唯一标识 ...
- 微信小程序获取二维码scene报错40129
java后端向微信服务端https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN请求获取带参二维码的时候,由于 ...
- 微信小程序转二维码方法分享
微信小程序转二维码方法分享 需要转码的可以看看 这个东西是看个人需求的,618就要来了,各种活动也将来袭 有些小伙伴不知道怎么生成 为了方便小程序邀请活动没法外发,这里分享下将小程序转二维码的方法 首 ...
- 微信小程序分享二维码生成
生成微信小程序分享二维码 微信小程序官方开放的二维码的接口,其中有一个是生成小程序二维码的,还有一个是圆形的小程序码,我这里就用php生成二维码. 完整代码: public function shar ...
- 【微信小程序】二维码跳转规则的前缀匹配是什么意思?
前言 基础库 2.12.0 开发者工具 1.03.2008270 微信小程序的二维码跳转规则 为了方便小程序开发者更便捷地推广小程序,兼容线下已有的二维码,微信公众平台开放扫描普通链接二维码跳转小程序 ...
- 微信小程序普通二维码解析
1.区别于微信小程序官方二维码是直接从onLoad的 options 解构出来就行,它是一个对象,这个大家都知道. 2.普通二维码 也是从onLoad的 options 里解构出来,此时options ...
最新文章
- 一家两位Fellow大满贯!北大谢涛当选ACM Fellow,与胞兄谢源完成会师
- ASP.NET防伪令牌与JSON有效载荷
- dea工具debug断点红色变成灰色
- 【RAC】 RAC For W2K8R2 安装--总体规划 (一)
- Effective Java之多个构造参数考虑用构建器(二)
- 不同服务器数据库表连接查询修改,如何连接多个数据库,mysql中的服务器和查询两个表中的对方?...
- 107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)
- 2016第七届蓝桥杯省赛C/C++ B组试题解析整理
- 微信退款参数格式错误
- 【Nodejs开发】第2章 网站首页的布局
- 电气-NPN、PNP传感器应用
- C. Dominant Piranha
- 数据整理—dplyr包(mutate系列)
- 碉堡了!最大 18 禁网站用 AI 和 ML 来做视频分类加标签
- 跟着 NC 学作图 | 多组散点图+配对连线+差异分析
- android设置默认程序清除默认设置
- 犀牛4.0鞋业插件orang1.2
- 解读赛力斯年报:华为智选车的B面
- 利用React官网动画库(react-transition-group)实现过渡动画
- 魔鬼在细节,理解Java并发底层之AQS实现
热门文章
- 全球及中国LCP行业建议咨询及未来发展趋势可行性研究报告2022版
- linux中管道符号打不出来,linux 管道符号 | ,以及 ||等等特殊符号笔记
- TokenGazer评级 | Bancor:经济模型架设具备创新 未来发展存在较多挑战
- 日常小记:C++中的log10函数
- 电池计量IC(MAX17040)
- 第3节 labview多界面切换之:一个子面板显示多个VI
- canvas画布加载图片 - Kaiqisan
- Python Turtle 绘制勾股树
- 看好豪爵的摩托车,程序员也要放飞自我,想做的事情就要去做,省的以后没有机会而后悔。
- 软件架构--《系统架构:复杂系统的产品设计与开发》笔记