3、API 签名
API 签名规则
companySecret 是企业秘钥,需找万师傅对接负责人获取
示例
{"orderNo": "P5151145027"}
eyJvcmRlck5vIjogIlA1MTUxMTQ1MDI3In0=
生成签名
String companySecret = "";
// 业务参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderNo", "P00000001");
// 生成签名
String sign = SignUtils.buildSign(jsonObject.toJSONString(), companySecret);
System.out.println(sign);
package com.wanshifu;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
* @Description: 接口签名
*/
public class SignUtils {
private static final char[] HEX_CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 生成签名
* @param busJsonData
* @param companySecret
* @return
*/
public static String buildSign(String busJsonData, String companySecret) {
String busData = Base64.getEncoder().encodeToString(busJsonData.getBytes(StandardCharsets.UTF_8));
String sign = busData + companySecret;
return DigestUtils.md5DigestAsHex(sign.getBytes(StandardCharsets.UTF_8)).toUpperCase();
}
/**
* 数据 md5 加密
* @param data 需要加密的数据
* @return
*/
private static String md5(String data) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(data.getBytes(StandardCharsets.UTF_8));
return new String(encodeHex(digest));
} catch (NoSuchAlgorithmException ex) {
throw new IllegalStateException("Could not find MessageDigest with algorithm MD5", ex);
}
}
private static char[] encodeHex(byte[] bytes) {
char chars[] = new char[32];
for (int i = 0; i < chars.length; i = i + 2) {
byte b = bytes[i / 2];
chars[i] = HEX_CHARS[(b >>> 0x4) & 0xf];
chars[i + 1] = HEX_CHARS[b & 0xf];
}
return chars;
}
}
修改于 2024-01-24 08:55:33