当前位置:   article > 正文

JAVA 获取 微信小程序码的两种方式 和 微信小程序二维码的一种方式_createwxaqrcode

createwxaqrcode

目前小程序推出了自己的识别码,小程序码,圆形的码看起来比二维码好看。

本文总结微信小程序的获取小程序二维码的接口开发。官方地址

主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发。

一、简介

通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面。目前微信支持两种二维码,小程序码(左),小程序二维码(右),如下所示: 
这里写图片描述

 

微信小程序获取二维码的三种方式   

小程序码两种  小程序二维码一种

1.官方文档有介绍获取二维码的,这里主要介绍JAVA怎么获取。 
2.微信小程序二维码API文档 官方地址 
3.小程序获取的图片样式其实是有差异的;一种是我们熟悉的二维码,一种就是小程序码了;具体可根据需求选择。

获取  小程序码  小程序二维码  的前提是

必须获取小程序的TOKEN

获取 access_token 详见文档

 

  1. /**
  2. * 获取token
  3. * @param url
  4. * @param grantType
  5. * @param appid
  6. * @param secret
  7. * @return
  8. */
  9. public static String getAccessToken(String url,String grantType,String appid,String secret){
  10. String access_token = "";
  11. String tokenUrl = url+"?grant_type="+ grantType+"&appid="+ appid + "&secret="+ secret;
  12. Object result = HttpUtils.doGet(tokenUrl);
  13. JSONObject jsons = JSONObject.parseObject(result.toString());
  14. String expires_in = jsons.getString("expires_in");
  15. if(BL3Utils.isNotEmpty(expires_in)&&Integer.parseInt(expires_in)==7200){
  16. //ok
  17. access_token = jsons.getString("access_token");
  18. }else{
  19. System.out.println("出错获取token失败!");
  20. }
  21. return access_token;
  22. }

 

参数介绍:

1.url :https://api.weixin.qq.com/cgi-bin/token
2.grantType: client_credential
3.appid:小程序appid,微信公众平台注册小程序时自动生成的。
4.secret:小程序secret,微信公众平台注册小程序时自动生成的。
5.url 和grantType参数官网其实有介绍的。
 

获取小程序码的两种方式

目前有两个接口可以生成小程序码,开发者可以根据自己的需要选择合适的接口

第一种

  1. 适用于需要的码数量较少的业务场景
  2. 是呢不带参数有限个小程序码接口
  3. 总共生成的码数量限制为100,000,请谨慎调用。

接口地址:

https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

(1)POST 参数说明

参数类型默认值说明
pathString 不能为空,最大长度 128 字节
widthInt430二维码的宽度
auto_colorBoolfalse自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
line_colorObject{“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接口开发

  1. /**
  2. 1. 带参数有限个数小程序码接口
  3. 2. @param url
  4. 3. @param access_token
  5. 4. @param path
  6. 5. @param width
  7. 6. @return
  8. */
  9. public static InputStream getwxacode(String url,String access_token,String path,String width){
  10. url = url + "?access_token=" + access_token;
  11. JSONObject jsonParam = new JSONObject();
  12. jsonParam.put("path", path);
  13. jsonParam.put("width", Integer.parseInt(width));
  14. jsonParam.put("auto_color", false);
  15. Map<String,Object> line_color = new HashMap<>();
  16. line_color.put("r", 0);
  17. line_color.put("g", 0);
  18. line_color.put("b", 0);
  19. jsonParam.put("line_color", line_color);
  20. InputStream instreams = HttpUtils.doWXPost(url, jsonParam);
  21. if(BL3Utils.isEmpty(instreams)){
  22. System.out.println("出错获取二维码失败!");
  23. }
  24. return instreams;
  25. }

参数说明

1.url : https://api.weixin.qq.com/wxa/getwxacode

2.access_token:上面有介绍(getAccessToken这个方法)

3.path:用户扫描该码进入小程序后,将直接进入 path 对应的页面;一般是首页地址:”pages/index/index” 也可以带上参数:”pages/index/index?query=1”。

4.width:二维码的宽度 int类型 默认 430
 

第二种

  1. 适用于需要的码数量极多的业务场景
  2. 没有数量限制呢
  3. 带参数

接口地址:

https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

(1)POST 参数说明

参数类型默认值说明
sceneString 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&’()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
pageString 必须是已经发布的小程序页面,例如 “pages/index/index” ,如果不填写这个字段,默认跳主页面
widthInt430二维码的宽度
auto_colorBoolfalse自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
line_colorObject{“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 才能获取到生成二维码时传入的 scene
    var scene = decodeURIComponent(options.scene)
  }
})

 

(2)请求接口测试

这里写图片描述

 

(3)java接口开发 

  1. /**
  2. * 带参数无限个数小程序码接口
  3. * @param url
  4. * @param access_token
  5. * @param path
  6. * @param width
  7. * @return
  8. */
  9. public static InputStream getwxacodeunlimit(String url,String access_token,String path,String width){
  10. String[] str = path.split("[?]");
  11. path = str[0];
  12. String scene = str[1];
  13. url = url + "?access_token=" + access_token;
  14. // 接收参数json列表
  15. JSONObject jsonParam = new JSONObject();
  16. jsonParam.put("scene", scene);
  17. jsonParam.put("page", path);
  18. jsonParam.put("width", Integer.parseInt(width));
  19. jsonParam.put("auto_color", false);
  20. Map<String,Object> line_color = new HashMap<>();
  21. line_color.put("r", 0);
  22. line_color.put("g", 0);
  23. line_color.put("b", 0);
  24. jsonParam.put("line_color", line_color);
  25. InputStream instreams = HttpUtils.doWXPost(url, jsonParam);
  26. if(BL3Utils.isEmpty(instreams)){
  27. System.out.println("出错获取二维码失败!");
  28. }
  29. return instreams;
  30. }

参数说明

1.url : https://api.weixin.qq.com/wxa/getwxacodeunlimit
2.access_token:上面有介绍(getAccessToken这个方法)
3.path:用户扫描该码进入小程序后,将直接进入 path 对应的页面;一般是首页地址”pages/index/index” 也可以带上参数:”pages/index/index?query=1”。
4.width:二维码的宽度 int类型 默认 430

注意:

  1. 第二种生成小程序码的情况 只有小程序上线后才能生成二维码。
  2. 其他方法生成的码只有小程序上线后才会有权限访问 否则会提示小程序尚未发布

 

获取小程序二维码

  1. 适用于需要的码数量较少的业务场景
  2. 总共生成的码数量限制为100,000,请谨慎调用。

接口地址:

https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

(1)POST 参数说明 

参数类型默认值说明
pathString 不能为空,最大长度 128 字节
widthInt430二维码的宽度

 

注意:通过该接口生成的小程序二维码,永久有效,数量限制见文末说明,请谨慎使用。用户扫描该码进入小程序后,将直接进入 path 对应的页面。

示例:

{"path": "pages/index?query=1", "width": 430}

注:pages/index 需要在 app.json 的 pages 中定义

(2)请求接口测试

è¿éåå¾çæè¿°

 

  1. /**
  2. * 获取小程序二维码
  3. * @param url 官方获取二维码地址
  4. * @param width 二维码的宽度 int类型 默认 430
  5. * @param access_token
  6. * @param path
  7. * @return
  8. */
  9. public static InputStream createwxaqrcode(String url,String access_token,String path,String width){
  10. url = url + "?access_token=" + access_token;
  11. JSONObject jsonParam = new JSONObject();
  12. jsonParam.put("path", path);
  13. jsonParam.put("width", width);
  14. InputStream instreams = doWXPost(url, jsonParam);
  15. if(BL3Utils.isEmpty(instreams)){
  16. System.out.println("出错获取二维码失败!");
  17. }
  18. return instreams;
  19. }
  20. /**
  21. * 请求
  22. * @param url
  23. * @param jsonParam
  24. * @return
  25. */
  26. public static InputStream doWXPost(String url, JSONObject jsonParam) {
  27. InputStream instreams = null;
  28. HttpPost httpRequst = new HttpPost(url);// 创建HttpPost对象
  29. try {
  30. StringEntity se = new StringEntity(jsonParam.toString(),"utf-8");
  31. se.setContentType("application/json");
  32. se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8"));
  33. httpRequst.setEntity(se);
  34. HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
  35. if (httpResponse.getStatusLine().getStatusCode() == 200) {
  36. HttpEntity httpEntity = httpResponse.getEntity();
  37. if (httpEntity != null) {
  38. instreams = httpEntity.getContent();
  39. }
  40. }
  41. } catch (UnsupportedEncodingException e) {
  42. e.printStackTrace();
  43. } catch (ClientProtocolException e) {
  44. e.printStackTrace();
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }
  48. return instreams;
  49. }

参数介绍: 
1. url : https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode 
2. access_token:上面有介绍(getAccessToken这个方法) 
3. path:用户扫描该码进入小程序后,将直接进入 path 对应的页面;一般是首页地址”pages/index/index” 也可以带上参数 “pages/index/index?query=1”。 
4. width:二维码的宽度 int类型 默认 430。
 

  1. /* @param instreams 二进制流
  2. * @param imgPath 图片的保存路径
  3. * @param fileName 图片的名称
  4. * @return str 图片保存地址
  5. */
  6. public static String saveToImgByInputStream(InputStream instreams,String imagePath,String fileName){
  7. String str = "";
  8. String path = "QRimage" + getWFileDirName();
  9. String linuxPath = path.replaceAll("//",File.separator);
  10. if(instreams != null){
  11. boolean b =uploadImages(instreams,imagePath+File.separator+linuxPath, fileName);
  12. if(b){
  13. str =linuxPath+fileName;
  14. }
  15. }
  16. return str;
  17. }

参数介绍

 1. instreams: 上面有介绍(createwxaqrcode这个方法)
 2. imagePath:保存图片的地址
 3. fileName:图片自定义名称(可以自定义 比如:1.jpg、1.png等)。

 

  1. /**
  2. * IO流保存图片
  3. * @param instreams
  4. * @param imagePath
  5. * @param fileName
  6. * @return
  7. */
  8. public static boolean uploadImages( InputStream instreams,String imagePath,String fileName) {
  9. File f = new File(imagePath);
  10. f.setWritable(true, false);
  11. boolean flag = false;
  12. try {
  13. // 1K的数据缓冲
  14. byte[] bs = new byte[1024];
  15. // 读取到的数据长度
  16. int len;
  17. // 输出的文件流
  18. File file = new File(imagePath,fileName);
  19. if (!file.getParentFile().exists()) {
  20. file.getParentFile().mkdirs();
  21. try {
  22. // 创建新文件
  23. file.createNewFile();
  24. } catch (IOException e) {
  25. System.out.println("创建新文件时出现了错误。。。");
  26. e.printStackTrace();
  27. }
  28. }
  29. OutputStream os = new FileOutputStream(imagePath+File.separator+fileName);
  30. // 开始读取
  31. while ((len = instreams.read(bs)) != -1) {
  32. os.write(bs, 0, len);
  33. }
  34. // 完毕,关闭所有链接
  35. os.close();
  36. instreams.close();
  37. flag = true;
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. }
  41. return flag;
  42. }

 直接使用下面的代码就可以获取到二维码地址了

String qrcodeUrl = saveToImgByInputStream(instreams,imagePath,fileName);

三、说明


1:通过该接口,仅能生成已发布的小程序的二维码。 
2:可以在开发者工具预览时生成开发版的带参二维码。 
3:接口1加上接口2,总共生成的码数量限制为100,000,请谨慎调用。 
4 : POST 参数需要转成 json 字符串,不支持 form 表单提交。 
5 : auto_color line_color 参数仅对小程序码生效。

 

最后请大家注意

本篇博客讲解的是   

生成

微信小程序码的两种方式

和生成

微信小程序二维码的一种方式

微信小程序码    和  微信小程序二维码  是有区别的

微信小程序码是圆的  微信小程序二维码是方的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/779670
推荐阅读
相关标签
  

闽ICP备14008679号