请给我一段java的微信加签代码阳历
时间: 2024-03-29 13:41:10 浏览: 82
以下是一段 Java 的微信加签代码,用于生成微信支付的签名:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
public class WechatPayUtil {
/**
* 生成微信支付签名
* @param params 待签名参数
* @param key 商户密钥
* @return 签名字符串
*/
public static String generateSignature(Map<String, String> params, String key) {
Set<String> keySet = params.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
String v = params.get(k);
// 参数值为空,则不参与签名
if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
sb.append(k).append("=").append(v).append("&");
}
}
sb.append("key=").append(key);
String sign = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(sb.toString().getBytes("UTF-8"));
sign = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return sign.toUpperCase();
}
/**
* 将字节数组转换成字符串
* @param byteArray 字节数组
* @return 字符串
*/
private static String byteToStr(byte[] byteArray) {
StringBuilder strDigest = new StringBuilder();
for (byte b : byteArray) {
strDigest.append(byteToHexStr(b));
}
return strDigest.toString();
}
/**
* 将字节转换成十六进制字符串
* @param mByte 字节
* @return 十六进制字符串
*/
private static String byteToHexStr(byte mByte) {
char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] tempArr = new char[2];
tempArr[0] = digit[(mByte >>> 4) & 0X0F];
tempArr[1] = digit[mByte & 0X0F];
return new String(tempArr);
}
}
```
需要注意的是,这段代码中的 `params` 参数是一个键值对集合,包含了所有需要参与签名的参数。其中,`key` 参数是商户密钥,用于最后的签名计算。
阅读全文