微信支付开发教程JAVA编[005]-签名算法

来源:互联网 发布:ubuntu系统镜像 编辑:程序博客网 时间:2024/05/01 02:38

        我承接app微信公众号开发,如果有谁需要的话,可以惠顾我,谢谢.

QQ: 40678884

微信: szuzsq

主页: http://www.wxshaker.com

博客: http://blog.csdn.net/szuzsq

-------------------------------------------------------------------------------------------------------------------------------------



       签名算法请参阅微信官方文档:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=4_3

        这里,直接给出签名的代码片断.大家可以参考.

/** * array参数按字典序排序参数,组合成url键值对参数(key1=value1&key2=value2...) * @return string url键值对参数(key1=value1&key2=value2...) */protected String toUrlParams() {//1.按字典序排序keyString[] keys = m_values.keySet().toArray(new String[0]);Arrays.sort(keys, String.CASE_INSENSITIVE_ORDER);//2.组合url键值对参数(key1=value1&key2=value2...)String str = "";for(String key : keys) {Object val = m_values.opt(key);if(!key.equals("sign") && !val.equals("") && !(val instanceof Array))str += key + "=" + m_values.opt(key) + "&";}if(str.endsWith("&"))str = str.substring(0, str.length() - 1);return str;}/** * 生成签名 * @return string 签名 */protected void makeSign() {//if(m_values.opt("sign") != null) m_values.remove("sign");//签名步骤一:按字典序排序参数,组合成url键值对参数(key1=value1&key2=value2...)//ksort(this.m_values); //toUrlParams已排序String str = toUrlParams();//签名步骤二:在字符串后加入API密钥keystr += "&key=" + m_key;//签名步骤三:MD5或HMAC-SHA256加密str = MD5.digest(str);//签名步骤四:所有字符转为大写String sign = str.toUpperCase();m_values.put("sign", sign);}

其中m_values为JSONObject对象.MD5.SHA-1哈希算法.也给出..

/*************************************************************** * MD5算法 ***************************************************************/package wxlib.wxsdk.lib.utils;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5 {private final static String[] m_digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};/** * 转换byte到16进制字符串 * @param byte $b 要转换的byte * @return string 16进制字符串 */private static String byte2Hex(byte b) {int n = b;if(n < 0) //-1=ff,-2=fe,-3=fdn += 256;int d1 = n / 16;int d2 = n % 16;return m_digits[d1] + m_digits[d2];}/** * MD5编码 * @param string $origin 原始字符串 * @return string 经过MD5加密之后的结果 */public static String digest(String origin) {String str = "";try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] bytes = md.digest(origin.getBytes());for(byte b : bytes)str += byte2Hex(b);}catch(NoSuchAlgorithmException e) {}return str;}}


SHA-1类似MD5,只是在以下代码有一处不相同(当然,这些都是在我的wxsdk4j已经写好了的.等我发布了,大家有福了):

MessageDigest md = MessageDigest.getInstance("SHA-1");

0 0
原创粉丝点击