微信支付开发教程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;}}
MessageDigest md = MessageDigest.getInstance("SHA-1");
0 0
- 微信支付开发教程JAVA编[005]-签名算法
- 微信支付开发教程JAVA编[006]-刷卡支付
- 微信支付开发教程JAVA编[001]-引言
- 微信支付开发教程JAVA编[002]-配置
- 微信支付开发教程JAVA编[007]-扫码支付
- 微信支付开发教程JAVA编[003]-json和xml的解析
- 微信支付开发教程JAVA编[004]-使用HttpClient详解
- 微信支付签名算法
- 微信支付签名算法
- 微信支付开发教程JAVA编[008]-wxsdk4java:微信公众号和微信支付开发的所有API功能点的封装及调用实例
- 微信支付开发教程
- 微信支付开发教程
- 微信支付开发教程
- java 微信支付签名生成方法
- 微信支付---签名
- 微信支付签名
- 微信支付签名算法的一些坑……
- weiphp微信支付开发教程
- Linux cd指令以及 tar命令
- PRVE-10167 : I/O Completion Ports (IOCP) device status did not match the required value on node "nod
- Pycharm 操作Django Model的简单运用
- java.lang.IllegalArgumentException: Malformed \uxxxx encoding
- Android六个Mnanager(ActivityManager、ConnectivityManager、、Telep、PowerManager、WindowManager、WifiManager)
- 微信支付开发教程JAVA编[005]-签名算法
- 禁止百度转码
- B. Chris and Magic Square
- 编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。
- Retrofit 2.0 超能实践(一),完美支持加密Https传输
- 使用cefSharp的坎坷经历
- java IO字符流和字节流
- 求最大公约数
- 前端开发记录