程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 微信付出java版V3驗證數據正當性(Deom)

微信付出java版V3驗證數據正當性(Deom)

編輯:關於JAVA

微信付出java版V3驗證數據正當性(Deom)。本站提示廣大學習愛好者:(微信付出java版V3驗證數據正當性(Deom))文章只能為提供參考,不一定能成為您想要的結果。以下是微信付出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<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),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved