public void getInvoiceInfo(String requestNo) throws Exception{
if(StringUtils.isEmpty(requestNo)){
return;
}
String MERCHANT_NO="xxx";
String API_KEY="xxx";
Map<String,Object> dataMap = new HashMap<>();
dataMap.put("requestNo",requestNo);
String encodeReqData = new String(Base64.encodeBase64(JSONUtil.toJsonStr(dataMap).getBytes("UTF-8")));
String signData = getStringMD5(API_KEY+encodeReqData);
Map<String,Object> reqMap = new HashMap<>();
reqMap.put("clientSerialNo","123456");
reqMap.put("encryptType","BASE64");
reqMap.put("merchantNo",MERCHANT_NO);
reqMap.put("signType","MD5");
reqMap.put("data",encodeReqData);
reqMap.put("signData",signData);
reqMap.put("timestamp",String.valueOf(System.currentTimeMillis()));
log.info("发票开具结果查询,请求报文:{}", JSONUtil.toJsonStr(reqMap));
HttpResponse response = HttpRequest.post("http://ibms-test.wecube.com/ibms/invoice/v1/etax/getInvoiceInfo").body(JSONUtil.toJsonStr(reqMap))
.contentType("application/json;charset=utf-8").timeout(30000).execute();
log.info("发票开具结果查询,响应报文:{}", JSONUtil.toJsonStr(response));
String result = response.body();
Map<String, Object> rspMap = JSONUtil.toBean(result, Map.class);
if (isSuccessResult(API_KEY, rspMap)) {
String data = rspMap.get("data").toString();
String rspData = new String(Base64.decodeBase64(data), Charset.forName("UTF-8"));
log.info("发票开具结果查询,响应业务对象:{}", rspData);
} else {
log.info("发票开具结果查询失败");
}
}
public String getStringMD5(String input){
try {
MessageDigest mDigest = MessageDigest.getInstance("MD5");
byte[] inputArr = input.getBytes();
mDigest.update(inputArr);
byte[] resultArr = mDigest.digest();
return byteArrToHex(resultArr).toLowerCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private String byteArrToHex(byte[] byteArr) {
char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] resultCharArr = new char[byteArr.length*2];
int index = 0;
for (byte b : byteArr) {
resultCharArr[index++] = hexDigits[b>>> 4 & 0xf];
resultCharArr[index++] = hexDigits[b & 0xf];
}
return new String(resultCharArr);
}
public boolean isSuccessResult(String apiKey, Map<String, Object> rspMap) {
try {
StringBuffer sb = new StringBuffer(apiKey).append(rspMap.get("data"));
String encodeSignData = getStringMD5(sb.toString());
return encodeSignData.equals(rspMap.get("signData"));
} catch (Exception e) {
return false;
}
}