首页 > 编程 > Java > 正文

微信支付java版V3验证数据合法性(Deom)

2019-11-26 13:48:53
字体:
来源:转载
供稿:网友

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),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表