一 需求
支付平台对接,主要对接3个接口。
1 余额查询
2 批量支付
3 批量查询
二 代码
1 签名工具类
import com.alibaba.fastjson.JSON;
import org.springframework.util.DigestUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* @className: SignUtil
* @description: 签名工具类
* @date: 2021/11/1
* @author: cakin
*/
public class SignUtil {
public static final String RM = "sign";
public static final String APP_SECRET = "appSecret";
private final String key = "xxxxxxxx";
public static void main(String[] args) {
// 签名举例
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("merchantId", "xxxxxx");
long l = System.currentTimeMillis();
paramMap.put("timestamp", l + "");
System.out.println(l+"");
String sign = SignUtil.getSign(JSON.parseObject(JSON.toJSONString(paramMap)), "afeb523441a170f8");
System.out.println(sign);
String str = "xxxxxx";
System.out.println(str.substring(2,str.length()-2));
}
/**
* 获取签名
*
* @param paramMap 包含所有业务参数,和appKey,nonce,timestamp这3个公共参数
* @param appSecret
* @return
*/
public static String getSign(Map<String, Object> paramMap, String appSecret) {
String text = getUrlText(paramMap);
text += "&appSecret=" + appSecret;
return DigestUtils.md5DigestAsHex(text.getBytes()).toUpperCase();
}
private static String getUrlText(Map<String, Object> beanMap) {
beanMap = getSortedMap(beanMap);
StringBuilder builder = new StringBuilder();
for (String key : beanMap.keySet()) {
String value = beanMap.get(key).toString();
builder.append(key);
builder.append('=');
builder.append(value);
builder.append('&');
}
String text = builder.toString();
return text.substring(0, text.length() - 1);
}
public static Map<String, String> transMap(String str) {
String[] key_value = str.split("&");
Map<String, String> map = new HashMap<String, String>();
for (String e : key_value) {
String[] value = e.split("=");
if(value == null || value.length != 2){