当前位置: 移动技术网 > IT编程>开发语言>Java > 微信支付java版V3验证数据合法性(Deom)

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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),希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网