package com.caimei.controller.user; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.caimei.entity.CmMallOperationUser; import com.caimei.entity.CmWxJsonModel; import com.caimei.service.user.LoginService; import com.caimei.utils.HttpRequest; import com.caimei.utils.SessionHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 登录 */ @Controller @RequestMapping("/login") public class LoginController { protected static final Logger logger = LoggerFactory.getLogger(LoginController.class); @Autowired private LoginService loginService; @Value("${miniprogram.ValidTime}") private Integer ValidTime; @Autowired private Environment env; public CmWxJsonModel login(String code, HttpServletRequest request, Integer organizeID) { logger.info("Start get SessionKey"); CmWxJsonModel res = CmWxJsonModel.newInstance(); Map map = new HashMap<>(); String referer = request.getHeader("Referer"); //获取当前微信小程序的环境 logger.info("referer-is----:" + referer); map.put("referer", referer); String requestUrl = "https://api.weixin.qq.com/sns/jscode2session"; Map requestUrlParam = new HashMap(); requestUrlParam.put("appid", env.getProperty("miniprogram.AppId" + organizeID));//小程序appId logger.info("" + env.getProperty("miniprogram.AppId" + organizeID)); requestUrlParam.put("secret", env.getProperty("miniprogram.AppSecret" + organizeID));//小程序appsecret requestUrlParam.put("js_code", code);//小程序端返回的code requestUrlParam.put("grant_type", "authorization_code");//默认参数 //发送post请求读取调用微信接口获取openid用户唯一标识 String infos; try { infos = HttpRequest.sendPost(requestUrl, requestUrlParam); } catch (Exception e) { res.setData(map); return res.error("服务器内部异常"); } //解析相应内容(转换成json对象) JSONObject jsonObject = JSON.parseObject(infos); String openid = jsonObject.getString("openid"); logger.info("openid----->" + openid); String session_key = jsonObject.getString("session_key"); String errcode = jsonObject.getString("errcode"); String errmsg = jsonObject.getString("errmsg"); if (!StringUtils.isEmpty(errcode) && (errcode.equals("-1") || errcode.equals("40029") || errcode.equals("45011"))) { res.setMsg(errmsg); res.setData(map); map.put("sessionKey", session_key); res.setCode("-1"); return res; } return res.success(openid); } /** * 判断是否是游客 * * @param code * @param request * @return */ @ResponseBody @RequestMapping("/doLogin") public CmWxJsonModel doLogin(@RequestParam(value = "code", required = true) String code, @RequestParam(value = "userOrganizeID") Integer userOrganizeID, HttpServletRequest request) { CmWxJsonModel res = CmWxJsonModel.newInstance(); CmWxJsonModel model = login(code, request, userOrganizeID); if (model.getCode().equals("-1")) { return model; } String openid = (String) model.getData(); //传入session,返回用户信息,更新sessionId HttpSession session = SessionHelper.getSession(); String sessionId = session.getId(); session.setAttribute("openid", openid); session.setAttribute("organizeID", userOrganizeID); CmMallOperationUser operationUser = loginService.doLogin(openid, userOrganizeID); if (operationUser == null) { String mobile = loginService.cellPhone(userOrganizeID); return res.error("-1", mobile, "游客,请登录"); } operationUser.setSessionId(sessionId); return res.success("1", operationUser); } /** * 判断邀请码是否有效 * * @param invitationCode 邀请码 * @param userOrganizeID 组织id * @return 0: 请输入邀请码 * -2: 邀请码已失效 * -3: 邀请码已被使用 */ @RequestMapping("/isEnabled") @ResponseBody public CmWxJsonModel isEnabled(String invitationCode, Integer userOrganizeID) { CmWxJsonModel res = CmWxJsonModel.newInstance(); String mobile = loginService.cellPhone(userOrganizeID); if (invitationCode == null || invitationCode.equals("")) { return res.error("0", mobile); } CmMallOperationUser operationUser = loginService.isEnabled(invitationCode, userOrganizeID); if (operationUser == null) { return res.error("-1", "邀请码错误"); } Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(operationUser.getInvitationCodeTime()); calendar.add(Calendar.DATE, ValidTime); if (operationUser.getStatus().equals("1") && date.getTime() > calendar.getTime().getTime() && operationUser.getDelFlag().equals("0")) { return res.error("-2", mobile); } if (operationUser.getStatus().equals("2") && operationUser.getDelFlag().equals("0")) { return res.error("-3", mobile); } if (operationUser.getClubStatus().equals("91")) { return res.error("-1", "您所在的会所已下线"); } if (!operationUser.getDelFlag().equals("0")) { return res.error("-1", "您的账号已下线"); } return res.error("1", "邀请码通过"); } /** * 注册并登录 * * @param code * @param request * @return */ @RequestMapping("/register") @ResponseBody public CmWxJsonModel register(@RequestParam(value = "code", required = true) String code, CmMallOperationUser operationUser, HttpServletRequest request) { CmWxJsonModel model = login(code, request, operationUser.getUserOrganizeID()); if (model.getCode().equals("-1")) { return model; } String openid = (String) model.getData(); operationUser.setOpenid(openid); CmWxJsonModel jsonModel = loginService.update(operationUser, request); return jsonModel; } }