Zunächst ist der Entwicklungsmodus von WeChat Enterprise -Konten unterteilt in: Bearbeitungsmodus (Normalmodus) und Entwicklungsmodus (Rückrufmodus) . Im Bearbeitungsmodus können Sie nur einfache benutzerdefinierte Menüs erstellen und automatisch Nachrichten beantworten. Um andere Funktionen zu verwirklichen, müssen Sie den Entwicklermodus einschalten.
1. Bearbeitungsmodus und Entwicklungsmodus, um Nachrichten zu verarbeiten
1. Im Bearbeitungsmodus werden alle Geschäftsprozesse auf dem WeChat -Server konfiguriert und von ihm verarbeitet.
2. Entwicklungsmodus, Nachrichten werden über Server von Drittanbietern verarbeitet, und schließlich werden Nachrichten über WeChat-Server an Benutzer gesendet.
Der Entwicklungsmodus kann mehr Nachrichten als den Bearbeitungsmodus verarbeiten, sodass Sie zuerst den Entwicklungsmodus ermöglichen müssen, um mehr Funktionen zu entwickeln.
2. Das Entwicklungsmodell wird gestartet
Im Rückrufmodus können Unternehmen nicht nur die Enterprise -Nummer -Schnittstelle aktiv aufrufen, sondern auch Nachrichten oder Ereignisse von Benutzern empfangen. Die empfangenen Informationen werden im XML -Datenformat UTF8 codiert und in AES verschlüsselt .
1. Nach dem Einschalten des Rückrufmodus müssen die Parameter wie folgt konfiguriert werden:
Die URL ist der zugegriffene Servlet, und das Token und Codingaeskey werden zufällig erhalten, müssen jedoch mit dem Projekt übereinstimmen.
2. Überprüfen Sie die Gültigkeit der URL
Wenn Sie die oben genannten Informationen einreichen, sendet die Unternehmensnummer eine GET-Anfrage an die ausgefüllte URL. Die GET -Anforderung trägt vier Parameter. Das Unternehmen muss bei der Erlangung von Urldecode -Verarbeitung durchgeführt werden , andernfalls ist die Überprüfung nicht erfolgreich.
3. Code
Coreservlet1 -Klasse
Public Class Coreservlet1 erweitert HttpServlet {private statische endgültige lange Serialversionuid = 4440739483644821986L; String stoken = "Weixincours"; String scorpid = "WXE510946434680DAB"; String sencodingaeskey = "djlyzxgkiwressiw2vnv9dsr7HSS7USWDFNWA8Q1ove1"; public void dodget (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {wxBizmsgcrypt wxcpt; try {wxcpt = new WxBizmsgcrypt (stoken, sencodingaeskey, scorpid); String SverifyMSGSIG = request.getParameter ("msg_signature"); String SverifyTimestamp = Anrequenz.GetParameter ("Timestamp"); String sverifyNonce = request.getParameter ("nonce"); String SverifyEchoStr = request.getParameter ("echostr"); String SecHostr; SECHOSTR = WXCPT.VERIFIFYURL (SverifyMSGSIG, SverifyTimestamp, SverifyNonce, SverifyEchoStr); System.out.println ("verifyurl echostr:" + asshstr); Printwriter out = response.getWriter (); out.print (Sechstr); out.close (); out = null; } catch (aesexception e1) {e1.printstacktrace (); }}} Werkzeuge:
/*** Beispielcode zum Verschlingen und Entschlüsseln von Nachrichten, die von öffentlichen Plattformen an öffentliche Konten gesendet werden. * * @Copyright Copyright (C) 1998-2014 Tencent Inc. * /// --------------------------------------------------------------------------------------------------------------------------------------------------------- com.qq.weixin.mp.aes; import java.nio.charset.charset; import Java.util.arrays; import Java.util.random; javax.crypto.cipher; org.apache.commons.Codec.base.base64;/*** bietet eine Verschlüsselungs- und Entschlüsselungsschnittstelle (UTF8-kodierter Zeichenfolge) zum Empfangen und Schieben von Nachrichten auf die öffentliche Plattform. * <OL> * <li> Antwort von Drittanbietern auf verschlüsselte Nachrichten an die öffentliche Plattform </li> * <li> Die von der öffentlichen Plattform gesendeten Nachrichten erhält Nachrichten, um die Sicherheit der Nachrichten zu überprüfen und die Nachrichten zu entschlüsseln. </li> * </ol> * Beschreibung: Ausnahme java.security.invalidkeyException: Lösung für die illegale Schlüsselgröße * <ol> * <li> Download JCE Unlimited Berechtigungsrichtlinie auf der offiziellen Website (die Download -Adresse von JDK7: * http://www.oracle.com/technetwork/java/javase/downloads/jce-7-Download-432124.html </li> * <li> Dekomprimieren nach dem Herunterladen sehen Sie Local_Policy.jar, US-ambolisch. %JRE_HOME %/lib/Sicherheitsverzeichnis, um die Originaldatei zu überschreiben. Base64 Base64 = Base64 (); Fehlercode und spezifische Fehlerinformationen der Ausnahme */ public wxBizmsgcrypt (String Token, String codingaeskey, String corpid) löscht aesexception {if (codingaeskey.length ()! } this.token = token; this.corpid = corpid; Aeskey = Base64.decodeBase64 (codingaeskey + "="); } /*** Entschlüsseln Sie den Chiffretentext. ** @param text Der Chiffretext, der entschlüsselt werden muss Versuchen Sie {// Setzen Sie den Entschlüsselungsmodus auf AES CBC -Modus Cipher Cipher = Cipher.getInstance ("AES/CBC/Nopadding"); SecretKeySpec KEY_SPEC = New SecretKeySpec (Aeskey, "AES"); Ivparameterspec iv = new ivparameterspec (arrays.copyofrange (Aeskey, 0, 16)); cipher.init (cipher.decrypt_mode, key_spec, iv); // Base64 verwenden, um das CipherText -Byte [] zu dekodieren. // entschlüsseln original = cipher.dofinal (verschlüsselt); } catch (Ausnahme e) {e.printstacktrace (); neue aesexception (aesexception.decryptaeseRror); } String xmlContent, von_corpid; Versuchen Sie {// Entfernen Sie das Komplement -Zeichen -Byte [] bytes = pkcs7Encoder.decode (original); // separate 16-Bit-Zufallszeichenfolgen, Netzwerkendianges und Corpid Byte [] networkOrder = arrays.copyofrange (Bytes, 16, 20); int xmllength = resoardNetworkByTesOrder (NetworkOrder); xmlContent = new String (arrays.copyofrange (bytes, 20, 20 + xmllength), charSet); from_corpid = new String (arrays.copyofrange (bytes, 20 + xmllength, bytes.length), charset); } catch (Ausnahme e) {e.printstacktrace (); neue aesexception (aesexception.IlleGalBuffer) werfen; } // Fall, wobei Corpid anders ist, wenn (! from_corpid.equals (corpid)) {neue aesexception (aesexception.validatecorpidError) werfen; } return xmlContent; } /** * URL überprüfen * @param msgSignature Signaturzeichenfolge, entsprechend den URL -Parametern msg_signature * @param timestamp timestamp, entspricht URL -Parametern Timestamp * @param nonce zufällige String, entsprechend den URL -Parametern nonce Aesexception Execution fehlgeschlagen. Überprüfen Sie bitte den Fehlercode und spezifische Fehlerinformationen der Ausnahme */ public String verifyUrl (String msgSignature, String -Zeitstempel, String nonce, String echoStr) Aesexception {String Signature = SHA1.getSHA1 (Token, Timestamp, Nonce, EchoStr); if (! Signature.equals (msgSignature)) {neue aesexception (aesexception.ValidatesignatureError); } String result = decrypt (echostr); Rückgabeergebnis; }} /*** Beispielcode zum Verschlingen und Entschlüsseln von Nachrichten, die von öffentlichen Plattformen an öffentliche Konten gesendet werden. * * @Copyright Copyright (C) 1998-2014 Tencent Inc. * /// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @param Encrypt CipHerText* @return Secure Signature* @throws Aesexception*/ public static String getSha1 (String -Token, String Timestamp, String nonce, String Encrypt) löst Aesexception {try {String [] array = new String [] {token, timestamp, nonce, cnypt}; StringBuffer sb = new StringBuffer (); // String sortieren arrays.sort (Array); für (int i = 0; i <4; i ++) {sb.append (Array [i]); } String str = sb.toString (); // SHA1 Signature Generation MessagedIGest MD = MessagedIGest.getInstance ("SHA-1"); md.update (str.getBytes ()); byte [] digest = md.Digest (); StringBuffer hexstr = new StringBuffer (); String Shahex = ""; für (int i = 0; i <digest.length; i ++) {shahex = integer.tohexString (Digest [i] & 0xff); if (shahex.length () <2) {hexstr.Append (0); } hexstr.append (shahex); } return hexstr.toString (); } catch (Ausnahme e) {e.printstacktrace (); neue aesexception (aesexception.comPutesignatureError) werfen; }}} Klasse PKCS7CODER {static charSet charset = charset.forname ("utf-8"); static int block_size = 32;/ *** Löschen Sie das Komplement -Zeichen des entschlüsselten Klartextes** @param entschlüsselt den entschlüsselten Klartext* @return plelligtext nach dem Löschen des Füllzeichens*/ statische Byte [] decoded (Byte [] entschlüsselt) {int pad = (int) entschlüsselt. if (pad <1 || pad> 32) {pad = 0; } return arrays.copyofrange (entschlüsselt, 0, entschlüsselt.Length - Pad); }} 3. Zusammenfassung
Das Enterprise überprüft die Anforderung über die Parameter msg_signature. Wenn bestätigt wird, dass die GET -Anforderung aus der Enterprise -Nummer stammt, entschlüsselt die Enterprise -Anwendung den Echostr -Parameter und gibt den Echostr -Klartext so zurück (zitiert kann nicht hinzugefügt werden), dann nimmt die Zugriffsüberprüfung wirksam und der Rückrufmodus kann aktiviert werden. Nach dem Einschalten werden einige Funktionen nacheinander implementiert, also bleiben Sie dran!
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.