Java 获取小程序二维码的几种方式

简介: Java 获取小程序二维码的几种方式

小程序二维码的适用场景


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


获取步骤


接口地址:

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)请求接口测试


    /**
     *  获取小程序二维码
     * @param url 官方获取二维码地址
     * @param width 二维码的宽度 int类型 默认 430
     * @param access_token 
     * @param path
     * @return
     */
      public static InputStream createwxaqrcode(String url,String access_token,String path,String width){
          url = url + "?access_token=" + access_token;
          JSONObject jsonParam = new JSONObject();
          jsonParam.put("path", path);
          jsonParam.put("width", width);
          InputStream instreams = doWXPost(url, jsonParam);
         if(BL3Utils.isEmpty(instreams)){
             System.out.println("出错获取二维码失败!");
         }
         return instreams;
     }
    /**
     *  请求
     * @param url 
     * @param jsonParam
     * @return
     */
     public static InputStream doWXPost(String url, JSONObject jsonParam) {
            InputStream instreams = null;
            HttpPost httpRequst = new HttpPost(url);// 创建HttpPost对象
            try {
                StringEntity se = new StringEntity(jsonParam.toString(),"utf-8");
                se.setContentType("application/json");
                se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"UTF-8"));
                httpRequst.setEntity(se);
                HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
                if (httpResponse.getStatusLine().getStatusCode() == 200) {
                    HttpEntity httpEntity = httpResponse.getEntity();
                    if (httpEntity != null) {
                        instreams = httpEntity.getContent();
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return instreams;
        }

参数介绍:

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。

    /* @param instreams 二进制流
     * @param imgPath 图片的保存路径
     * @param fileName 图片的名称
     * @return str 图片保存地址
     */
    public static String saveToImgByInputStream(InputStream instreams,String imagePath,String fileName){
        String str = "";
        String path = "QRimage" + getWFileDirName();
        String linuxPath = path.replaceAll("//",File.separator);
        if(instreams != null){
            boolean b =uploadImages(instreams,imagePath+File.separator+linuxPath, fileName);
            if(b){
                str =linuxPath+fileName;
            }
        }
        return str;
    }

参数介绍

1. instreams: 上面有介绍(createwxaqrcode这个方法)

2. imagePath:保存图片的地址

3. fileName:图片自定义名称(可以自定义 比如:1.jpg、1.png等)。

    /**
     * IO流保存图片
     * @param instreams
     * @param imagePath
     * @param fileName
     * @return
     */
    public static boolean uploadImages( InputStream instreams,String imagePath,String fileName) {
        File f = new File(imagePath);
        f.setWritable(true, false);
        boolean flag = false;
        try {
            // 1K的数据缓冲
            byte[] bs = new byte[1024];
            // 读取到的数据长度
            int len;
            // 输出的文件流
            File file = new File(imagePath,fileName);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
                try {
                    // 创建新文件
                    file.createNewFile();
                } catch (IOException e) {
                    System.out.println("创建新文件时出现了错误。。。");
                    e.printStackTrace();
                }
            }
            OutputStream os = new FileOutputStream(imagePath+File.separator+fileName);
            // 开始读取
            while ((len = instreams.read(bs)) != -1) {
                os.write(bs, 0, len);
            }
            // 完毕,关闭所有链接
            os.close();
            instreams.close();
            flag = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return flag;
    }

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

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


接口说明


1:通过该接口,仅能生成已发布的小程序的二维码。

2:可以在开发者工具预览时生成开发版的带参二维码。

3:接口1加上接口2,总共生成的码数量限制为100,000,请谨慎调用。

4 : POST 参数需要转成 json 字符串,不支持 form 表单提交。

5 : auto_color line_color 参数仅对小程序码生效。


相关文章
|
1月前
|
小程序 前端开发 JavaScript
基于Java的校园二手交易小程序的设计与实现
基于Java的校园二手交易小程序的设计与实现
27 2
|
3月前
|
人工智能 移动开发 小程序
Java医院智慧3D导诊系统源码 微信小程序源码
技术架构:springboot+redis+mybatis plus+mysql+RocketMQ
62 1
|
3月前
|
机器学习/深度学习 自然语言处理 小程序
Java+springboot开发医院智能导诊小程序源码
患者信息采集:在患者来院时,可以通过智能问诊系统收集患者的基本信息、症状描述、病史等。这可以通过语音识别、自然语言处理技术实现。
35 0
|
1月前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
20天前
|
人工智能 小程序 Java
Java智慧校园系统源码 微信小程序+电子班牌
通过设备管理对百纳智慧校园的智慧班牌以及百纳智慧屏(校牌)进行统一集中式管理,支持浏览所有设备的基本信息以及在离线状态,支持添加设备、设备一键开关机、一键重启、设置节假日开关机时间、设置日常开关机时间、远程班牌截屏、远程班牌升级等操作。
|
1月前
|
开发框架 小程序 .NET
C#动态生成带参数的小程序二维码
C#动态生成带参数的小程序二维码
|
1月前
|
存储 Java Maven
Java能这么轻松识别二维码
Java能这么轻松识别二维码
91 1
|
1月前
|
存储 小程序 前端开发
Java代码能搭建小程序
Java代码能搭建小程序
20 0
|
2月前
|
小程序 JavaScript
微信小程序显示二维码?
微信小程序显示二维码?
|
2月前
|
人工智能 小程序 数据挖掘
Java智慧中小学校管理系统源码带微信小程序
微信小程序端包括家长端和教师端;设有首页、发现、个人中心;首页里设有学校简介、组织架构、师资力量、学校荣誉、网上报修、电子班牌;发现页面可以看到最新的动态,班级圈等;个人中心设有上班打卡、我的课表、请假、班级考勤、通知公告、倒计时、积分商城、放学管理、体温检测、班级德育、图片视频管理、教学班,校内各大活动一目了然。
37 0