package com.weaver.seconddev.chapanda.kaixinyi.util;

//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.lsy.baselib.crypto.util.Base64;
//import com.lsy.baselib.crypto.util.CryptUtil;
//import com.lsy.baselib.crypto.util.FileUtil;
import org.springframework.stereotype.Component;
//import java.io.UnsupportedEncodingException;
//import java.security.PrivateKey;
//import java.security.Signature;
//import java.util.*;

@Component
public class SignatureUtil {

//    private String signData(String data,String redirectURL) {
//        try {
//            String reSbf = data;
//            if(redirectURL.indexOf("/pay")==-1){
//                data = data.replace("\r|\n", "");
//                JSONObject jsonObject = JSONObject.parseObject(data);
//                //对报文中的key字段进行ASCII排序
//                StringBuffer sbf = formaturlMap(jsonObject);
//                reSbf = sbf.toString().replaceAll("\\}\\{", "\\},\\{");
//            }
//
//            byte[] msg = reSbf.getBytes("UTF-8");
//
//            //签名数据
//            PrivateKey privateKey = getPrivateKey();
//            Signature signature = Signature.getInstance("SHA1WithRSA");
//            signature.initSign(privateKey);
//            signature.update(msg);
//            byte[] bytarr = signature.sign();
//
//            String signData = new String(Base64.encode(bytarr), "UTF-8");
//            signData = signData.replace("\r|\n", "");
//            return signData;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    private PrivateKey getPrivateKey() throws Exception {
//        //私钥文件路径
//        String keyfile = SignatureUtil.class.getClassLoader().getResource("signkey/server_sign.key")
//                .getPath();
//        byte[] base64EncodedPrivatekey = FileUtil.read4file(keyfile);
//
//        //私钥密码文件路径
//        String pwdfile = SignatureUtil.class.getClassLoader().getResource("signkey/server_sign.pwd")
//                .getPath();
//        byte[] base64EncodedPrivatekeyPass = FileUtil.read4file(pwdfile);
//
//        char[] keyPassword = new String(base64EncodedPrivatekeyPass, "UTF-8").toCharArray();
//
//        PrivateKey signerPrivatekey = CryptUtil.decryptPrivateKey(
//                Base64.decode(base64EncodedPrivatekey), keyPassword);
//        return signerPrivatekey;
//    }
//
//    private StringBuffer formaturlMap(JSONObject jsonObject)
//            throws UnsupportedEncodingException {
//
//        if (jsonObject == null) {
//            return null;
//        }
//
//        StringBuffer plain = new StringBuffer();
//        List<Map.Entry<String, Object>> infolds = new ArrayList<Map.Entry<String, Object>>(
//                jsonObject.entrySet());
//
//        //ASCII 排序（字典序）
//        Collections.sort(infolds, new Comparator<Map.Entry<String, Object>>() {
//            public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
//                return (o1.getKey().compareTo(o2.getKey()));
//            }
//        });
//
//        plain.append("{");
//        for (Map.Entry<String, Object> item : infolds) {
//            String key = item.getKey();
//            if ("commonDataList".equalsIgnoreCase(key)) {
//                continue;
//            }
//            plain.append("\"" + key + "\"");
//            plain.append(":");
//            Object val = item.getValue();
//            if (val instanceof JSONObject) {
//                StringBuffer str = formaturlMap((JSONObject) val);
//                plain.append(str);
//            } else if (val instanceof String) {
//                plain.append("\"" + val + "\"");
//            } else if (val instanceof JSONArray) {
//                plain.append("[");
//                JSONArray arr = (JSONArray) val;
//                for (int i = 0; i < arr.size(); i++) {
//                    StringBuffer tempstr = new StringBuffer();
//                    Object obj = arr.get(i);
//                    if (obj instanceof JSONObject) {
//                        tempstr = formaturlMap((JSONObject) obj);
//                    }
//                    plain.append(tempstr);
//                }
//                plain.append("]");
//            }
//            plain.append(",");
//        }
//        plain.delete(plain.length() - 1, plain.length());
//        if (plain.length() > 0) {
//            plain.append("}");
//        }
//        return plain;
//    }
}
