68 lines
3.0 KiB
Java
68 lines
3.0 KiB
Java
package com.ycwl.basic.utils;
|
|
|
|
import cn.hutool.http.HttpUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import org.apache.http.HttpEntity;
|
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
import org.apache.http.client.methods.HttpPost;
|
|
import org.apache.http.entity.StringEntity;
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
import org.apache.http.impl.client.HttpClients;
|
|
import org.apache.http.util.EntityUtils;
|
|
|
|
import java.io.FileOutputStream;
|
|
import java.util.Date;
|
|
|
|
public class WxMpUtil {
|
|
private static final String GET_WXA_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacode?access_token=%s";
|
|
|
|
private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
|
|
private static String ACCESS_TOKEN = "";
|
|
private static Date expireTime = new Date();
|
|
|
|
private static String getAccessToken(String appId, String appSecret) {
|
|
if (ACCESS_TOKEN != null && !ACCESS_TOKEN.isEmpty()) {
|
|
if (expireTime.getTime() > System.currentTimeMillis()) {
|
|
return ACCESS_TOKEN;
|
|
}
|
|
}
|
|
String url = String.format(ACCESS_TOKEN_URL, appId, appSecret);
|
|
String response = HttpUtil.get(url);
|
|
JSONObject jsonObject = JSONObject.parseObject(response);
|
|
ACCESS_TOKEN = jsonObject.getString("access_token");
|
|
expireTime = new Date(System.currentTimeMillis() + jsonObject.getInteger("expires_in") * 1000 / 2);
|
|
return ACCESS_TOKEN;
|
|
}
|
|
|
|
public static void generateWXAQRCode(String appId, String appSecret, String envVersion, String path, String filePath) throws Exception {
|
|
String url = String.format(GET_WXA_CODE_URL, getAccessToken(appId, appSecret));
|
|
CloseableHttpClient httpClient = HttpClients.createDefault();
|
|
HttpPost httpPost = new HttpPost(url);
|
|
JSONObject json = new JSONObject();
|
|
json.put("env_version", envVersion);
|
|
json.put("path", path);
|
|
json.put("width", 1000);
|
|
StringEntity entity = new StringEntity(json.toJSONString(), "utf-8");
|
|
httpPost.setEntity(entity);
|
|
httpPost.setHeader("Content-Type", "application/json");
|
|
|
|
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
|
if (response.getStatusLine().getStatusCode() != 200) {
|
|
expireTime = new Date();
|
|
throw new Exception("获取小程序码失败");
|
|
}
|
|
HttpEntity responseEntity = response.getEntity();
|
|
if (responseEntity != null) {
|
|
byte[] bytes = EntityUtils.toByteArray(responseEntity);
|
|
try (FileOutputStream fos = new FileOutputStream(filePath)) {
|
|
fos.write(bytes);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
generateWXAQRCode("wxe7ff26af70bfc37c", "5252fbbc68513bc77b7cc0052b9f9695", "trial", "pages/home/index?scenicId=3946669713328836608", "cxzh_t.jpg");
|
|
}
|
|
}
|