在大家看正式内容之前请耐心的听我把这段话说完:我冒昧的猜一下,你为了解决问题估计已经看了很多文章了,如果这边文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,共同进步,我之前在完成这个功能之前,从csdn上看了不少坑文章,最多的一种情况就是:大体看着还行,仔细一看里面用到了他自己封装的一个类不发出来,导致不能用,问作者也不叼咱们的那种,要么就是四处抄的或者根本搜不到。如果这边文章对你有用,请多多支持!下面的代码我就直接开始在重要的地方加上注释,方便大家阅读,直接上正文:
第一首先分成两步:第一步就是生成二维码,但是不展示出来,第二,生成二维码之后直接存到七牛云上面。
首先生成二维码需要三个参数 这个不废话 其中accesstoken需要通过另外两个参数发送请求获取,下面直接粘贴获取accesstoken的代码
public String postToken() throws Exception { String APIKEY = "";//小程序id String SECRETKEY = "";//小程序密钥 String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APIKEY+"&secret="+SECRETKEY; URL url = new URL(requestUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("POST"); // 设置通用的请求属性 connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setUseCaches(false); connection.setDoOutput(true); connection.setDoInput(true); // 得到请求的输出流对象 DataOutputStream out = new DataOutputStream(connection.getOutputStream()); out.writeBytes(""); out.flush(); out.close(); // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = null; if (requestUrl.contains("nlp")) in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK")); else in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String result = ""; String getLine; while ((getLine = in.readLine()) != null) { result += getLine; } in.close(); JSONObject jsonObject = JSON.parseObject(result); String accesstoken=jsonObject.getString("access_token"); return accesstoken; }
相信上面的方法,无数人写过,所以不废话,下面在粘贴获取小程序码并上传到七牛云的方法(注意里面有干货,可能有大家需要注意的地方)
String accessToken = null; try { accessToken = postToken(); } catch (Exception e) { e.printStackTrace(); } ; try {
//首先做好拼接小程序码的请求路径 注意里面的参数是上一段代码的执行结果 URL url = new URL(null, "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken, new sun.net.www.protocol.https.Handler()); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST");// 提交模式 // conn.setConnectTimeout(10000);//连接超时 单位毫秒 // conn.setReadTimeout(2000);//读取超时 单位毫秒 // 发送POST请求必须设置如下两行 httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); // 获取URLConnection对象对应的输出流 PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream()); // 发送请求参数 JSONObject paramJson = new JSONObject(); paramJson.put("scene", l); paramJson.put("page", "pages/index/index"); paramJson.put("width", 430); paramJson.put("auto_color", true); printWriter.write(paramJson.toString()); // flush输出流的缓冲 printWriter.flush(); //开始获取数据 其实在这里已经把小程序码获取到了 BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream()); System.out.println(bis);
//在这里你可以在你的桌面上或者什么文件夹下面展示一下,看一下有没有具体的获取到,基本上只要你请求的参数是对的,那就99.99%的可以或许到小程序的码// String sss = "http://123.57.234.151/D:qcxx/"+l+".png"; // String s = "/home/image/"+ l + ".png"; // OutputStream os = new FileOutputStream(new File(s)); // int len; // byte[] arr = new byte[1024]; // while ((len = bis.read(arr)) != -1){ // os.write(arr, 0, len); // os.flush(); // }
//以上注释的代码为检验是否真的获取到了小程序,是为了防止没有东西上传到七牛云里面,可以不写 // os.close(); //你的七牛云的参数账号密码,以及空间名称等等 这个要是不会真帮不了你了 String ACCESS_KEY = ""; String SECRET_KEY = ""; String bucketName = "";
//创建返回的集合,其实无所谓我是直接写了要不要无所谓,如果你别的地方还需要调用最好存一下 Map<String, Object> retMap = new HashMap<String, Object>(); // 构造一个带指定对象的配置类 现在一般都写这个Region,如果你看见的是Zone那个请自动忽略,之前是,将来可能狗屁不是 Configuration cfg = new Configuration(Region.region1()); //注意注意注意: 是什么地区要选好,不然会上传失败 好多人都在写那个Zone.zone1 之类的,说实话没吊用,都快过期了 // 其他参数参考类注释 UploadManager uploadManager = new UploadManager(cfg); try { Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); String upToken = auth.uploadToken(bucketName); try {
//在这里说一下几个参数 也是个重点,其中第一个参数是带有你小程序二维码的流(只要是inputStream及其子类都可以,第二个是你指定的上传名称) Response response = uploadManager.put(httpURLConnection.getInputStream(), null, upToken, null, null); // 解析上传成功的结果 System.out.println(response); DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
//至此全部上传完毕,下面的就是存上传路径路径等鸡毛小事,putRet.key 这个就是你的上传路径,前面加上你在七牛云里面配置的访问前缀就可以直接通过浏览器访问了 retMap.put("hash", putRet.hash); retMap.put("filePath",putRet.key); } catch (QiniuException ex) { Response r = ex.response; System.err.println(r.toString()); try { System.err.println(r.bodyString()); } catch (QiniuException ex2) { ex2.printStackTrace(); } } } catch (Exception ex) { ex.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); }
至此全部完毕,如果有什么不会的欢迎加我qq:330737943,我给大家说明,非常抱歉耽误大家时间了,希望大家工作顺利,家庭幸福,再一次感谢大家的阅读!