1.1 Analizar datos de devolución de llamada WeChat
InputStream Intilam = request.getInputStream (); byteArArAyOutputStream OutSteam = new ByteArRayOutputStream (); byte [] buffer = new byte [1024]; int Len = 0; while ((Len = Instail.Read (Buffer))! = -1) {OutSteam.Write (buffer, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Len);} OutSteam.Close (); Insteam.Close ();/** Obtenga la información de retorno xml de WeChat llamado notify_url*/string dult = new String (OutSteam.tobyTearray (), "utf-8"); El resultado es los datos XML devueltos por la devolución de llamada WeChat.
1.2 Analización de los datos XML devueltos por WeChat
/*** Información XML devuelta por la devolución de llamada WeChat entrante* Devuelve el valor fácil en forma de un mapa* DOM4J Parses XML y devuelve el par de teclas de llave de elemento de primer nivel. Si el elemento de primer nivel tiene hijos, el valor de este nodo está vacío* @param strxml* @return* @throws documentException*/ @supressWarnings ("rawTypes") public static sortedmap <string, string> dom4jxmlparse (strxml) lanza documentException {shutedmap <string> string = scratch = new treemap <string, string> ();); document;); DocumentHelper.parsettext (strxml); elemento root = doc.getRootElement (); for (iterator iterator = root.ElementIterator (); iterator.hasnext ();) {elemento e = (elemento) iterator.next (); smap.put (e.getName (), e.getText ());} smoke;} Devuelve datos de formato de mapa ordenados, y el valor se utiliza para obtener los datos usando smap.get ("nombre de campo").
1.3 Verifique la legalidad de la firma de regreso de WeChat
/*** Si firmar WeChat V3, las reglas son: ordenar por nombre de parámetro AZ y los parámetros que encuentran valores vacíos no participan en la firma* Pase en WeChat para devolver el formato SastedMap de los datos de los parámetros después del análisis de la información* Verifique si el mensaje es un mensaje legal enviado por Wechat* @param Smile* @param apikey el set de la verificación de la verificación* ISWeCHATSign estático booleano (SortedMap <String, String> Scratch, String ApikeY) {StringBuffer sb = new StringBuffer (); set ES = Smoke.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 (! "firma" .equals (k) && null! = V &&! "" Equals (v) & & "." Key ".Equals (k))))) + "&");}} sb.append ("key =" + apikey);/** firma verificada*/string signo = md5util.md5encode (sb.ToString (), "utf-8"). toUpperPercase ();/** La firma legal devuelta por el lado de Wechat*/String ValidSign = ((String) smap.get ("firmar")). toupperCase (); return walidsign.equals (firma);} Sugerencias personales: antes de verificar la legitimidad de la firma WeChat, primero puede determinar si el return_code y el resultado_code devuelto por WeChat son el éxito.
Lo anterior es la legalidad de los datos de verificación WeChat Pay Java Version V3 presentados por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!