嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-service/src/main/java/com/hai/config/UnionUserConfig.java

132 lines
4.2 KiB

package com.hai.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.utils.HttpsUtils;
import org.apache.commons.lang3.StringUtils;
import javax.xml.bind.DatatypeConverter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.*;
/**
* 银联用户信息
* @author hurui
*/
public class UnionUserConfig {
private static String requestUrl = "https://open.95516.com/open/access/1.0/backendToken";
private static String appId = "1900bc84497cab3b";
private static String secret = "665193ddd44248acb461594cfe0ded5b";
/**
* 获取应用访问令牌backendToken
* @return
*/
public static JSONObject getBackendToken() {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("appId", appId);
paramMap.put("nonceStr", createNonceStr());
paramMap.put("timestamp", System.currentTimeMillis());
paramMap.put("signature", generateSign(paramMap));
return HttpsUtils.doPost(requestUrl, JSONObject.toJSONString(paramMap));
}
/**
* 参数排序
* @param param
* @return
*/
private static String paramSort(final Map<String, Object> param) {
Set<String> keySet = param.keySet();
String[] keyArray = keySet.toArray(new String[keySet.size()]);
Arrays.sort(keyArray);
StringBuilder sb = new StringBuilder();
for (String k : keyArray) {
if (k.equals(WXPayConstants.FIELD_SIGN)) {
continue;
}
if (StringUtils.isBlank(sb.toString())) {
sb.append(k).append("=").append(param.get(k));
} else {
sb.append("&").append(k).append("=").append(param.get(k));
}
}
param.remove("secret");
return sb.toString();
}
/**
* 生成签名
* @param data
* @return
* @throws Exception
*/
private static String generateSign(Map<String, Object> data){
data.put("secret", secret);
String sign = sha256(paramSort(data).getBytes());
return sign;
}
/**
* 生成随机16位随机字符串
* @return
*/
public static String createNonceStr(){
String sl = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < 16 ; i ++){
sb.append(sl.charAt(new Random().nextInt(sl.length())));
}
return sb.toString();
}
public static String sha256(byte[] data) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
return bytesToHex(md.digest(data));
} catch (Exception ex) {
return null;
}
}
public static String bytesToHex(byte[] bytes) {
String hexArray = "0123456789abcdef";
StringBuilder sb = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
int bi = b & 0xff;
sb.append(hexArray.charAt(bi >> 4));
sb.append(hexArray.charAt(bi & 0xf));
}
return sb.toString();
}
public static Map<String, Object> generatorRSA(){
KeyPairGenerator keyGen = null;
try {
keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair keyPair = keyGen.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyBase64 = DatatypeConverter.printBase64Binary(publicKey.getEncoded());
String privateKeyBase64 = DatatypeConverter.printBase64Binary(privateKey.getEncoded());
Map<String, Object> map = new HashMap<>();
map.put("publicKey", publicKeyBase64);
map.put("privateKey", privateKeyBase64);
return map;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}