|
|
|
@ -1,14 +1,15 @@
|
|
|
|
|
package cc.yunxi.service.impl;
|
|
|
|
|
|
|
|
|
|
import cc.yunxi.common.exception.BizIllegalException;
|
|
|
|
|
import cc.yunxi.config.props.WxHsyProperties;
|
|
|
|
|
import cc.yunxi.config.props.WxShProperties;
|
|
|
|
|
import cc.yunxi.domain.vo.file.FileUploadRespVO;
|
|
|
|
|
import cc.yunxi.domain.vo.vxmessage.AccessToken;
|
|
|
|
|
import cc.yunxi.domain.vo.vxmessage.ResultVo;
|
|
|
|
|
import cc.yunxi.service.IRecyclerService;
|
|
|
|
|
import cc.yunxi.domain.vo.vxmessage.QRCodeVo;
|
|
|
|
|
import cc.yunxi.service.IWxService;
|
|
|
|
|
import cn.hutool.core.img.Img;
|
|
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
|
|
import cn.hutool.core.io.file.FileWriter;
|
|
|
|
|
import cc.yunxi.utils.VerifyUtil;
|
|
|
|
|
import cc.yunxi.utils.WeChatMessageUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.http.Header;
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
import cn.hutool.http.HttpResponse;
|
|
|
|
@ -21,6 +22,7 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Wx接口实现类
|
|
|
|
@ -29,98 +31,121 @@ import java.util.HashMap;
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Validated
|
|
|
|
|
public class WxServiceImpl implements IWxService {
|
|
|
|
|
|
|
|
|
|
private final String GET_QR_CODE_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=";
|
|
|
|
|
private final String DEFAULT_PAGE = "pages/selectPeople/selectPeople";
|
|
|
|
|
@Resource
|
|
|
|
|
private WxShProperties wxShProperties;
|
|
|
|
|
@Resource
|
|
|
|
|
private WxHsyProperties wxHsyProperties;
|
|
|
|
|
@Resource
|
|
|
|
|
private FileServiceImpl fileService;
|
|
|
|
|
@Resource
|
|
|
|
|
private WeChatMessageUtil weChatMessageUtil;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void syncTest() {
|
|
|
|
|
log.info("等待main执行");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 生成设备二维码
|
|
|
|
|
// 设备编码
|
|
|
|
|
@Override
|
|
|
|
|
public void generateDeviceQRCode(String strDevCode, String strPage){
|
|
|
|
|
log.info("--- generateDeviceQRCode(设备编码): " + strDevCode + " ---");
|
|
|
|
|
String token = this.getToken("WxSh");
|
|
|
|
|
HttpResponse resDevQrCode = getResDevQrCode(token, strDevCode, strPage);
|
|
|
|
|
saveDevQrCode(strDevCode, resDevQrCode);
|
|
|
|
|
public FileUploadRespVO generateDeviceQRCode(QRCodeVo qrCodeVo) {
|
|
|
|
|
log.info("--- generateDeviceQRCode(设备编码): " + qrCodeVo.getDeviceCode() + " ---");
|
|
|
|
|
String token = getToken("client");
|
|
|
|
|
String page = qrCodeVo.getPage();
|
|
|
|
|
if (StrUtil.isBlank(page)) {
|
|
|
|
|
qrCodeVo.setPage(DEFAULT_PAGE);
|
|
|
|
|
}
|
|
|
|
|
HttpResponse resDevQrCode = getResDevQrCode(token, qrCodeVo.getDeviceCode(), qrCodeVo.getPage());
|
|
|
|
|
FileUploadRespVO fileUploadRespVO = saveDevQrCode(qrCodeVo.getDeviceCode(), resDevQrCode);
|
|
|
|
|
log.info("<--- generateDeviceQRCode ");
|
|
|
|
|
return fileUploadRespVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 散户-WxSh||回收员-WxHsy 获取token
|
|
|
|
|
// strWxUserType --- WxSh|WxHsy
|
|
|
|
|
@Override
|
|
|
|
|
public String getToken(String strWxUserType) {
|
|
|
|
|
log.info("---> getToken(散户-WxSh||回收员-WxHsy 获取token)" + strWxUserType) ;
|
|
|
|
|
String result = "";
|
|
|
|
|
String strToken = "";
|
|
|
|
|
public String getToken(String endpointType) {
|
|
|
|
|
log.info("---> getToken(散户-WxSh||回收员-WxHsy 获取token)" + endpointType);
|
|
|
|
|
try {
|
|
|
|
|
if ("WxHsy".equals(strWxUserType)) {
|
|
|
|
|
HashMap<String, Object> paramMap = new HashMap<>();
|
|
|
|
|
paramMap.put("grant_type", "client_credential");
|
|
|
|
|
paramMap.put("appid", wxHsyProperties.getAppId());
|
|
|
|
|
paramMap.put("secret", wxHsyProperties.getAppSecret());
|
|
|
|
|
result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token",paramMap);
|
|
|
|
|
} else if ("WxSh".equals(strWxUserType)) {
|
|
|
|
|
HashMap<String, Object> paramMap = new HashMap<>();
|
|
|
|
|
paramMap.put("grant_type", "client_credential");
|
|
|
|
|
paramMap.put("appid", wxShProperties.getAppId());
|
|
|
|
|
paramMap.put("secret", wxShProperties.getAppSecret());
|
|
|
|
|
result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token",paramMap);
|
|
|
|
|
String result = "";
|
|
|
|
|
String token = "";
|
|
|
|
|
Map<String, Object> param = new HashMap<>();
|
|
|
|
|
param.put("grant_type", "client_credential");//固定值
|
|
|
|
|
if ("client".equals(endpointType)) {//预约端
|
|
|
|
|
param.put("appid", wxShProperties.getAppId());
|
|
|
|
|
param.put("secret", wxShProperties.getAppSecret());
|
|
|
|
|
result = HttpUtil.get(wxShProperties.getTokenUrl(), param, 2000);
|
|
|
|
|
} else if ("recycler".equals(endpointType)) {//回收端
|
|
|
|
|
param.put("appid", wxHsyProperties.getAppId());
|
|
|
|
|
param.put("secret", wxHsyProperties.getAppSecret());
|
|
|
|
|
result = HttpUtil.get(wxHsyProperties.getTokenUrl(), param, 2000);
|
|
|
|
|
} else {
|
|
|
|
|
throw new RuntimeException("微信用户类型参数错误:选用(散户-WxSh||回收员-WxHsy); 当前:" + strWxUserType);
|
|
|
|
|
throw new BizIllegalException("endpointType参数错误");
|
|
|
|
|
}
|
|
|
|
|
JSONObject resultJsonObj = JSONUtil.parseObj(result);
|
|
|
|
|
strToken = resultJsonObj.getStr("access_token");
|
|
|
|
|
JSONObject json = JSONUtil.parseObj(result);
|
|
|
|
|
token = json.getStr("access_token");
|
|
|
|
|
log.info("微信Token:" + token);
|
|
|
|
|
log.info("<--- getToken");
|
|
|
|
|
return token;
|
|
|
|
|
} catch (RuntimeException e) {
|
|
|
|
|
// log.error("getToken:" + e.toString());
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
log.error("getToken:" + e.getMessage());
|
|
|
|
|
throw new BizIllegalException("获取微信平台token失败!");
|
|
|
|
|
}
|
|
|
|
|
log.info("微信Token:" + strToken);
|
|
|
|
|
log.info("<--- getToken") ;
|
|
|
|
|
return strToken;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取设备微信二维码Res
|
|
|
|
|
// wxToken --- 微信token
|
|
|
|
|
// devCode --- 设备码
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse getResDevQrCode(String wxToken, String devCode, String strPage) {
|
|
|
|
|
log.info("---> getResDevQrCode(获取设备微信二维码Res):微信token:" + wxToken + ",设备码:"+ devCode + ",跳转页:" + strPage) ;
|
|
|
|
|
HttpResponse res = null;
|
|
|
|
|
public HttpResponse getResDevQrCode(String wxToken, String devCode, String page) {
|
|
|
|
|
log.info("---> getResDevQrCode(获取设备微信二维码Res):微信token:" + wxToken + ",设备码:" + devCode + ",跳转页:" + page);
|
|
|
|
|
try {
|
|
|
|
|
JSONObject jsonObjA = JSONUtil.createObj()
|
|
|
|
|
.put("scene", devCode)
|
|
|
|
|
.put("page", strPage)
|
|
|
|
|
.put("check_path", false)
|
|
|
|
|
.put("env_version", "develop");
|
|
|
|
|
String jsonStrA = jsonObjA.toStringPretty();
|
|
|
|
|
res = HttpRequest.post("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+wxToken).header(Header.USER_AGENT, "yhs")
|
|
|
|
|
.body(jsonStrA)
|
|
|
|
|
.timeout(20000)
|
|
|
|
|
HttpResponse res = null;
|
|
|
|
|
Map<String, Object> param = new HashMap<>();
|
|
|
|
|
param.put("scene", devCode);
|
|
|
|
|
param.put("page", page);
|
|
|
|
|
param.put("check_path", false);
|
|
|
|
|
param.put("env_version", wxShProperties.getEnvVersion());//客户端
|
|
|
|
|
res = HttpRequest.post(GET_QR_CODE_URL + wxToken).header(Header.USER_AGENT, "yhs")
|
|
|
|
|
.body(JSONUtil.toJsonStr(param))
|
|
|
|
|
.timeout(2000)
|
|
|
|
|
.execute();
|
|
|
|
|
log.info("响应状态:" + res.getStatus());
|
|
|
|
|
log.info("Cache-Control:" + res.header("Cache-Control"));
|
|
|
|
|
log.info("Content-disposition:" + res.header("Content-disposition"));
|
|
|
|
|
log.info("Content-Length:" + res.header("Content-Length"));
|
|
|
|
|
log.info("Content-Type:" + res.header("Content-Type"));
|
|
|
|
|
return res;
|
|
|
|
|
// log.info("响应状态:" + res.getStatus());
|
|
|
|
|
// log.info("Cache-Control:" + res.header("Cache-Control"));
|
|
|
|
|
// log.info("Content-disposition:" + res.header("Content-disposition"));
|
|
|
|
|
// log.info("Content-Length:" + res.header("Content-Length"));
|
|
|
|
|
// log.info("Content-Type:" + res.header("Content-Type"));
|
|
|
|
|
// log.info("Response Body:" + res.body());
|
|
|
|
|
log.info("<--- getResDevQrCode") ;
|
|
|
|
|
// log.info("<--- getResDevQrCode");
|
|
|
|
|
} catch (RuntimeException e) {
|
|
|
|
|
// log.error("getToken:" + e.toString());
|
|
|
|
|
log.error(":" + e.getMessage());
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
throw new BizIllegalException("生成设备小程序二维码失败!");
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设备二维码保存
|
|
|
|
|
// strDevCode --- 设备编码
|
|
|
|
|
// resDevQrCode --- 微信二维码Res
|
|
|
|
|
@Override
|
|
|
|
|
public void saveDevQrCode(String strDevCode, HttpResponse resDevQrCode){
|
|
|
|
|
log.info("---> saveDevQrCode(设备二维码保存)") ;
|
|
|
|
|
try {
|
|
|
|
|
String filePath = System.getProperty("user.dir") + java.io.File.separator +"qrcode"+ java.io.File.separator + "dev" + java.io.File.separator + "dev-" + strDevCode + ".jpg";
|
|
|
|
|
Img.from(resDevQrCode.bodyStream()).write(FileUtil.file(filePath));
|
|
|
|
|
} catch (RuntimeException e) {
|
|
|
|
|
// log.error("getToken:" + e.toString());
|
|
|
|
|
}
|
|
|
|
|
log.info("<--- saveDevQrCode") ;
|
|
|
|
|
public FileUploadRespVO saveDevQrCode(String strDevCode, HttpResponse response) {
|
|
|
|
|
// log.info("---> saveDevQrCode(设备二维码保存)");
|
|
|
|
|
// try {
|
|
|
|
|
// byte[] bytes = response.bodyBytes();
|
|
|
|
|
// return fileService.uploadImage(bytes, strDevCode);
|
|
|
|
|
// String filePath = System.getProperty("user.dir") + java.io.File.separator + "qrcode" + java.io.File.separator + "dev" + java.io.File.separator + "dev-" + strDevCode + ".jpg";
|
|
|
|
|
// Img.from(response.bodyStream()).write(FileUtil.file(filePath));
|
|
|
|
|
// } catch (RuntimeException e) {
|
|
|
|
|
//// log.error("getToken:" + e.toString());
|
|
|
|
|
// }
|
|
|
|
|
// log.info("<--- saveDevQrCode");
|
|
|
|
|
|
|
|
|
|
byte[] bytes = response.bodyBytes();
|
|
|
|
|
return fileService.uploadImage(bytes, strDevCode + ".jpg");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|