微信公众号开发

小程序码获取

本文主要是介绍小程序码获取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

HTTPS 调用
请求地址

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

注意

一定要一个字一个字的看仔细

请求参数

属性	类型	默认值	必填	说明
access_token	string		是	接口调用凭证
path	string		是	扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}。
width	number	430	否	二维码的宽度,单位 px。最小 280px,最大 1280px
返回值
Buffer
返回的图片 Buffer

异常返回
Object
JSON

属性	类型	说明
errcode	number	错误码
errmsg	string	错误信息
errcode 的合法值

值	说明	最低版本
45029	生成码个数总和到达最大个数限制	
返回值说明
如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。

注意
POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成。
与 wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用。
示例
请求

{
 "path":"page/index/index",
 "width":430
}
返回

{
 "errcode": 0,
 "errmsg": "ok",
 "contentType": "image/jpeg",
 "buffer": Buffer
}


获取小程序码 (开箱即用)

getaccesstoken()中的 HttpServletResponse responsec 与getUserData()中的 HttpServletResponse responsec 这里没有用到可直接去掉

//获取WX小程序token
    @GetMapping("/token")
    public ApiResult getaccesstoken(HttpServletRequest request ,HttpServletResponse responsec) throws Exception {
        String scene = request.getParameter("scene");
        String k = "share:"+scene;
        String o =null;
        try{
           o = redisTemplate.opsForValue().get(k).toString();
        }catch (Exception e){

        }

        if(o != null && !o.equals("") ){
            return  new ApiResult().setCode(200).setMessage("操作成功").setData(o);
        }

        HttpGet httpGet = new HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret);
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String s  = null;
        CloseableHttpResponse response = null;
        response = httpclient.execute(httpGet);
        String retname = "";
        // 判断返回状态是否为200
        if (response.getStatusLine().getStatusCode() == 200) {
            s = EntityUtils.toString(response.getEntity());
            JSONObject  objects = JSONObject.parseObject(s);
            retname = getUserData(request,objects.get("access_token").toString(),responsec);
        }

        return new ApiResult().setCode(200).setData(retname).setMessage("操作成功");
    }
    //获取小程序码 
    public String getUserData(HttpServletRequest request, String token ,HttpServletResponse responsec) {
        // 创建Httpclient对象
        String url = "";
        String page = request.getParameter("page");
        String width = request.getParameter("width");
        String scene = request.getParameter("scene");
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder("https://api.weixin.qq.com/wxa/getwxacodeunlimit"+"?access_token="+token);
//            builder.addParameter("",acctoken);   //参数添加
//
//            builder.addParameter("width",width);   //参数添加
//            builder.addParameter("page",page);   //参数添加

            URI uri = builder.build();
            // 创建http GET请求
            HttpPost httpPost = new HttpPost(uri);
            httpPost.addHeader("Content-Type", "application/json; charset=UTF-8");
            String postParams ="{\"page\":\""+page+"\",\"width\":\""+width+"\",\"scene\":\""+scene+"\"}";
            System.out.println(postParams);
            HttpEntity httpEntity = new StringEntity(postParams);
            ((HttpPost) httpPost).setEntity(httpEntity);
            // 执行请求
            response = httpclient.execute(httpPost);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                //System.out.println("我的状态是200了!");
                String fileName = response.getHeaders("Content-Disposition")[0].getValue().split("filename=")[1];
                //System.out.println("-------------->>>>我的名字是 "+fileName);
                if (response.getStatusLine().getStatusCode() == 200) {
                    //得到实体
                    HttpEntity entity = response.getEntity();
                    byte[] data = EntityUtils.toByteArray(entity);
                    InputStream inputStream = new ByteArrayInputStream(data);
                    String uid = UUIDUtil.getUuid()+".jpg";
 						//上传到图片服务器    
 			        ossClientService.uploadFile2OSS(inputStream,uid,"路径");
                    url = "https://网址/路径/"+uid;
                    //==================保存到redis==========
                    String k = "share:"+scene;//保存到redis (图片地址)
                    try{
                        redisTemplate.opsForValue().set(k,url);
                    }catch (Exception e){

                    }
                     //==================保存到redis  END==========
                    //存入磁盘
                    //......
                } else {
                    throw new Exception("文件下载失败!Http状态码为" + response.getStatusLine().getStatusCode());
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //imgShow(url,responsec); //可调用下方接口直接转发到调用者
      
        return url;
    }

    /**
     * 将获取到的图片发到自己目标地址上
     * @param url
     * @param
     * @param response
     */
     //    @GetMapping("/show")
    public void imgShow( String url ,HttpServletResponse response) {
        InputStream fis = null;
        OutputStream os = null;
        try {
            String [] urls = url.split("\\\\");
            File files = new File(url);
            String filePath = files.getCanonicalPath();
            fis = new FileInputStream(url);//本地图片地址
            os = response.getOutputStream();
            int count = 0;
            byte[] buffer = new byte[1024 * 8];
            while ((count = fis.read(buffer)) != -1) {
                os.write(buffer, 0, count);
                os.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
这篇关于小程序码获取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!