Kita boleh mencapai penjanaan kod matahari program mini melalui kaedah berikut.
Dapatkan akses_token program mini
Tetapkan laluan dan dengan parameter yang berkaitan
Panggil antara muka getwxacodeunlimit dan simpan imej yang dikembalikan secara setempat
public static String getAccessToken(String appid, String appsecret) { String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret+""; String accessToken = null; try { String response = HttpClientUtil.getInstance().sendHttpsGet( requestUrl, null); JSONObject json = JSONObject.parseObject(response); accessToken = String.valueOf(json.get("access_token")); } catch (Exception e) { logger.error("getAccessToken error", e); } return accessToken; }
Penerangan: Cuma panggil antara muka API WeChat dan masukkan parameter appid dan appecret program mini.
public static String generatLimitSunCode(WxScanCodeParam param) throws Exception { String token =param.getAccessToken(); Map<String, String> params = new HashMap<>(); params.put("path", param.getPath()); params.put("width", "430"); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacode?access_token="+token); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); String body = JSON.toJSONString(params); StringEntity entity = new StringEntity(body); entity.setContentType("image/jpg"); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity entity2 = response.getEntity(); if(!entity2.getContentType().getValue().equals("image/jpeg")) { String result = EntityUtils.toString(entity2, "UTF-8"); logger.error("generate sun code error,http execute result:" + result); return null; } } else { logger.error("generate sun code error,http execute result:" + statusCode); } InputStream inputStream = response.getEntity().getContent(); // 保存图片到本地 int flag = saveImg(inputStream, param.getFilePath(), name); if (flag == 0) { throw new SysException("保存图片[" + name + "]失败"); } else { logger.info("太阳码[{}]生成成功", name); } return param.getFilePath() + File.separatorChar + name; }
laluan: imbas kod QR ke masukkan laluan halaman program mini, panjang maksimum 128 bait, tidak boleh kosong sebagai contoh: pages/index/index
access_token: Token kebenaran program mini
Perhatian khusus diperlukan Jumlah kod matahari program mini dan kod QR yang dijana oleh penyelesaian ini tidak boleh melebihi 100,000 WeChat tidak menyediakan antara muka API yang sepadan untuk menanyakan kuantiti penggunaan. Apabila kuantiti melebihi, Ini akan menyebabkan program mini menjadi tidak sah, dan pada masa ini WeChat tidak boleh menetapkan semula bilangan pertanyaan, yang sesuai untuk senario di mana bilangan yang dijana adalah kecil.
Sama seperti penyelesaian pertama
/** * 生成无限制的小程序码 * @param param * @return * @throws Exception */ public static String generatUnlimitSunCode(WxScanCodeParam param) throws Exception { String token =param.getAccessToken(); Map<String, String> params = new HashMap<>(); params.put("scene", param.getScene()); params.put("page", param.getPath()); params.put("width", "430"); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+token); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); String body = JSON.toJSONString(params); StringEntity entity = new StringEntity(body); entity.setContentType("image/jpg"); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { HttpEntity entity2 = response.getEntity(); if(!entity2.getContentType().getValue().equals("image/jpeg")) { String result = EntityUtils.toString(entity2, "UTF-8"); logger.error("generate sun code error,http execute result:" + result); return null; } } else { logger.error("generate sun code error,http execute result:" + statusCode); } InputStream inputStream = response.getEntity().getContent(); //太阳码写标题 String content=param.getWriteContent(); if(StringUtil.isNotEmpty(content) && param.isWrite()) { inputStream = ImageUtil.addImageTitle(param.getWriteContent(), inputStream, 450, 450); } String name = param.getFileName()+".jpg";//文件名加后缀,跟上面对应 int flag = saveImg(inputStream, param.getFilePath(), name);// 保存图片 if (flag == 0) { throw new SysException("保存图片[" + name + "]失败"); } else { logger.info("太阳码[{}]生成成功", name); } return param.getFilePath() + File.separatorChar + name; }
adegan: sehingga 32 aksara yang boleh dilihat, format parameter boleh ditakrifkan sendiri a&b atau a=1&b= 2
access_token: Token kebenaran program mini
Sejak panjang parameter adegan hanya menyokong 32 aksara, jika parameter melebihi 32 bit, bagaimana kita akan mengendalikannya?
Penyelesaian kepada masalah ialah: reka bentuk jadual parameter atur cara kecil, simpan parameter yang dijana dalam jadual dan jana atur cara kecil dengan menetapkan parameter pemandangan sebagai kunci utama jadual ini, selepas program mini mengimbas kod, ia mula-mula meminta latar belakang untuk mendapatkan parameter khusus program mini melalui parameter pemandangan.
Contoh di bawah:
Atas ialah kandungan terperinci Bagaimana untuk menjana kod matahari applet WeChat di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!