微信支付java版V3验证数据合法性(Deom)
程序员文章站
2024-03-12 19:23:32
1.1 解析微信回调数据
inputstream instream = request.getinputstream();
bytearrayoutputstr...
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),希望对大家有所帮助