다음 방법을 통해 미니 프로그램 썬코드 생성을 구현할 수 있습니다.
애플릿의 access_token 가져오기
경로 및 관련 매개변수 설정
getwxacodeunlimit 인터페이스를 호출하고 반환된 이미지를 로컬에 저장
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; }
지침: WeChat API 인터페이스를 호출하고 미니 프로그램의 appid 및 appsecret 매개변수를 전달하세요.
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; }
path: 코드를 스캔하여 입력한 미니 프로그램 페이지의 경로, 최대 길이는 128바이트이며, 변경할 수 없습니다. 예: 페이지/색인/색인
access_token: 미니 프로그램 인증 토큰
이 솔루션에서 생성된 미니 프로그램 Sun 코드 및 QR 코드의 총 개수는 100,000을 초과할 수 없습니다. WeChat은 해당 API 인터페이스 쿼리를 제공하지 않습니다. 사용된 수량이 수량을 초과하면 미니 프로그램이 무효화되고 WeChat은 현재 쿼리 수를 재설정할 수 없습니다. 이는 생성된 쿼리 수가 적은 시나리오에 적합합니다.
첫 번째 솔루션과 동일
/** * 生成无限制的小程序码 * @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; }
장면: 최대 32 보이는 문자 및 매개변수 형식은 직접 정의할 수 있습니다. a&b 또는 a=1&b=2
access_token: 미니 프로그램 인증 토큰
장면 매개변수의 길이는 32개만 지원하므로 문자, 매개변수가 32비트를 초과하는 경우 어떻게 처리합니까?
문제에 대한 해결책은: 작은 프로그램 매개변수 테이블을 설계하고, 생성된 매개변수를 테이블에 저장하고, 작은 프로그램 스캔 후 장면 매개변수를 이 테이블의 기본 키로 설정하여 작은 프로그램을 생성하는 것입니다. 코드, 먼저 장면 매개변수를 통해 미니 프로그램의 특정 매개변수를 얻기 위해 배경을 요청합니다.
아래 예:
위 내용은 Java로 WeChat 애플릿 Sun 코드를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!