miduo_login/src/main/java/com/ljsd/service/AiWanVerifyService.java

164 lines
6.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<String, String> 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<String, String> 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<String, String> map) {
if (map == null || map.isEmpty()) {
return null;
}
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, String> 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<String, String> 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");
// }
}