package com.nationalelectric.greenH5;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.aostarit.sgid.agent.EncryptHelper;
import com.nationalelectirc.Constant.Constant;
import com.nationalelectirc.utils.RestResult;
import com.nationalelectric.greenH5.utils.HttpClientUtil;
/**
* 概述:
*
*
* 功能:
*
*
* @author chenweikang
*/
@Controller
@RequestMapping("/singleLogin")
public class SingleLoginController extends GreenBaseController {
/**
* 获取用户信息
*
* @param requestBody
* @return
* @throws Exception
*/
@RequestMapping(value="/getUserInfoByTicket", method = RequestMethod.POST)
@ResponseBody
public RestResult getUserInfoByTicket(@RequestBody Map map){
String serviceTicket = map.get("ticket").toString();
try {
Properties otherPro = PropertiesLoaderUtils.loadAllProperties("config/constant.properties");
String iscbaseUrl = otherPro.getProperty("isc.client.baseUrl");
String userInfoByTicketUrl = otherPro.getProperty("isc.client.userInfoByTicketUrl");
String iscappid = otherPro.getProperty("isc.client.appid");
String service = otherPro.getProperty("isc.client.service");
if (!StringUtils.isEmpty(serviceTicket)) {
// 封装请求body
String userJson = "{\"appId\":\"" + iscappid + "\"," + "\"service\":\"" + service + "\","
+ "\"ticket\":\"" + serviceTicket + "\"}";
// 获取签名
String userSign = paramSign(userJson.replace("\\", ""));
// 获取AccessToken
String userToken = getAccessToken(); // 获取userToken
if (userToken == null) {
saveErorrLog("获取AccessToken异常", Constant.INSERT, Constant.OPERATE_FAIL, "获取AccessToken失败1", "0",
"admin"); // 如果获取的usertoken是空则提示失败并记录日志
return new RestResult(Constant.FAILED, "获取用户信息失败");
}
System.out.println("userToken = " + userToken);
System.out.println("userUrl = " + iscbaseUrl + userInfoByTicketUrl);
System.out.println("userBody = " + userJson.replace("\\", ""));
System.out.println("userSign = " + userSign);
String userInfoTicketRep = HttpClientUtil.iscSend2(iscbaseUrl + userInfoByTicketUrl,
userJson.replace("\\", ""), userSign, userToken, iscappid); // 获取用户信息
System.out.println("userInfoRep = " + userInfoTicketRep);
if (StringUtils.isEmpty(userInfoTicketRep)) {
saveErorrLog("获取用户信息异常", Constant.INSERT, Constant.OPERATE_FAIL, "获取用户信息失败1", "0", "admin");
return new RestResult(Constant.FAILED, "获取用户信息失败");
}
JSONObject responseJson = JSONObject.parseObject(userInfoTicketRep);
String code = String.valueOf(responseJson.get("code"));
if (StringUtils.isNotEmpty(code) && "100001".equals(code)) {
String data = String.valueOf(responseJson.get("data"));
if (StringUtils.isNotEmpty(data)) {
RestResult rs = new RestResult(Constant.SUCCESS, "请求成功", data);
return rs;
}
saveErorrLog("获取用户信息异常", Constant.INSERT, Constant.OPERATE_FAIL, "获取用户信息失败2", "0", "admin");
return new RestResult(Constant.FAILED, "获取用户信息失败");
}
return new RestResult(Constant.FAILED, "获取用户信息失败");
}
saveErorrLog("获取用户信息异常", Constant.INSERT, Constant.OPERATE_FAIL, "获取用户信息失败3", "0", "admin");
return new RestResult(Constant.FAILED, "获取用户信息失败");
} catch (Exception e) {
saveErorrLog("获取用户信息异常", Constant.INSERT, Constant.OPERATE_FAIL, "获取用户信息失败4", "0", "admin");
return new RestResult(Constant.FAILED, "获取用户信息失败");
}
}
public static String getNewTicket() throws Exception{
String json = "";
Properties otherPro = PropertiesLoaderUtils.loadAllProperties("config/constant.properties");
String iscappid = otherPro.getProperty("isc.client.appid");
String isclogonserviceurl = otherPro.getProperty("isc.client.service");
String clientSecret = otherPro.getProperty("isc.client.clientSecret");
String sign = otherPro.getProperty("isc.client.sigKey");
json = "{\"iscappid\":\"" + iscappid + "\",\"isclogonserviceurl\":\"" + isclogonserviceurl + "\",\"clientSecret\":\"" + clientSecret + "\",\"sign\":\"" + sign + "\"}";
try{
}catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
public static String getAccessToken() throws IOException {
String json = "";
String at = "Client ";
Properties otherPro = PropertiesLoaderUtils.loadAllProperties("config/constant.properties");
String iscbaseUrl = otherPro.getProperty("isc.client.baseUrl");
String iscappid = otherPro.getProperty("isc.client.appid");
String accessTokenUrl = otherPro.getProperty("isc.client.accessTokenUrl");
String clientSecret = otherPro.getProperty("isc.client.clientSecret");
json = "{\"appId\":\"" + iscappid + "\",\"clientSecret\":\"" + clientSecret + "\"}";
String sig = "";
try {
// 获取签名
sig = paramSign(json.replace("\\", ""));
String response = HttpClientUtil.iscSend(iscbaseUrl + accessTokenUrl, json.replace("\\", ""), sig, iscappid);
if (!(StringUtils.isEmpty(response)) && response.startsWith("{")) {
JSONObject responseJson = JSONObject.parseObject(response);
String code = String.valueOf(responseJson.get("code"));
if ("100001".equals(code)) {
JSONObject dataJson = responseJson.getJSONObject("data");
String accessToken = at + dataJson.get("accessToken");
return accessToken;
} else {
return null;
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
/**
*
* @param jsonParam
* @return
* @throws IOException
*/
public static String paramSign(String jsonParam) {
try {
Properties otherPro = PropertiesLoaderUtils.loadAllProperties("config/constant.properties");
String signKey = otherPro.getProperty("isc.client.sigKey");
String key;
key = EncryptHelper.sign(signKey, jsonParam.replace("\\", ""));
System.out.println("key:" + key);
return key;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonParam;
}
}