package com.welab.automation.framework.utils.api;
import com.welab.automation.framework.GlobalVar;
import com.welab.automation.framework.utils.entity.api.SignatureUtil;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import javax.crypto.Cipher;
import javax.crypto.spec.OAEPParameterSpec;
import javax.crypto.spec.PSource;
import javax.net.ssl.*;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.*;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.security.spec.MGF1ParameterSpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
public class CallFicoUtils {
HashMap<String,String> map = new HashMap<>();
public static void main(String[] args) {
CallFicoUtils callFicoUtils = new CallFicoUtils();
//callFicoUtils.callFico();
// String token = callFicoUtils.getToken("qatest102", "Aa123456");
// System.out.println("token: " + token);
// callFicoUtils.callFico("1351963705725952000");
callFicoUtils.getJwt("1351963705725952000");
}
public String getToken(String user, String password){
getPublicKey();
getOffSet();
return getAccessToken(user, password);
}
public String getJwt(String customerId){
String jwtToken="";
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
// 信任所有证书
public boolean isTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
return true;
}
}).build();
// 创建主机名验证器,用于绕过主机名验证
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
// 创建 SSL 连接套接字工厂,将自定义的 SSL 上下文和主机名验证器应用于 HTTPS 连接
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
// 创建自定义的 CloseableHttpClient 实例,将 SSL 连接套接字工厂应用于 HTTP 客户端
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
String sitUrl = "https://api-sit3.dev-wlab.net/account-mob/v1/oauth/jwt-token?customerId="+customerId;
String staUrl = "https://api-sta2.sta-wlab.net/onboarding-pro/jwt/"+customerId;
HttpGet request = new HttpGet(sitUrl);
CloseableHttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
System.out.println("responseBody: " + responseBody);
JSONObject jsonObject = new JSONObject(responseBody);
jwtToken = jsonObject.getJSONObject("data").getString("jwtToken");
jwtToken="Bearer "+jwtToken;
System.out.println("jwtToken: " + jwtToken);
GlobalVar.GLOBAL_VARIABLES.put("jwtToken",jwtToken);
} catch (Exception e) {
e.printStackTrace();
}
return jwtToken;
}
public void callFico(){
//CLIENT_ID,CLIENT_SECRET Stage和SIT不一样
GlobalVar.GLOBAL_VARIABLES.put("CLIENT_ID","AHNxFv0FE61r8zfv8kemGwL06LNxS6aM");
GlobalVar.GLOBAL_VARIABLES.put("CLIENT_SECRET","fA52Bm6NkSGGPFPp");
GlobalVar.GLOBAL_VARIABLES.put("host","https://mapi.sta-wlab.com");
SignatureUtil signatureUtil = new SignatureUtil("qatest106","Aa123456");
signatureUtil.getPublicKeyReq();
int offset = signatureUtil.getOffset();
signatureUtil.createSignReq(offset);
}
public HttpGet setHeaderForPublicKey(HttpGet request){
request.setHeader("Authorization","Bearer jQU2z9GpqqlwzuOzP7Y2sQN5rTofqM1j6q7Z2sFTuFGGDbz8npihbc");
request.setHeader("Threat-Metrix-Session-Id","mock");
request.setHeader("idx-version","3.2");
request.setHeader("accept-language","en-US");
request.setHeader("Accept-Encoding","gzip,deflate,br");
request.setHeader("Client-Id","AHNxFv0FE61r8zfv8kemGwL06LNxS6aM");
request.setHeader("Client-Secret","fA52Bm6NkSGGPFPp");
request.setHeader("Accept","*/*");
request.setHeader("Content-Type","application/json;charset=utf-8");
return request;
}
public static String md5(String input) {
try {
// String md5Hex = DigestUtils.md5Hex(input);
// return md5Hex;
// 获取 MD5 摘要算法实例
MessageDigest md = MessageDigest.getInstance("MD5");
// 将输入转换为字节数组
byte[] messageDigest = md.digest(input.getBytes());
// 将字节数组转换为十六进制字符串
StringBuilder hexString = new StringBuilder();
for (byte b : messageDigest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
// 处理异常
e.printStackTrace();
return null;
}
}
public static String createCipherEx(String publicKey, int offset,String TEST_ACCOUNT,String TEST_PASSWORD) {
try {
String publicKeyPEM = publicKey
.replace("-----BEGIN PUBLIC KEY-----", "")
.replaceAll(System.lineSeparator(), "")
.replace("-----END PUBLIC KEY-----", "");
GlobalVar.GLOBAL_VARIABLES.put("publicKeyPEM", publicKeyPEM);
byte[] pbks = Base64.getMimeDecoder().decode(publicKeyPEM);
int timestamp = Math.round(System.currentTimeMillis() / 1000);
//V2 add two param certSign , appVersion
//certhash
//ios: 3bd802e58930823bf2b206925c4c69c6
//Android: 9ecb077a717b2fb8c85bdab1f2a3d8c0
//appversion 1.8.70.310
String ios_certHash = "3bd802e58930823bf2b206925c4c69c6";
String android_certHash = "9ecb077a717b2fb8c85bdab1f2a3d8c0";
String certSign =md5(ios_certHash+timestamp);
String appVersion = "1.8.70.310";
X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(pbks);
PublicKey newPbk = KeyFactory.getInstance("RSA").generatePublic(encodedKeySpec);
OAEPParameterSpec oaepParameterSpec = new OAEPParameterSpec("SHA-256", "MGF1", new MGF1ParameterSpec("SHA-256"), PSource.PSpecified.DEFAULT);
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
cipher.init(Cipher.ENCRYPT_MODE, newPbk, oaepParameterSpec);
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject.put("certSign", certSign);
jsonObject.put("appVersion", appVersion);
jsonObject.put("username", TEST_ACCOUNT);
jsonObject.put("authType", "PASSWORD");
jsonObject.put("authValue", TEST_PASSWORD);
jsonObject.put("timestamp", offset + timestamp);
System.out.println("timestamp is" + String.valueOf(timestamp));
jsonObject.put("salt", UUID.randomUUID().toString());
System.out.println("jsonObject is " + jsonObject.toJSONString());
byte[] bytes = cipher.doFinal(jsonObject.toString().getBytes());
System.out.println("Result: " + Base64.getEncoder().encodeToString(bytes));
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception ex) {
System.out.println("system error from createCipherEx");
}
return "";
}
public String getPublicKey(){
String publicKey="";
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpGet request = new HttpGet("https://mapi.sta-wlab.com/v1/internal/public-key");
request = setHeaderForPublicKey(request);
CloseableHttpResponse response = httpClient.execute(request);
try {
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
System.out.println("responseBody: " + responseBody);
JSONObject jsonObject = new JSONObject(responseBody);
publicKey = jsonObject.getJSONObject("data").getString("publicKey");
String version = jsonObject.getJSONObject("data").getString("version");
System.out.println("publicKey: " + publicKey);
map.put("version",version);
map.put("publicKey",publicKey);
} finally {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return publicKey;
}
public String getOffSet(){
System.out.println("Start Get OffSet!!!!!!!!");
String timeString = String.valueOf(new Date().getTime() / 1000);
String url="https://mapi.sta-wlab.com/v1/clock-skew?time="+timeString;
System.out.println(url);
String offSet="";
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
//"https://mapi.sta-wlab.com/v1/clock-skew?time=1741942656"
HttpGet request = new HttpGet(url);
request = setHeaderForPublicKey(request);
CloseableHttpResponse response = httpClient.execute(request);
try {
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
System.out.println("responseBody: " + responseBody);
JSONObject jsonObject = new JSONObject(responseBody);
offSet += jsonObject.getJSONObject("data").getInt("offset");
System.out.println("offSet: " + offSet);
map.put("offSet",offSet);
} finally {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return offSet;
}
public HttpPost setHeaderForAccessToken(HttpPost request){
request.setHeader("Authorization","Bearer jQU2z9GpqqlwzuOzP7Y2sQN5rTofqM1j6q7Z2sFTuFGGDbz8npihbc");
request.setHeader("Threat-Metrix-Session-Id","mock");
request.setHeader("idx-version","3.2");
request.setHeader("accept-language","en-US");
request.setHeader("Accept-Encoding","gzip,deflate,br");
request.setHeader("Client-Id","AHNxFv0FE61r8zfv8kemGwL06LNxS6aM");
request.setHeader("Client-Secret","fA52Bm6NkSGGPFPp");
request.setHeader("Accept","*/*");
request.setHeader("x-app-version","1.8.70.310");
request.setHeader("x-platform","ios");//android
request.setHeader("Content-Type","application/json;charset=utf-8");
return request;
}
public String getAccessToken(String user, String password){
int offset = Integer.parseInt(map.get("offSet"));
String credentials =createCipherEx(map.get("publicKey"), offset,user,password);
String v = "credentials="+credentials+"&authValue=PASSWORD&version="+map.get("version");
System.out.println("credentials: "+credentials);
String json = "{\n" +
" \"credentials\": \""+credentials+"\"," +
" \"authValue\": \"PASSWORD\"," +
" \"version\": \""+map.get("version")+"\"" +
"}";
System.out.println("json: " + json);
String accessToken="";
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpPost request = new HttpPost("https://mapi.sta-wlab.com/v2/oauth/token?authType=PASSWORD");
request.setEntity(new StringEntity(json));
request = setHeaderForAccessToken(request);
CloseableHttpResponse response = httpClient.execute(request);
try {
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
System.out.println("responseBody: " + responseBody);
JSONObject jsonObject = new JSONObject(responseBody);
accessToken = jsonObject.getJSONObject("data").getString("accessToken");
System.out.println("accessToken: " + accessToken);
map.put("accessToken",accessToken);
} finally {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return accessToken;
}
public String callFico(String customerId){
String json="{\n" +
" \"ciamCustomerId\": \""+customerId+"\"," +
" \"isCreateAccount\": true," +
" \"ltAmlLastVDate\": \"2022-11-23T21:11:41.841Z\"," +
" \"ltAmlNextVDate\": \"2022-11-23T21:11:41.841Z\"," +
" \"reviewResult\": \"Approve\"," +
" \"riskLevelResult\": \"Low\"," +
" \"watchlistHitResult\": \"Y\"" +
"}";
System.out.println("json: " + json);
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpPost request = new HttpPost("https://api-sta2.sta-wlab.net/onboarding-pro/v1/onboarding-requests/fico-manual-reviews/callback");
request.setEntity(new StringEntity(json));
CloseableHttpResponse response = httpClient.execute(request);
try {
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
System.out.println("responseBody: " + responseBody);
} finally {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
public static void getToken(){
try {
String custiomerId="1350151013742682112";
String cmds = String.format("curl -X GET \"https://api-sta2.sta-wlab.net/onboarding-pro/jwt/"+custiomerId+"\" -H \"accept: */*\" -H \"Accept-Language: en-US\"");
// 执行CMD命令
System.out.println("Executing python script file now.");
Process pcs = Runtime.getRuntime().exec(cmds);
pcs.waitFor();
// System.out.println(pcs.waitFor());
// 定义Python脚本的返回值
String result = null;
// 获取CMD的返回流
BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());// 字符流转换字节流
BufferedReader br = new BufferedReader(new InputStreamReader(in));// 这里也可以输出文本日志
String lineStr = null;
while ((lineStr = br.readLine()) != null) {
System.out.println(lineStr);
result = lineStr;//Python 代码中print的数据就是返回值
}
// 关闭输入流
br.close();
in.close();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java 访问HTTP,信任所有证书,解决SSL报错问题
qq_4924484462025-07-04 12:25
相关推荐
程序员张31 小时前
Maven编译和打包插件ybq195133454312 小时前
Redis-主从复制-分布式系统weixin_472339463 小时前
高效处理大体积Excel文件的Java技术方案解析小毛驴8503 小时前
Linux 后台启动java jar 程序 nohup java -jarDKPT4 小时前
Java桥接模式实现方式与测试方法诗句藏于尽头4 小时前
完成ssl不安全警告好奇的菜鸟5 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享DuelCode6 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接优创学社26 小时前
基于springboot的社区生鲜团购系统幽络源小助理6 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现