版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36652619/article/details/86554144
因为只是调api很简单,这里不多说直接上代码:
public ServerResponse<Object> qr_code_m_program(String scene, String path, HttpServletRequest request){
String token = request.getHeader("token");
//验证参数是否为空
List<Object> l1 = new ArrayList<Object>(){{
add(token);
}};
String CheckNull = CommonFunc.CheckNull(l1);
if (CheckNull != null) return ServerResponse.createByErrorMessage(CheckNull);
//验证token
String uid = CommonFunc.CheckToken(request,token);
if (uid == null){
//未找到
return ServerResponse.createByErrorMessage("身份认证错误!");
}else {
try{
//获取accessToken
AccessToken access_token = CommonFunc.getAccessToken();
Map<String, Object> params = new HashMap<>();
params.put("scene", scene); //参数
params.put("page", path); //位置
params.put("width", 280);
params.put("is_hyaline", true);
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token.getAccessToken()); // 接口
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
String body = JSON.toJSONString(params); //必须是json模式的 post
StringEntity entity;
entity = new StringEntity(body);
entity.setContentType("image/png");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
InputStream inputStream = response.getEntity().getContent();
// 将获取流转为base64格式
String result = "";
byte[] data = null;
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inputStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
data = swapStream.toByteArray();
result = new String(Base64.getEncoder().encode(data));
return ServerResponse.createBySuccess("成功",result);
}catch (Exception e){
return ServerResponse.createByErrorMessage("非法操作"+e.getMessage());
}
}
}
工具类获取AccessToken:
public static AccessToken getAccessToken() {
AccessToken token = null;
String requestUrl = "https://api.weixin.qq.com/cgi-bin/token";
String param = "grant_type=client_credential&appid="+ WxConfig.wx_app_id +"&secret="+ WxConfig.wx_app_secret;
// 发起GET请求获取凭证
JSONObject jsonObject = JSON.parseObject( UrlUtil.sendGet(requestUrl, param));
if (null != jsonObject) {
try {
token = new AccessToken();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInteger("expires_in"));
} catch (JSONException e) {
token = null;
// 获取token失败
System.out.println("获取token失败 errcode:{"+jsonObject.getInteger("errcode")+"} errmsg:{"+jsonObject.getString("errmsg")+"}");
// log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInteger("errcode"), jsonObject.getString("errmsg"));
}
}
return token;
}
AccessToken类:
public class AccessToken {
//接口访问凭证
private String accessToken;
//接口有效期,单位:秒
private int expiresIn;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public int getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(int expiresIn) {
this.expiresIn = expiresIn;
}
}
结果: