All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sc.channel.wxpay.utils.WecatSignUtil Maven / Gradle / Ivy

The newest version!
package com.sc.channel.wxpay.utils;

import com.sc.utils.beanmap.BeanUtil;
import com.sc.utils.utils.xml.XmlUtil;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class WecatSignUtil {
    public static final Log logger = LogFactory.getLog(WecatSignUtil.class);

    public static String sign(Object object, String key) {
        if (object == null) {
            return null;
        }

        Map data = BeanUtil.object2Map(object);
        if (data == null || data.isEmpty()) {
            return null;
        }

        return sign(data, key);
    }

    public static String sign(Map data, String key) {
        if (data == null || data.isEmpty()) {
            return null;
        }
        StringBuilder buf = new StringBuilder();
        TreeMap map = new TreeMap(data);

        Iterator> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = it.next();
            Object k = entry.getKey();
            if ("class".equals(k) || "key".equals(k) || "sign".equals(k)) {
                continue;
            }
            Object v = entry.getValue(); 
            if (v == null || "".equals(v.toString())) {
                continue;
            }
            buf.append(k);
            buf.append("=");
            buf.append(v);
            buf.append("&");
        }
        buf.append("key=" + key);
        logger.debug(buf.toString());

        String sign = EncryptUtil.md5(buf.toString()).toUpperCase();
        return sign;
    }

    public static Map doVerifySign(String resultStr, String key) {
        
        Map resultMap = XmlUtil.parseXml(resultStr);
        String resultSign = sign(resultMap, key);
        if (resultMap.get("sign") == null || !resultMap.get("sign").equals(resultSign)) {
            System.out.println("sign is not correct, " + resultMap.get("sign") + " " + resultSign);
            throw new RuntimeException("签名校验不通过");
        }
        return resultMap;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy