package com.nova.sankuai.domain.api.yixin; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.base.Charsets; import com.google.common.hash.Hashing; import com.nova.sankuai.security.HttpClientUtil; import org.apache.http.util.TextUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class TXOcrUtil { //授权链接 public static String authUrl = "https://miniprogram-kyc.tencentcloudapi.com/api/oauth2/access_token"; public static String ticketUrl = "https://miniprogram-kyc.tencentcloudapi.com/api/oauth2/api_ticket"; public static String getFaceIdUrl = "https://miniprogram-kyc.tencentcloudapi.com/api/server/getfaceid"; private static final Logger systemLogger = LoggerFactory.getLogger("systemLogger"); /** * 获取 人脸AccessToken * * @return */ public static String getAccessToken(String appId, String secret) throws IOException { systemLogger.info("zbb378 getAccessToken:{}", authUrl + "?app_id=" + appId + "&secret=" + secret + "&grant_type=client_credential&version=1.0.0"); return HttpClientUtil.getInstance().get(authUrl + "?app_id=" + appId + "&secret=" + secret + "&grant_type=client_credential&version=1.0.0"); } /** * 获取 人脸TicketInfo * * @return */ public static String getSignTicket(String appId, String accessToken) throws IOException { systemLogger.info("zbb378 getSignTicket:{}", ticketUrl + "?app_id=" + appId + "&access_token=" + accessToken + "&type=SIGN&version=1.0.0"); String result = HttpClientUtil.getInstance().get(ticketUrl + "?app_id=" + appId + "&access_token=" + accessToken + "&type=SIGN&version=1.0.0"); systemLogger.info("zbb378 getSignTicket result:{}", result); if (!TextUtils.isEmpty(result)) { JSONObject jsonObject = JSON.parseObject(result); if (jsonObject.getString("code").equals("0")) { JSONArray jsonArray=jsonObject.getJSONArray("tickets"); if(jsonArray.size()>0) { return jsonArray.getJSONObject(0).getString("value"); } } } return null; } public static String getNonceTicket(String appId, String accessToken, String userId) throws IOException { systemLogger.info("zbb378 getNonceTicket:{}", ticketUrl + "?app_id=" + appId + "&access_token=" + accessToken + "&type=NONCE&version=1.0.0&user_id=" + userId); String result = HttpClientUtil.getInstance().get(ticketUrl + "?app_id=" + appId + "&access_token=" + accessToken + "&type=NONCE&version=1.0.0&user_id=" + userId); systemLogger.info("zbb378 getNonceTicket result:{}", result); if (!TextUtils.isEmpty(result)) { JSONObject jsonObject = JSON.parseObject(result); if (jsonObject.getString("code").equals("0")) { JSONArray jsonArray=jsonObject.getJSONArray("tickets"); if(jsonArray.size()>0) { return jsonArray.getJSONObject(0).getString("value"); } } } return null; } /** * 获取faceId * * @param appId * @param userId * @param sign * @param name * @param IdNo * @return */ public static String getFaceId(String appId, String order,String userId, String sign, String name, String IdNo,String nonce) throws Exception { Map param = new HashMap<>(); param.put("orderNo", order); param.put("webankAppId", appId); param.put("version", "1.0.0"); param.put("userId", userId); param.put("sign", sign); param.put("name", name); param.put("idNo", IdNo); param.put("nonce",nonce); systemLogger.info("zbb378 getFaceId:{}", getFaceIdUrl+"?orderNo="+order, JSON.toJSONString(param)); String result = HttpClientUtil.getInstance().postJsonData(getFaceIdUrl+"?orderNo="+order, JSON.toJSONString(param)); systemLogger.info("zbb378 getFaceId result:{}", result); if (!TextUtils.isEmpty(result)) { JSONObject jsonObject = JSON.parseObject(result); if (jsonObject.getString("code").equals("0")) { String faceId = jsonObject.getJSONObject("result").getString("faceId"); return faceId; } } return null; } public static String sign(List values, String ticket) { if (values == null) { throw new NullPointerException("values is null"); } values.removeAll(Collections.singleton(null));// remove null values.add(ticket); Collections.sort(values); System.out.print(values); StringBuilder sb = new StringBuilder(); for (String s : values) { sb.append(s); } return Hashing.sha1().hashString(sb, Charsets.UTF_8).toString().toUpperCase(); } }