手机
当前位置:查字典教程网 >编程开发 >Java >微信支付java版V3验证数据合法性(Deom)
微信支付java版V3验证数据合法性(Deom)
摘要:1.1解析微信回调数据InputStreaminStream=request.getInputStream();ByteArrayOutpu...

1.1 解析微信回调数据

InputStream inStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); /** 获取微信调用notify_url的返回XML信息 */ String result = new String(outSteam.toByteArray(), "utf-8");

result结果就是微信回调返回的XML数据。

1.2 解析微信返回的XML数据

/** * 传入微信回调返回的XML信息 * 以Map形式返回便于取值 * dom4j解析XML,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值为空 * @param strXML * @return * @throws DocumentException */ @SuppressWarnings("rawtypes") public static SortedMap<String, String> dom4jXMLParse(String strXML) throws DocumentException { SortedMap<String, String> smap = new TreeMap<String, String>(); Document doc = DocumentHelper.parseText(strXML); Element root = doc.getRootElement(); for (Iterator iterator = root.elementIterator(); iterator.hasNext();) { Element e = (Element) iterator.next(); smap.put(e.getName(), e.getText()); } return smap; }

返回的是有序的Map格式数据,取值以smap.get("字段名")来获取数据。

1.3 验证微信返回签名的合法性

/** * 是否微信V3签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 * 传入微信返回信息解析后的SortedMap格式参数数据 * 验证消息是否是微信发出的合法消息 * @param smap * @param apiKey 设置的密钥 * @return 验证结果 */ @SuppressWarnings("rawtypes") public static boolean isWechatSign(SortedMap<String, String> smap,String apiKey) { StringBuffer sb = new StringBuffer(); Set es = smap.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); String v = (String) entry.getValue(); if (!"sign".equals(k) && null != v && !"".equals(v) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + apiKey); /** 验证的签名 */ String sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase(); /** 微信端返回的合法签名 */ String validSign = ((String) smap.get("sign")).toUpperCase(); return validSign.equals(sign); }

个人建议:验证微信签名合法性之前可以先判断微信返回的return_code和result_code是不是SUCCESS。

以上所述是小编给大家介绍的微信支付java版V3验证数据合法性(Deom),希望对大家有所帮助,如果大家有任何疑问请给我们留言,小编会及时回复大家的。在此也非常感谢大家对查字典教程网的支持!

【微信支付java版V3验证数据合法性(Deom)】相关文章:

java 图片验证码的实现代码

封装了一个Java数据库访问管理类

JAVA实现线程的三种方法

jfinal添加jcaptcha验证码实现方法

浅析JAVA常用JDBC连接数据库的方法总结

java验证码组件kaptcha使用方法

java多线程编程之为什么要进行数据同步

java 常用快捷键汇总(超经典)

java配置数据库连接池的方法步骤

java身份证验证代码实现

精品推荐
分类导航