You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bsdgy-server/src/main/java/com/kiisoo/ic/wx/controller/WxAccessController.java

367 lines
13 KiB
Java

package com.kiisoo.ic.wx.controller;
import com.kiisoo.ic.common.BaseController;
import com.kiisoo.ic.common.utils.SignUtils;
import com.kiisoo.ic.common.utils.WeixinApi;
import com.kiisoo.ic.employee.entity.QrCodeDO;
import com.kiisoo.ic.employee.entity.QrCodeVO;
//import com.kiisoo.ic.employee.service.QrCodeService;
import com.kiisoo.ic.employee.service.QrCodeService;
import com.kiisoo.ic.wx.entity.ContactWayDTO;
import com.kiisoo.ic.wx.service.WxAccessService;
import com.kiisoo.ic.wx.service.WxLoginService;
import com.kiisoo.ic.wx.service.WxResponseService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*
* @author yechenhao
* @date 2020/03/11 15:32
*/
@Slf4j
@Controller
@RequestMapping("/qy")
public class WxAccessController extends BaseController {
@Autowired
private WxAccessService wxAccessService;
@Autowired
private WxLoginService loginService;
@Autowired
private WxResponseService wxResponseService;
@Autowired
private QrCodeService qrCodeService;
private String loginPageUrl = "http://localhost:8311/kiisoo-ic-ui";
private String baseUrl = "http://jdxdev.vipgz4.idcfengye.com/kiisoo-ic";
/**
*
*
* @param url
* @return urlticket
* @author dexiang.jiang
* @date 2020/03/11 15:44
*/
@RequestMapping(value = "/wechat/oauth", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> getWxSign(@RequestParam("url") String url) {
try {
WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
String ticket = config.getJsapiTicket();
Map<String, Object> map = SignUtils.sign(ticket, url);
return data(map);
} catch (Exception e) {
log.error("by get wxSign qy weixin oauth error ", e);
return fail();
}
}
/**
* codeID
*
* @param response
*/
@RequestMapping(value = "/wechat/register", method = RequestMethod.GET)
@ResponseBody
public void registerSmall(HttpServletResponse response) {
try {
WxCpService wxCpService = new WxCpServiceImpl();
String url = wxCpService.getOauth2Service().buildAuthorizationUrl(baseUrl + "/qy/qywx/oauth", "111999");
response.sendRedirect(url);
} catch (Exception e) {
log.error("Exception", e);
}
}
/**
* codeIDopenID
*/
@RequestMapping(value = "/qywx/oauth", method = RequestMethod.GET)
@ResponseBody
public void wechat(HttpServletRequest request, HttpServletResponse response) {
String code = request.getParameter("code");
// 先获取OPENID
try {
WxCpService wxCpService = new WxCpServiceImpl();
//TODO 企业微信认证登录url订单详情项目
WxCpOauth2UserInfo res = wxCpService.getOauth2Service().getUserInfo(code);
String userId = res.getUserId();
//根据企业微信id找到相关账号密码
Map<String, String> loginInfo = loginService.getLoginInfoByQywxUserId(userId);
String redirectUri;
if (loginInfo == null || StringUtils.isBlank(loginInfo.get("login")) || StringUtils.isBlank(loginInfo.get("password"))) {
redirectUri = loginPageUrl + "/login?relition=false&qywxUserId=" + userId;
} else {
String login = loginInfo.get("login");
String password = loginInfo.get("password");
redirectUri = loginPageUrl + "/login?relition=true&login=" + login + "&password=" + password + "&qywxUserId=" + userId;
}
response.sendRedirect(redirectUri);
} catch (Exception e) {
log.error("微信验证失败", e);
}
}
/**
*
*
* @param login
* @param password
* @return /
*/
@RequestMapping(value = "/account", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> loginAccount(@RequestParam("login") String login, @RequestParam("password") String password,
@RequestParam(value = "isMD5", required = false, defaultValue = "false") Boolean isMD5) {
try {
Map<String, Object> resultMap = new HashMap<>();
// LoginBean loginBean = loginService.login(login, password, isMD5);
// resultMap.put("code", loginBean.getLoginInfo().get("code"));
// resultMap.put("results", loginBean);
// resultMap.put("success", Boolean.TRUE);
return resultMap;
} catch (Exception e) {
log.error("登录失败", e);
return fail();
}
}
/**
*
*
* @param login
* @param password
* @param qywxUserId
* @return /
*/
@RequestMapping(value = "/account/bind", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> loginAccountBind(@RequestParam("login") String login, @RequestParam("password") String password,
@RequestParam("qywxUserId") String qywxUserId) {
try {
Map<String, Object> resultMap = new HashMap<>();
// LoginBean loginBean = loginService.login(login, password, false);
// resultMap.put("code", loginBean.getLoginInfo().get("code"));
// if (LoginEnum.LOGIN_SUCCEED.getCode().equals(loginBean.getLoginInfo().get("code"))) {
// loginService.bindQywxUserIdByUserId(loginBean.getUserId(), qywxUserId);
// }
// resultMap.put("results", loginBean);
// resultMap.put("success", Boolean.TRUE);
return resultMap;
} catch (Exception e) {
log.error("登录失败", e);
return fail();
}
}
/**
*
*
* @param request
* @param signature
* @param timestamp
* @param nonce
* @return
* @throws Exception
*/
@RequestMapping(value = "/contact/handle", produces = {"application/xml;charset=UTF-8"})
@ResponseBody
public Object handlerMessage(HttpServletRequest request, @RequestParam(name = "msg_signature") String signature,
String timestamp, String nonce) throws Exception {
try {
//将数据输入转为String
request.setCharacterEncoding("UTF-8");
StringBuilder builder = new StringBuilder();
ServletInputStream input = request.getInputStream();
int len = 0;
byte[] buffer = new byte[1024];
while (-1 != (len = input.read(buffer))) {
builder.append(new String(buffer, 0, len, "UTF-8"));
}
//解析并获取返回
String response = wxResponseService.contactHandleParse(signature, timestamp, nonce, builder.toString());
return response;
} catch (Exception e) {
log.error("企业微信微信回调数据解析失败", e);
return null;
}
}
/**
*
*
* @param request
* @param signature
* @param timestamp
* @param nonce
* @return
* @author dexiang.jiang
* @date 2020/03/11 15:44
*/
@RequestMapping(value = "/customer/handle", produces = {"application/xml;charset=UTF-8"})
@ResponseBody
public String customerHandle(HttpServletRequest request, @RequestParam(name = "msg_signature") String signature,
String timestamp, String nonce) {
try {
//将数据输入转为String
request.setCharacterEncoding("UTF-8");
StringBuilder builder = new StringBuilder();
ServletInputStream input = request.getInputStream();
int len = 0;
byte[] buffer = new byte[1024];
while (-1 != (len = input.read(buffer))) {
builder.append(new String(buffer, 0, len, "UTF-8"));
}
//解析并获取返回
String sEchoStr = wxResponseService.customerParse(signature, timestamp, nonce, builder.toString());
// 验证URL成功将sEchoStr返回
System.out.println(sEchoStr);
return sEchoStr;
} catch (Exception e) {
//验证URL失败错误原因请查看异常
e.printStackTrace();
}
return null;
}
/**
* -
*
* @param userid ID
* @return
* @author dexiang.jiang
* @date 2020/03/19 15:44
*/
@RequestMapping(value = "/externalcontact/list", method = RequestMethod.GET)
@ResponseBody
public String externalContact(@RequestParam("userid") String userid) {
try {
String res = WeixinApi.getExternalContact(userid);
return res;
} catch (Exception e) {
//验证URL失败错误原因请查看异常
e.printStackTrace();
}
return null;
}
/**
* -
*
* @param configId ID
* @return
* @author dexiang.jiang
* @date 2020/03/19 15:44
*/
@RequestMapping(value = "/externalcontact/contactway", method = RequestMethod.GET)
@ResponseBody
public String contactway(@RequestParam("configId") String configId) {
try {
String res = WeixinApi.getContactWay(configId);
return res;
} catch (Exception e) {
//验证URL失败错误原因请查看异常
e.printStackTrace();
}
return null;
}
/**
* -
*
* @return
* @author dexiang.jiang
* @date 2020/03/19 15:44
*/
@RequestMapping(value = "/externalcontact/add/contactway", method = RequestMethod.GET)
@ResponseBody
public QrCodeVO addContactway() {
try {
QrCodeDO contactWayDTO = new QrCodeDO();
contactWayDTO.setType(1);
contactWayDTO.setScene(2);
contactWayDTO.setScene(2);
String[] data = new String[1];
data[0] = ("JiangDeXiang");
contactWayDTO.setUser(data);
// contactWayDTO.setState("D1");
contactWayDTO.setState("D2");
QrCodeVO res = qrCodeService.getQrCode(contactWayDTO);
System.out.println(res);
return null;
} catch (Exception e) {
//验证URL失败错误原因请查看异常
e.printStackTrace();
}
return null;
}
/**
*
* @param request
* @param signature
* @param timestamp
* @param nonce
* @return
* @throws Exception
*/
@RequestMapping(value = "/res",produces = {"application/xml;charset=UTF-8"})
@ResponseBody
public Object handlerMessageTo(HttpServletRequest request, @RequestParam(name = "msg_signature") String signature,
String timestamp, String nonce) throws Exception {
try {
//将数据输入转为String
request.setCharacterEncoding("UTF-8");
StringBuilder builder = new StringBuilder();
ServletInputStream input = request.getInputStream();
int len = 0;
byte[] buffer = new byte[1024];
while(-1!=(len=input.read(buffer)))
{
builder.append(new String(buffer,0,len,"UTF-8"));
}
//解析并获取返回
String response = wxResponseService.parse(signature, timestamp, nonce, builder.toString());
return response;
}catch (Exception e){
log.error("企业微信微信回调数据解析失败",e);
return null;
}
}
}