gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章微信支付java版V3验证数据合法性(Deom)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1.1 解析微信回调数据 。

?
1
2
3
4
5
6
7
8
9
10
11
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数据 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 传入微信回调返回的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 验证微信返回签名的合法性 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* 是否微信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),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://www.cnblogs.com/solang/archive/2016/09/19/5884835.html 。

最后此篇关于微信支付java版V3验证数据合法性(Deom)的文章就讲到这里了,如果你想了解更多关于微信支付java版V3验证数据合法性(Deom)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com