package com.nuvole.util;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.http.HttpUtil;
|
import com.nuvole.common.domain.wx.PushMsg;
|
import com.nuvole.constants.ServiceConstants;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.httpclient.HttpClient;
|
import org.apache.commons.httpclient.HttpStatus;
|
import org.apache.commons.httpclient.methods.PostMethod;
|
import org.apache.commons.httpclient.params.HttpMethodParams;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpMethod;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.io.IOException;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @Description: 外网接口请求工具类(微信)
|
* @Author: liujun
|
* @Date: 2019-07-25 11:59
|
**/
|
@Slf4j
|
public class WxCallUtil {
|
|
/**
|
* 获取临时登录凭证code
|
*
|
* @param jsCode
|
* @return
|
*/
|
public static String getOpenidSessionKey(String jsCode) {
|
String url = ServiceConstants.SERVICE_JSCODE2SESSION_URL;
|
Map<String, Object> paramMap = new HashMap<>(1);
|
paramMap.put("jsCode", jsCode);
|
return HttpUtil.get(url, paramMap);
|
}
|
|
/**
|
* 获取AccessToken
|
*
|
* @return
|
*/
|
public static String getAccessToken() {
|
String url = ServiceConstants.SERVICE_TOKEN_URL;
|
String result = HttpUtil.get(url);
|
log.info("getAccessToken 返回值: {}", result);
|
return result;
|
}
|
|
/**
|
* 获取 jsapi_ticket
|
*
|
* @return
|
*/
|
public static String getJsapTicket(String accessToken) {
|
String url = ServiceConstants.SERVICE_JSAPITICKET_URL;
|
Map<String, Object> paramMap = new HashMap<>(1);
|
paramMap.put("accessToken", accessToken);
|
return HttpUtil.get(url, paramMap);
|
}
|
|
/**
|
* 微信公众号获取access_token
|
*
|
* @param code
|
* @return
|
*/
|
public static String getWechatAccessToken(String code) {
|
String url = ServiceConstants.SERVICE_ACCESS_TOKEN_URL;
|
Map<String, Object> paramMap = new HashMap<>(1);
|
paramMap.put("code", code);
|
return HttpUtil.get(url, paramMap);
|
}
|
|
/**
|
* 微信公众号获取用户信息
|
*
|
* @param accessToken
|
* @param openId
|
* @return
|
*/
|
public static String getWechatUserInfo(String accessToken, String openId) {
|
String url = ServiceConstants.SERVICE_USERINFO_URL;
|
Map<String, Object> paramMap = new HashMap<>(2);
|
paramMap.put("accessToken", accessToken);
|
paramMap.put("openId", openId);
|
return HttpUtil.get(url, paramMap);
|
}
|
|
/**
|
* 获取小程序码(前提是已发布)
|
*
|
* @param accessToken
|
* @param scene
|
* @param width
|
* @param page
|
* @return
|
*/
|
public static byte[] getQRcode(String accessToken, String scene, int width, String page) {
|
byte[] result = null;
|
String url = ServiceConstants.SERVICE_WXACODEUNLIMIT_URL;
|
if (false) {
|
HttpClient client = new HttpClient();
|
PostMethod method = new PostMethod(url);
|
HttpMethodParams paramMap = new HttpMethodParams();
|
paramMap.setParameter("accessToken", accessToken);
|
paramMap.setParameter("scene", scene);
|
paramMap.setParameter("width", width);
|
paramMap.setParameter("page", page);
|
method.setParams(paramMap);
|
try {
|
int statusCode = client.executeMethod(method);
|
if (statusCode != HttpStatus.SC_OK) {
|
log.info("Method failed: " + method.getStatusLine());
|
} else {
|
// 返回响应消息
|
result = method.getResponseBodyAsString().getBytes(method.getResponseCharSet());
|
}
|
method.releaseConnection();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
} else {
|
RestTemplate rest = new RestTemplate();
|
try {
|
Map<String, Object> param = new HashMap<>();
|
url = url + "?accessToken=" + accessToken + "&scene=" + scene + "&width=" + width + "&page=" + page;
|
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
HttpEntity requestEntity = new HttpEntity(param, headers);
|
ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class,
|
new Object[0]);
|
result = entity.getBody();
|
/*BASE64Encoder encoder = new BASE64Encoder();
|
String imageStr = encoder.encode(result);
|
imageStr = HtmlUtils.htmlEscape(imageStr);
|
BASE64Decoder decoder = new BASE64Decoder();
|
result = decoder.decodeBuffer(imageStr);*/
|
} catch (Exception e) {
|
log.error("调用小程序生成微信永久小程序码URL接口异常", e);
|
}
|
}
|
return result;
|
}
|
|
/**
|
* 微信推送消息
|
*
|
* @param openId
|
* @param formId
|
* @param templateId
|
* @param page
|
* @param items
|
*/
|
public static void push(String openId, String formId, String templateId, String page, List<String> items) {
|
String url = ServiceConstants.SERVICE_TEMPLATE_SEND_URL;
|
Map<String, Object> paramMap = new HashMap<>(5);
|
paramMap.put("openId", openId);
|
paramMap.put("formId", formId);
|
paramMap.put("templateId", templateId);
|
paramMap.put("page", page);
|
paramMap.put("items", CommonUtil.listToString(items));
|
HttpUtil.get(url, paramMap);
|
}
|
|
|
/* *
|
* 微信小程序订阅消息推送
|
*
|
* @author lc
|
* @date 2020/1/2 14:28
|
*/
|
public static void pushSend(PushMsg pushMsg, String accessToken) {
|
String url = ServiceConstants.SERVICE_SUBSCRIBER_SEND_URL;
|
Map<String, Object> paramMap = BeanUtil.beanToMap(pushMsg);
|
paramMap.put("accessToken", accessToken);
|
HttpUtil.get(url, paramMap);
|
}
|
}
|