package com.ljsd.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ljsd.pojo.VerifyParams; import com.ljsd.util.AppConstans; import com.ljsd.util.HttpUtils; import com.ljsd.util.TimeUtil; import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; public class AiWanVerifyService extends AbstractVerifyService { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractVerifyService.class); public static int isTestLan = 0; public static final String app_key = "FKzLkGPIyMwYjXhRYfMWBsqikOfSPLkX"; public static final String app_id = "lbqitk9b39vk9ee5"; public AiWanVerifyService(String sign) { super(sign); } @Override public boolean verify(HttpServletResponse response, HttpServletRequest request, String admin, String platform, String pid, String openId, String token) { try { //如果是自己人不需要验证了 if (AppConstans.appsecret.equals(admin)) { return true; } //test if (isTestLan == 1) { boolean result = loginVerfifyByTestLan(openId, token); if (!result) { response.sendError(400, "verify fail"); LOGGER.error("test verify fail"); return false; } } //正式 切不是pc else if (!"3".equals(platform)) { String sub_channel = request.getParameter("sub_channel"); boolean result = false; if (sub_channel == null || sub_channel.equals("")) { //测试服构建参数 if (sub_channel.equals("1000")) { VerifyParams params = new VerifyParams(); VerifyParams testParam = getTestParam(params, request, openId, token); result = verifyTest(testParam); } // //商务服 // else if(sub_channel.equals("20201222")){ // //result = loginVerfifyShangwu("MHT", openId, token, MHTSDKConstans.rhappIdshangwu); // } //正式服appId else { VerifyParams params = new VerifyParams(); VerifyParams formatParam = getFormatParam(params, request, openId, token); result = verifyFormat(formatParam); } } if (!result) { response.sendError(400, "verify fail"); LOGGER.error("verify fail"); return false; } } } catch (Exception e) { e.printStackTrace(); } return true; } @Override public boolean verifyTest(VerifyParams params) { return doVerify(params); } @Override public boolean verifyFormat(VerifyParams params) { return doVerify(params); } @Override boolean doVerify(VerifyParams params) { LOGGER.info("AiWanVerifyService登录验证-->{}", params.getOpenId()); String url = "https://apicn-sdk.jxywl.cn/user/auth"; Map parms = new HashMap<>(); parms.put("app_id", app_id); parms.put("account", params.getOpenId()); parms.put("token", params.getToken()); parms.put("time", params.getTime()); parms.put("sign", params.getParamSign()); boolean result = false; try { String r = HttpUtils.doPost(url, parms); JSONObject jsonObject = JSON.parseObject(r); int errno = jsonObject.getIntValue("code"); LOGGER.info("AiWanVerifyService请求结果:{}", r); if (errno == 200) { result = true; } } catch (IOException e) { LOGGER.info("AiWanVerifyService验证失败,IOException"); } return result; } @Override protected VerifyParams getTestParam(VerifyParams params, HttpServletRequest request, String openId, String token) { return getFormatParam(params, request, openId, token); } @Override protected VerifyParams getFormatParam(VerifyParams params, HttpServletRequest request, String openId, String token) { String time = String.valueOf(TimeUtil.nowInt()); SortedMap map = new TreeMap<>(); map.put("app_id", app_id); map.put("account", openId); map.put("token", token); map.put("time", time); params.setAppId(app_id); params.setOpenId(openId); params.setToken(token); params.setTime(time); params.setParamSign(getSign(map)); return params; } private static String getSign(Map map) { if (map == null || map.isEmpty()) { return null; } StringBuilder builder = new StringBuilder(); for (Map.Entry entry : map.entrySet()) { builder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String substring = builder.substring(0, builder.length() - 1); LOGGER.info("AiWan参数拼装sign(未加密):" + substring + app_key); return DigestUtils.md5Hex(substring + app_key); } // public static void main(String[] args) throws Exception { // SortedMap map = new TreeMap<>(); // map.put("app_id", "ovdqy3we3nekjrz8"); // map.put("account", "2020092315165768"); // map.put("token", "NwVe8n4zMizM1Mzg3MzZfMTY"); // map.put("time", "1600845363"); // System.out.println("================================================"); // System.out.println("自己计算的sign:" + getSign(map)); // System.out.println("渠道提供的sign:" + "0aea0c2c60bb6988f83d8a8023906af5"); // } }