param=appkey=F20C0D9292C195A89EFA4EC809165AF1&ts=1755862448&XuDianCWYBH=MA2RJ6WHBEJHAA1DZM1012X0NA1D&QrUrl=https%3A%2F%2Fzlzx.zjamr.zj.gov.cn%2Fpzcode%2Fpwb%2FMA2RJ6WHBEJHAA1DZM1012X0NA1D&data=%7B%22XuDianCWYBH%22%3A%22MA2RJ6WHBEJHAA1DZM1012X0NA1D%22%2C%22XuDianCSCQY%22%3A%22%E6%98%9F%E6%81%92%E7%94%B5%E6%BA%90%28%E6%BB%81%E5%B7%9E%29%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%22%2C%22XuDianCSCDM%22%3A%2291341192MA2RJ6WH82%22%2C%22XuDianCLX%22%3A%22%E9%94%82%E7%94%B5%22%2C%22XuDianCRL%22%3A%2220%22%2C%22XuDianCXH%22%3A%22DB1.5-BM4820%22%2C%22XuDianCZL%22%3A%22%E2%89%A49.3%22%2C%22XuDianCCC%22%3A%22184%C2%B12%22%2C%22XuDianCCK%22%3A%22156%C2%B12%22%2C%22XuDianCCG%22%3A%22300%C2%B12%22%2C%22ZhiXingBZH%22%3A%22GB%2FT36972-2018%22%2C%22ShengChanRQ%22%3A%222025-08-11%22%2C%22YouXiaoRQ%22%3A%222029-08-11%22%2C%22ZiBianM%22%3A%22BEJHAA1DZM1012X0NA1D%22%2C%22ZhengJiTX%22%3A%22%E9%94%B0%E9%85%B8%E9%94%82%22%7D&ShengChanQYDM=91341192MA2RJ6WH82 appsecret=8149A679C3AF75685DB8B3272168DD9A,用这两个参数去跑这个java方法,告诉我最后返回的结果,java代码是:package com.fd.zpm.util;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.fd.zpm.util.txt.FdSM4Enc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SignCommonUtil {
private static final String data_info = "加密数据";
private static final Logger logger = LoggerFactory.getLogger(SignCommonUtil.class);
public static void main(String[] args) throws IOException {
//String result = "appKey=3040D99FB24475563093D87AD1251C72&ts=1740721675325type=1&data=\"{\\\\\\\"busiID\\\\\\\": \\\\\\\"1312312\\\\\\\", \\\\\\\"traceCode\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"productId\\\\\\\": \\\\\\\"2\\\\\\\", \\\\\\\"productDate\\\\\\\": \\\\\\\"3\\\\\\\", \\\\\\\"warrantyPeriod\\\\\\\": \\\\\\\"4\\\\\\\", \\\\\\\"batchNum\\\\\\\": \\\\\\\"5\\\\\\\", \\\\\\\"inspReportUrl\\\\\\\": \\\\\\\"6\\\\\\\", \\\\\\\"isOpenReport\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"sourceCode\\\\\\\": \\\\\\\"8\\\\\\\", \\\\\\\"remarks1\\\\\\\": \\\\\\\"9\\\\\\\", \\\\\\\"productInfo\\\\\\\": {\\\\\\\"busiID\\\\\\\": \\\\\\\"1312312\\\\\\\", \\\\\\\"productId\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"productCode\\\\\\\": \\\\\\\"2\\\\\\\", \\\\\\\"productDelName\\\\\\\": \\\\\\\"3\\\\\\\", \\\\\\\"model\\\\\\\": \\\\\\\"4\\\\\\\", \\\\\\\"prodExeStd\\\\\\\": \\\\\\\"5\\\\\\\", \\\\\\\"nationalStandards\\\\\\\": \\\\\\\"6\\\\\\\", \\\\\\\"certNo\\\\\\\": \\\\\\\"7\\\\\\\", \\\\\\\"cccNo\\\\\\\": \\\\\\\"8\\\\\\\", \\\\\\\"manualUrl\\\\\\\": \\\\\\\"9\\\\\\\", \\\\\\\"sourceCode\\\\\\\": \\\\\\\"10\\\\\\\"}, \\\\\\\"prodFlowInfoList\\\\\\\": [{\\\\\\\"busiID\\\\\\\": \\\\\\\"1312312\\\\\\\", \\\\\\\"traceCode\\\\\\\": \\\\\\\"追溯码\\\\\\\", \\\\\\\"serialNo\\\\\\\": \\\\\\\"生产流向流水号\\\\\\\", \\\\\\\"sreditCode\\\\\\\": \\\\\\\"生产单位社会统一信用代码\\\\\\\", \\\\\\\"salesDate\\\\\\\": \\\\\\\"销售时间\\\\\\\", \\\\\\\"vSalesTime\\\\\\\": \\\\\\\"0\\\\\\\", \\\\\\\"buyerName\\\\\\\": \\\\\\\"购方名称\\\\\\\", \\\\\\\"buyerCode\\\\\\\": \\\\\\\"购方社会统一信用代码\\\\\\\", \\\\\\\"vBuyerName\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"buyerAddress\\\\\\\": \\\\\\\"购方地址\\\\\\\", \\\\\\\"vBuyerAddress\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"buyerTel\\\\\\\": \\\\\\\"购方联系方式\\\\\\\", \\\\\\\"vBuyerTel\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"sourceUrl\\\\\\\": \\\\\\\"追溯途径源链接\\\\\\\", \\\\\\\"sourceCode\\\\\\\": \\\\\\\"追溯信息来源\\\\\\\"}, {\\\\\\\"busiID\\\\\\\": \\\\\\\"1312312\\\\\\\", \\\\\\\"traceCode\\\\\\\": \\\\\\\"追溯码2\\\\\\\", \\\\\\\"serialNo\\\\\\\": \\\\\\\"生产流向流水号2\\\\\\\", \\\\\\\"sreditCode\\\\\\\": \\\\\\\"生产单位社会统一信用代码2\\\\\\\", \\\\\\\"salesDate\\\\\\\": \\\\\\\"销售时间2\\\\\\\", \\\\\\\"vSalesTime\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"buyerName\\\\\\\": \\\\\\\"购方名称2\\\\\\\", \\\\\\\"buyerCode\\\\\\\": \\\\\\\"购方社会统一信用代码2\\\\\\\", \\\\\\\"vBuyerName\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"buyerAddress\\\\\\\": \\\\\\\"购方地址2\\\\\\\", \\\\\\\"vBuyerAddress\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"buyerTel\\\\\\\": \\\\\\\"购方联系方式2\\\\\\\", \\\\\\\"vBuyerTel\\\\\\\": \\\\\\\"1\\\\\\\", \\\\\\\"sourceUrl\\\\\\\": \\\\\\\"追溯途径源链接2\\\\\\\", \\\\\\\"sourceCode\\\\\\\": \\\\\\\"追溯信息来源2\\\\\\\"}], \\\\\\\"prodUnitInfo\\\\\\\": {\\\\\\\"busiID\\\\\\\": \\\\\\\"1312312\\\\\\\", \\\\\\\"sreditName\\\\\\\": \\\\\\\"联系方式\\\\\\\", \\\\\\\"sreditCode\\\\\\\": \\\\\\\"生产单位统一社会信用代码\\\\\\\", \\\\\\\"address\\\\\\\": \\\\\\\"生产/注册地址\\\\\\\", \\\\\\\"tel\\\\\\\": \\\\\\\"生产单位名称\\\\\\\", \\\\\\\"businessLicenseUrl\\\\\\\": \\\\\\\"营业执照(链接)\\\\\\\", \\\\\\\"provinceCode\\\\\\\": \\\\\\\"所在省编码\\\\\\\", \\\\\\\"cityCode\\\\\\\": \\\\\\\"所在地级市编码\\\\\\\", \\\\\\\"districtCode\\\\\\\": \\\\\\\"所在县/区编码\\\\\\\", \\\\\\\"sourceCode\\\\\\\": \\\\\\\"追溯信息来源\\\\\\\"}}\"&sign=a11b34caca9239ad4fe769726ba9f177";
// String param = "appKey=" + appKey +"&appsecret="+appsecret+ "&ts=" + ts + "&creditCode=" + creditCode
// + "&productName=" + productName + "&specifications=" + specifications + "&sPCategory=" + sPCategory
// + "&serialCode=" + serialCode;
// String paramDc = "appkey=" + appKey +"&appsecret="+appsecret + "&ts=" + ts + "&ShengChanQYDM=" + ShengChanQYDM +"&ZhenCheBM="+ZhenCheBM+"&QrUrl=" +QrUrl + "&data=" + data;
// String param = "appkey=" + appKey + "&ts=" + ts + "&ShengChanQYDM=" + ShengChanQYDM
// + "&ZhenCheBM=" + ZhenCheBM + "&QrUrl=" + QrUrl + "&data=" + data;
try {
// String str = JSON.toJSONString(s); CheckSign
//appSecret
System.out.println(CreareSignQueryStringNew(param, appsecret));
System.out.println();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String CreareSignQueryStringNew(String formStr, String appSecret) throws UnsupportedEncodingException {
String signQueryString = "";
String sign = "";
//将参数存入字符数组
String[] dataArry = formStr.split("&");
//定义字典,将参数按照键值对存入字典中
Map<String, String> dics = new HashMap<String, String>();
dics.put("appsecret", appSecret);
//遍历字符数组
for (int i = 0; i <= dataArry.length - 1; i++) {
//当前参数值
String dataParm = dataArry[i];
//"="的索引值
int dIndex = dataParm.indexOf("=");
//参数名做为key
String key = dataParm.substring(0, dIndex);
//参数值做为Value
String value = dataParm.substring(dIndex + 1, dIndex + 1 + dataParm.length() - dIndex - 1);
//将编码后的Value解码
String deValue = URLDecoder.decode(value, "UTF-8");
if (!"__VIEWSTATE".equals(key)) {
//将参数以键值对存入字典
dics.put(key, deValue);
}
if ("sign".equals(key)) {
sign = deValue;
}
if (!"__VIEWSTATE".equals(key) && !"sign".equals(key)) {
//将参数以键值对存入字典
dics.put(key, deValue);
}
}
List<String> arrKeys = new ArrayList<>(dics.keySet());
Collections.sort(arrKeys, String::compareTo);
for (String key : arrKeys) {
String value = dics.get(key);
String test = java.net.URLEncoder.encode(value, "UTF-8");
signQueryString+=((signQueryString.length() == 0 ? "" : "&") + key + "=" + test);
}
String createsign = MD5Encrypt32(signQueryString);
return createsign;
}
//获取当前时间段额时间戳
public static String GetTimeStamp() {
long ts = System.currentTimeMillis();
return String.valueOf(ts);
}
public static String MD5Encrypt32(String password) {
String cl = password;
StringBuilder pwd = new StringBuilder();
try {
// 实例化一个MD5对象
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 加密后是一个字节类型的数组,这里要注意编码的选择,这里使用UTF-8编码
byte[] s = md5.digest(cl.getBytes(StandardCharsets.UTF_8));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.length; i++) {
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(toUpperCase)则格式后的字符是大写字符
pwd.append(String.format("%02x", s[i]));
}
} catch (NoSuchAlgorithmException e) {
logger.error(e.getMessage());
}
return pwd.toString().toUpperCase();
}
}
最新发布