UDN-企业互联网技术人气社区

板块导航

浏览  : 1030
回复  : 2

[原生js] 微信支付java版V3验证数据合法性(Deom)

[复制链接]
西北的风的头像 楼主
发表于 2017-1-17 16:55:09 | 显示全部楼层 |阅读模式
  这篇文章主要介绍了微信支付java版V3验证数据合法性(Deom)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  1.1 解析微信回调数据
  1. InputStream inStream = request.getInputStream();
  2. ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
  3. byte[] buffer = new byte[1024];
  4. int len = 0;
  5. while ((len = inStream.read(buffer)) != -1) {
  6. outSteam.write(buffer, 0, len);
  7. }
  8. outSteam.close();
  9. inStream.close();
  10. /** 获取微信调用notify_url的返回XML信息 */
  11. String result = new String(outSteam.toByteArray(), "utf-8");
复制代码

  result结果就是微信回调返回的XML数据。
  
  1.2 解析微信返回的XML数据
  1. /**
  2. * 传入微信回调返回的XML信息
  3. * 以Map形式返回便于取值
  4. * dom4j解析XML,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值为空
  5. * @param strXML
  6. * @return
  7. * @throws DocumentException
  8. */
  9. @SuppressWarnings("rawtypes")
  10. public static SortedMap<String, String> dom4jXMLParse(String strXML) throws DocumentException {
  11. SortedMap<String, String> smap = new TreeMap<String, String>();
  12. Document doc = DocumentHelper.parseText(strXML);
  13. Element root = doc.getRootElement();
  14. for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
  15. Element e = (Element) iterator.next();
  16. smap.put(e.getName(), e.getText());
  17. }
  18. return smap;
  19. }
复制代码

  返回的是有序的Map格式数据,取值以smap.get("字段名")来获取数据。
  
  1.3 验证微信返回签名的合法性
  1. /**
  2. * 是否微信V3签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
  3. * 传入微信返回信息解析后的SortedMap格式参数数据
  4. * 验证消息是否是微信发出的合法消息
  5. * @param smap
  6. * @param APIKey 设置的密钥
  7. * @return 验证结果
  8. */
  9. @SuppressWarnings("rawtypes")
  10. public static boolean isWechatSign(SortedMap<String, String> smap,String apiKey) {
  11. StringBuffer sb = new StringBuffer();
  12. Set es = smap.entrySet();
  13. Iterator it = es.iterator();
  14. while (it.hasNext()) {
  15. Map.Entry entry = (Map.Entry) it.next();
  16. String k = (String) entry.getKey();
  17. String v = (String) entry.getValue();
  18. if (!"sign".equals(k) && null != v && !"".equals(v) && !"key".equals(k)) {
  19. sb.append(k + "=" + v + "&");
  20. }
  21. }
  22. sb.append("key=" + apiKey);
  23. /** 验证的签名 */
  24. String sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase();
  25. /** 微信端返回的合法签名 */
  26. String validSign = ((String) smap.get("sign")).toUpperCase();
  27. return validSign.equals(sign);
  28. }
复制代码

  个人建议:验证微信签名合法性之前可以先判断微信返回的return_code和result_code是不是SUCCESS。
  
  以上所述是小编给大家介绍的微信支付java版V3验证数据合法性(Deom),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
  

相关帖子

发表于 2017-1-17 16:55:38 | 显示全部楼层
貌似看过类似的文章恩,排版更清晰点就更好了
使用道具 举报

回复

发表于 2017-1-25 22:10:21 | 显示全部楼层
js是要逆天的节奏js虽然不错,但是天生也是有缺陷,局限性。。。
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部