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

网友投稿 253 2023-07-06


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

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 dom4jXMLParse(String strXML) throws DocumentException {

SortedMap smap = new TreeMap();

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 smap,String apiKey) {

StringBuffer sb = new StringBuffer();

Set es = smap.entrySet(http://);

Iterator it = es.iterator();

while (it.hasNext()) {

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java/Android引用类型及其使用全面分析
下一篇:Android中用RxJava和ViewPager实现轮播图
相关文章

 发表评论

暂时没有评论,来抢沙发吧~