- 什么是小程序碼劫拗?
小程序碼通過后臺接口獲取轧叽,掃描小程序碼可以跳轉(zhuǎn)到小程序?qū)?yīng)的頁面所有生成的小程序碼永久有效,可放心使用愉舔。
- 獲取小程序碼的方式
- 注意事項(xiàng)
- 接口只能生成已發(fā)布的小程序碼,只發(fā)了體驗(yàn)版的小程序勃黍,也不能生成小程序碼
- 獲取有限制的小程序碼接口 加上 獲取小程序二維碼接口宵统,總共生成的碼數(shù)量限制為 100,000,請謹(jǐn)慎調(diào)用覆获。
- 獲取無限制的小程序碼 調(diào)用分鐘頻率受限(5000次/分鐘)榜田,如需大量小程序碼,建議預(yù)生成锻梳。
- 生成小程序碼代碼
public class MiniAppUtil {
/**
* 獲取小程序碼地址箭券,適用于需要的碼數(shù)量極多的業(yè)務(wù)場景 通過該接口生成的小程序碼,永久有效疑枯,數(shù)量暫無限制辩块。
*/
public static final String GET_WXACODE_UNLIMIT_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s";
/**
* 獲取小程序碼,適用于需要的碼數(shù)量較少的業(yè)務(wù)場景。 通過該接口生成的小程序碼废亭,永久有效国章,有數(shù)量限制
*/
public static final String GET_WXACODE_URL = "https://api.weixin.qq.com/wxa/getwxacode?access_token=%s";
/**
* 獲取無限制小程序碼
* @param sceneStr
* @param page
* @param filePath
* @param uploadDomainUrl
* @return 生成成功的小程序碼http訪問路徑
*/
public static String getWxacodeUnlimit(String sceneStr, String page, String filePath, String uploadDomainUrl, String accessToken)throws Exception{
return getWxacode(sceneStr, page,filePath, uploadDomainUrl, true, accessToken);
}
/**
* 獲取有限制小程序碼
* @param page
* @param filePath
* @param uploadDomainUrl
* @return 生成成功的小程序碼http訪問路徑
*/
public static String getWxacodeLimit(String page, String filePath, String uploadDomainUrl, String accessToken)throws Exception{
return getWxacode(null,page, filePath, uploadDomainUrl, false, accessToken);
}
/**
* 從微信上獲取小程序碼
* @param sceneStr 場景值
* @param page 掃碼后跳轉(zhuǎn)到的小程序頁面, 可選 不填默認(rèn)小程序首頁
* @param filePath 小程序碼圖片存放路徑
* @param uploadDomainUrl http訪問目錄
* @param isUnlimit 是否有數(shù)量限制的小程序碼,如果是沒有限制的豆村,需要傳場景值 sceneStr
* @return String
* @throws Exception
*/
private static String getWxacode(String sceneStr, String page, String filePath, String uploadDomainUrl, boolean isUnlimit, String accessToken) throws Exception{
try {
String fileName = System.currentTimeMillis() + ".jpg";
Map<String, Object> params = new HashMap<>();
params.put("width", 430);//二維碼寬度
String url = String.format(GET_WXACODE_URL, accessToken);
if(isUnlimit){
if(StringUtil.isNotEmpty(page)) {
params.put("page", page);//要跳轉(zhuǎn)的頁面,正式發(fā)布后才能傳值
}
params.put("scene", sceneStr);//sceneStr值長度有限制液兽,最大32個可見字符
url = String.format(GET_WXACODE_UNLIMIT_URL, accessToken);
}else {
params.put("path", page);
}
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
String body = JSON.toJSONString(params);
StringEntity entity;
entity = new StringEntity(body);
entity.setContentType("image/png");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
if(!response.getEntity().isStreaming()){ //如果小程序碼一直異常時(shí),可以放開if判斷掌动,輸出異常錯誤信息
log.error("getWxacode exception:{}", EntityUtils.toString(response.getEntity(), "UTF-8"));
return null;
}
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
try(InputStream inputStream = response.getEntity().getContent();
FileOutputStream out = new FileOutputStream(filePath + fileName)) {
byte[] buffer = new byte[8192];
int bytesRead = 0;
while((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
}
return uploadDomainUrl + fileName;
} catch (Exception e) {
log.error("getWxacode exception:", e);
return null;
}
}
}