1. Intranet Mapping
Da der Callback -Modus von WeChat Enterprise -Konto den Zugriff auf den Domain -Namen unterstützt, müssen Sie eine Erdnussschale registrieren und eine Intranet -Penetration durchführen (es kostet 16 Yuan, eine kostenlose Version zu kaufen, und Sie können den Domain -Namen am nächsten Tag nur hinzufügen, nachdem Sie ihn gekauft haben).
2. WeChat Enterprise -Konto
Registrieren Sie ein WeChat Enterprise -Konto: https://qy.weixin.qq.com/ (Wählen Sie ein Team aus, das Team benötigt keine Zertifizierung)
Kontakte: Erstellen einer neuen Organisation -> Mitglieder folgen
Enterprise -Konto -> Anwendungszentrum -> Neue Anwendung -> Nachrichtenanwendung -> Modusauswahl (Rückrufmodus) -> WeChat Meldung einschalten,
Rückrufmodus Beschreibung: http://qydev.weixin.qqq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8f
Rückrufmodusverschlüsselung und Entschlüsselungscode: http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5 %Af%86%e5%ba%93%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BF%94%E5%9B%E7%E7%A0%81
Wie in Abbildung 1 gezeigt:
Benutzerdefiniertes Menü: Der Anforderungspfad für die Entwicklungsanwendung ist in Abbildung 2 dargestellt:
Einstellungen -> Funktionseinstellungen -> Berechtigungsverwaltung -> Neue Verwaltungsgruppe -> Anwendungsberechtigungen (Geheimnis)
3.. Verwenden Sie Jersey, um Webdienstdienste zu entwickeln
3.1 Definieren Sie Token in der Klasse, zufälliges Passwort 43 Ziffern, Unternehmen Corpid, Secret
3.2 Überprüfungsmethode
/ * * --------------------- × tamp * = 1409659589 & nonce = 263014780 & echostr = p9nazczyDtytweshp1vc5x9xho% * 2fqyx3zpb4yka9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HTTP/1.1 HOST: QY.WEIXIN.QQ. Signatur (msg_signature), timestempel (Zeitstempel), Zufallszahlenstring (Nonce *) und die von der öffentliche Plattform gedrängte zufällige verschlüsselte String (Echostr). Achten Sie in diesem Schritt auf URL -Dekodierung. 2. Überprüfen Sie die Richtigkeit der Meldungskörpersignatur 3. * Entschlüsseln Sie den ursprünglichen Echostr -Text, behandeln Sie den Originaltext als Antwort der Get -Anforderung und geben Sie ihn an die öffentliche Plattform zurück. Schritt 2. 3 kann mithilfe der von der öffentlichen Plattform bereitgestellten Bibliotheksfunktion Verifyurl implementiert werden. *// ** * Callback -URL, WeChat ruft diese Methode zur Überprüfung auf * * @return */ @get @Path ("Station") public String verifizieren () {String msgSignature = Request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); System.out.println (Timestamp + "" + nonce); String echoStr = request.getParameter ("echostr"); String asshostr = null; try {tearHoStr = wxcpt.VerifyUrl (MSGSignature, Timestamp, Nonce, Echostr); } catch (Ausnahme e) {e.printstacktrace (); // Überprüfung der URL fehlgeschlagen. Weitere Informationen finden Sie in der Ausnahme für den Fehler. }3.3 Empfangen Sie Benutzerinformationen und entschlüsseln Sie sie
/ * * -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * <Tousername> <! [CDATA [WX5823BF96D3BD56C7]]> </tousername *> <Encrypt> <! [CData [rypevhkd8qqkfhvq6qleeb4j58tipdvo * +rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwfrf0qadHHHGD3QCZCDCUPJ911L3VG3W/ * SYYVUJTS3TUKSUXXACCAS0QHXCHRRYT66WISPGLYL42AM6A8DTTTttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt * +6K4asknmpj48kzjs8qljvd4xgpue06DodnlxauHZM6 * +KDZ +HMZFJYUR +LTWGC2HGF5GSIJFF0EKUNXZIQATP7PF5MZXZ3S4ZG4L4L4L4L4L4L4L4L4LUNTRVW2R +3iqh03v +bca9nmelnqbsf6tiwsrxjb3lavgucAllcrw8v2t9El4EHZJWRAX5WLVMNS0 * +RUPA3K22NCX4XXZS9O0MBH27BO6BPNELZPS * * +/uh9KsNlY6bHCmJU9p8g7m3fVKn28H3KDYA5Pl * /T8Z1ptDAVe0lXdQ2YoyyH2uyPIGHBZZIs2pDBS8R07+qN+E7Q==]]></Encrypt> * <AgentID><![CDATA[218]]></AgentID> </xml> * * After the Enterprise empfängt die Postanforderung, sie sollte die Parameter in der URL, einschließlich der Meldungskörpersignatur (MSG_Signature), des Zeitstempels (Zeitstempel) und der zufälligen Zahlenzeichenfolge (Nonce) * 2. Überprüfen Sie die Korrektheit der Meldungskörpersignatur. * 3. Die angeforderten Daten wird von XML analysiert und entschlüsselt den Inhalt des <Ecrypt> -Tags. Der entschlüsselte Klartext ist der Klartext der Antwortmeldung des Benutzers. Bitte beachten Sie das offizielle Dokument für das Klartextformat* Schritt 2 und 3 können mit der von der öffentlichen Plattform bereitgestellten Bibliotheksfunktion entschlüsselt werden. */ @Post @Path ("Station") public String Receivemsg (String reqdata) {String msgSignature = request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); // CipheText -Daten, die nach Post // String sreqdata = // angefordert wurden "<xml> <tousername> <! [CDATA [WX5823BF96D3BD56C7]]> </tousername> <Encrypt> <! [CD ATA [RYPEVHKD8QQKFHVQ6QLEEB4J58TIPDVO+RTK1I9QCA6AM/WVQNLSV5ZEPEUX5L5X/0LWF rf0qadhhhgd3qczcdcupj911l3vg3w/syyvujts3TuUksuxxAccas0qHxchrryt66wispglyl42a M6a8dtt+6k4asknmpj48kzjs8qljvd4xgpUe06DodnlxauHzm6+KDZ+HMZFJYUR+LTWGC2HGF5GS IJFF0EKUNXZIQATP7PF5MZXZ3IZOUN1S4ZG4LUMNVW2R+KQCKIW+3IQH03V+BCA9NMELNQBSF6T IWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRAX5WLVMNS0+RUPA3K22NCX4XXZS9O0MBH27BO6BP Nelzps+/UH9KSNLY6BHCMJU9P8G7M3FVKN28H3KDYA5PL/T8Z1PTDAVE0LXDQ2YOYH2UYPIGHBZZIS2PDBS8R07+qn+E7Q ==]> </ENCRYPT> <agentID> <! [[[[[218). try {string smsg = wxcpt.decryptmsg (msgSignature, timestamp, nonce, reqdata); // den Inhalt des PlainText XML -Tags für die Verarbeitung von DocumentBuilderFactory dbf = documentBuilderFactory.NewInstance () analysieren; DocumentBuilder db = dbf.newdocumentBuilder (); StringReader sr = new StringReader (SMSG); InputSource ist = new InputSource (SR); Document document = db.parse (ist); Element root = document.getDocumentElement (); Nodelist nodelist1 = root.getElementsByTagName ("Inhalt"); if (nodelist1.Item (0) == null) return "ok"; String content = nodelist1.Item (0) .GeteTextContent (); System.out.println ("Inhalt:" + Inhalt); } catch (Ausnahme e) {e.printstacktrace (); // Die Entschlüsselung fehlgeschlagen, überprüfen Sie bitte die Ausnahme für den Fehler} zurück "OK"; }3.4 Informationen an WeChat senden
Einstellungen -> Funktionseinstellungen -> Berechtigungsverwaltung -> Erstellen einer neuen Verwaltungsgruppe; Geheim werden
/** * Diese Methode kann Nachrichten von beliebigen Typen senden * * @param msgType * Text | Bild | Sprache | Video | Datei | Nachrichten * @param touser * Member -ID -Liste (Nachrichtenempfänger, mehrere Empfänger werden durch '|' getrennt und bis zu 1.000 unterstützt). Sonderfall: Als @all angegeben, wird * @param topy * Abteilungs -ID an alle Mitglieder gesendet, die der Enterprise -Anwendung folgen. Mehrere Empfänger werden durch '|' getrennt und bis zu 100 unterstützt. Ignorieren Sie diesen Parameter, wenn Touser @All * @Param Totag * Tag -ID -Liste ist, werden mehrere Empfänger durch '|' getrennt. Ignorieren Sie diesen Parameter, wenn Touser @All * @param Inhalt * ist, wenn msgType = text, Textnachricht Inhalt * @param MediaId * When msgType = Bild | Voice | Video, entsprechende Nachrichteninformations-ID (-------) * @param title * wenn msgType = Video, Nachrichtentitel * @Param Beschreibung @param picurl * Wenn msgType = news, Bildpfad * @param Safe * angibt, ob es sich um eine vertrauliche Nachricht handelt, gibt 0 an, nein, 1 zeigt Ja an. String access_token = getAccessToken (); // String Request String String Action = create_session_url + access_token; // Incapsulate Message Request JSON StringBuffer sb = new StringBuffer (); sb.append ("{"); sb.append ("/" touser/":" + "/" " + touser +"/",", "); sb.append ("/" toparty/":" + "/" " + toparty +"/",", "); sb.append ("/" totag/":" + "/" " + totag +"/","); if (msgType.equals ("text") {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" text/":" + "{"); sb.append ("/" content/":" + "/" " + content +"/""); sb.Append ("}"); } else if (msgType.equals ("Bild")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" image/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("voice")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" voice/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("Video") {sb.append ("/" msgType/":" + "/" " + msgType +"/","); SB.Append ("/" Video/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/",", "); sb.append ("/" title/":" + "/" " + title +"/","); SB.Append ("/" Beschreibung/":" + "/" " + Beschreibung +"/""); sb.Append ("}"); } else if (msgType.equals ("file")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" Datei/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("news")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" news/":" + "{"); sb.Append ("/" Artikel/":" + "["); sb.append ("{"); sb.append ("/" title/":" + "/" " + title +"/","); sb.append ("/" Beschreibung/":" + "/" " + Beschreibung +"/","); sb.append ("/" url/":" + "/" " + url +"/","); sb.append ("/" picurl/":" + "/" " + picurl +"/""); sb.Append ("}"); Sb.Append ("]"); sb.Append ("}"); } sb.append (",/" sicher/":" + "/" " + sicher +"/",")); sb.Append ("/" AgentID/":" + "/" " + 1 +"/",", "); sb.append ("/" debug/":" + "/" " +" 1 " +"/""); sb.Append ("}"); String json = sb.toString (); try {url = new url (action); HttpsurlConnection http = (httpsurlConnection) url.openconnection (); http.setRequestMethod ("post"); http.setRequestProperty ("Content-Typ", "Application/JSON; CharSet = Utf-8"); http.setDooutput (true); http.setDoInput (true); System.setProperty ("sun.net.client.defaultConnectTimeout", "30000"); // // Verbindungszeitlimit 30 Sekunden System.setProperty ("sun.net.client.defaultreadTimeout", "30000"); // // Timeout 30 Sekunden http.connect () lesen; OutputStream os = http.getOutputStream (); os.write (json.getBytes ("utf-8")); // in Parameter inputStream übergeben ist = http.getInputStream (); int size = is.Available (); byte [] jsonBytes = neues Byte [Größe]; is.read (jsonBytes); String result = new String (jsonBytes, "utf-8"); System.out.println ("Anfrage return Ergebnis:" + Ergebnis); os.flush (); os.close (); } catch (Ausnahme e) {e.printstacktrace (); }} // den Schnittstellenzugriffscode public String getAccessToken () {httpclient client = new httpclient (); Postmethod post = new postmethod (access_token_url); post.releaseconnection (); post.setRequestheader ("Content-Typ", "Anwendung/x-www-form-urlencoded; charSet = utf-8"); NAMEVALEPAIR [] param = {new namevaluepair ("corpid", corpid), neuer namevaluepair ("corpecret", Secret)}; // Richtlinien festlegen, um zu verhindern, dass Cookie-Fehler gemeldet werden, defaulthttpparams.getDefaultParams (). // Parameter für Post Post Post Post.setRequestBody (Param) festlegen; String result = ""; try {client.executemethod (post); result = new String (post.getResponseBodyAssstring (). getBytes ("gbk")); } catch (ioException e) {e.printstacktrace (); } // Daten in JSON JSONObject JasonObject konvertieren; JasonObject = jsonObject.fromObject (Ergebnis); result = (string) jasonObject.get ("access_token"); post.releaseconnection (); System.out.println (Ergebnis); Rückgabeergebnis; } public static void main (String [] args) {stationResource wechat = new stationResource (); // Wechat.SendwechatmsGtext ("@all", "2", "," Information Center Benachrichtigung "," 0 "); Wechat.Sendwechatmsg ("News", "@all", ",", "," Test SENMSG ",", "getestet", "wirklich getestet", "http://www.baidu.com", "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg", "0"); }4. Die Entwicklung ist abgeschlossen. Diese Klasse muss hinzugefügt werden, um in webx.xml auszuruhen, um verwaltet zu werden
<!-READFUR UNTERSTÜTZUNG-> <!-Webserivce-Service. Wenn ein Dienst hinzugefügt wird, muss der Paketpfad des Dienstes zum Param-Wert hinzugefügt werden-> <servlet> <servlet-name> jax-rs rast servlet </servlet-name> <servlet-classe> com.sun.jersey.spi.container.Servlet.ServletContain </servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.base.pf.restful</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS REST Servlet</servlet-name> <URL-Muster>/rest/*</url-muster> </Servlet-Mapping>
5. Voller Code abgeschlossen
Paket com.base.pf.restful; importieren java.io.ioException; importieren java.io.inputstream; importieren java.io.outputstream; Import Java.io.StringReader; importieren java.net.url; importieren javax.net.ssl.httpSurlConnection; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; importieren javax.ws.rs.get; importieren javax.ws.rs.post; importieren javax.ws.rs.path; importieren javax.ws.rs.core.context; importieren javax.xml.parsers.documentBuilder; importieren javax.xml.parsers.documentBuilderFactory; import net.sf.json.jsonObject; import org.apache.commons.httpclient.httpclient; import org.apache.commons.httpclient.namevaluepair; import org.apache.commons.httpclient.cookiepolicy; import org.apache.commons.httpclient.methods.postMethod; import org.apache.commons.httpclient.params.defaulthttpparams; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; import org.xml.sax.inputSource; import com.qq.weixin.mp.aes.aesexception; import com.qq.weixin.mp.aes.wxbizmsgcrypt; /** * WeChat Enterprise Account Development * * @Author Zhen.l * */@Path ("wx") öffentliche Klasse StationResource {// http://hichinamobile.xicp.net/security/rest/wx // https://qy // Enterprise-Nummer-> Anwendungszentrum-> Neue Anwendung-> Nachrichten-Typ-Anwendung private String agentid = "1"; // Enterprise Number-> Anwendungszentrum-> Klicken Sie auf die Anwendung-> Anwendungs-ID private Zeichenfolge codingaeskey = "nt6zwtvFlynxohfoggozwdjpageFSV8LN5CNEYW7MWL"; // Enterprise-Nummer-> Anwendungszentrum-> Neue Anwendung-> Nachrichten-Typ-Anwendung private String corpid = "WXE49318EB604CF00B"; // Enterprise Number-> Einstellungen-> Enterprise-Nummer Information-> Kontoinformationen private String geheim = "m-yfkmgl_kxbvetginzh3rqwbz4xb6mfeqxlk77mkpxzenfdyq-ugerxduf8rel"; // Enterprise-Nummer-> Einstellungen-> Funktionseinstellungen-> Berechtigungsverwaltung @Context httpServletRequest-Anforderung; @Context httpServletResponse -Antwort; WxBizmsgcrypt wxcpt = null; public stationResource () {try {wxcpt = new WXBizMSGcrypt (Token, Codingaeskey, Corpid); } catch (aesexception e) {e.printstacktrace (); }} // Access Code URL Private Finale statische String Access_Token_url = "https://qyapi.weixin.qq.com/cgi-bin/getToken"; // Erstellen einer Sitzungsanforderung URL Private Final Static String create_session_url = "https://qyapi.weixin.qq.com/cgi-ner/message/send?access_token="; // den Schnittstellenzugriffscode öffentliche String getAccessToken () {httpclient client = new httpclient (); Postmethod post = new postmethod (access_token_url); post.releaseconnection (); post.setRequestheader ("Content-Typ", "Anwendung/x-www-form-urlencoded; charSet = utf-8"); NAMEVALEPAIR [] param = {new namevaluepair ("corpid", corpid), neuer namevaluepair ("corpecret", Secret)}; // Richtlinien festlegen, um zu verhindern, dass Cookie-Fehler gemeldet werden, defaulthttpparams.getDefaultParams (). // Parameter für Post post post.setRequestBody (Param) festlegen; String result = ""; try {client.executemethod (post); result = new String (post.getResponseBodyAssstring (). getBytes ("gbk")); } catch (ioException e) {e.printstacktrace (); } // Daten in JSON JSONObject JasonObject konvertieren; JasonObject = jsonObject.fromObject (Ergebnis); result = (string) jasonObject.get ("access_token"); post.releaseconnection (); System.out.println (Ergebnis); Rückgabeergebnis; } / * * ----------------------------- Wenn das Unternehmen den Rückrufmodus einschalten /cgi-bin /wxpush? 2fqyx3zpb4yka9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HTTP/1.1 HOST: QY.WEIXIN.QQ. Signatur (MSG_Ignature), Timestamp (Zeitstempel) und Zufallszahl String (Nonce *) und zufällige verschlüsselte Zeichenfolgen (Echostr), die von der öffentlichen Plattform gedrängt wurden. Achten Sie in diesem Schritt auf URL -Dekodierung. 2. Überprüfen Sie die Richtigkeit der Meldungskörpersignatur 3. * Entschlüsseln Sie den ursprünglichen Echostr -Text, behandeln Sie den Originaltext als Antwort der Get -Anforderung und geben Sie ihn an die öffentliche Plattform zurück. Schritt 2. 3 kann mithilfe der von der öffentlichen Plattform bereitgestellten Bibliotheksfunktion Verifyurl implementiert werden. *// ** * Callback -URL, WeChat ruft diese Methode zur Überprüfung auf * * @return */ @get @Path ("Station") public String verifizieren () {String msgSignature = Request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); System.out.println (Timestamp + "" + nonce); String echoStr = request.getParameter ("echostr"); String asshostr = null; try {tearHoStr = wxcpt.VerifyUrl (MSGSignature, Timestamp, Nonce, Echostr); } catch (Ausnahme e) {e.printstacktrace (); // URL -fehlgeschlagen, prüfen Sie die Ausnahme für den Fehlergrund} Return SecHoStr zurück; } /* * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- msg_signature = 477715d11cdb4164915debcba66cb864d751f3e6 * × tamp = 1409659813 & nonce = 1372623149 http/1.1 Host: Qy.Weixin.qqq.com * Content-Länge: 613 <xml> * · qy.wer <Tousername> <! [CDATA [WX5823BF96D3BD56C7]]> </tousername *> <Encrypt> <! [CDATA [RYPEVHKD8QQKFHVQ6Q6QLEEB4J58TIPDVO * * +rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwfrf0qadHHHGD3QCZCDCUPJ911L3VG3W/ * SYYVUJTS3TUKSUXXACCAS0QHXCHRRYT66WISPGLYL42AM6A8DTTTttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt * +6K4asknmpj48kzjs8qljvd4xgpue06DodnlxauHZM6 * +KDZ +HMZFJYUR +LTWGC2HGF5GSIJFF0EKUNXZIQATP7PF5MZXZ3S4ZG4L4L4L4L4L4L4L4L4LUNTRVW2R +3iqh03v +bca9nmelnqbsf6tiwsrxjb3lavgucAllcrw8v2t9El4EHZJWRAX5WLVMNS0 * +RUPA3K22NCX4XXZS9O0MBH27BO6BPNELZPS * * +/uh9KsNlY6bHCmJU9p8g7m3fVKn28H3KDYA5Pl * /T8Z1ptDAVe0lXdQ2YoyyH2uyPIGHBZZIs2pDBS8R07+qN+E7Q==]]></Encrypt> * <AgentID><![CDATA[218]]></AgentID> </xml> * * After the Enterprise empfängt die Postanforderung, sie sollte die Parameter in der URL, einschließlich der Meldungskörpersignatur (MSG_Signature), des Zeitstempels (Zeitstempel) und der zufälligen Zahlenzeichenfolge (Nonce) * 2. Überprüfen Sie die Korrektheit der Meldungskörpersignatur. * 3. Die angeforderten Daten wird von XML analysiert und entschlüsselt den Inhalt des <Ecrypt> -Tags. Der entschlüsselte Klartext ist der Klartext der Antwortmeldung des Benutzers. Bitte beachten Sie das offizielle Dokument für das Klartextformat* Schritt 2 und 3 können mit der von der öffentlichen Plattform bereitgestellten Bibliotheksfunktion entschlüsselt werden. */ @Post @Path ("Station") public String Receivemsg (String reqdata) {String msgSignature = request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); // CipheText -Daten, die nach Post // String sreqdata = // angefordert wurden "<xml> <tousername> <! [CDATA [WX5823BF96D3BD56C7]]> </tousername> <Encrypt> <! [CD ATA [RYPEVHKD8QQKFHVQ6QLEEB4J58TIPDVO+RTK1I9QCA6AM/WVQNLSV5ZEPEUX5L5X/0LWF rf0qadhhhgd3qczcdcupj911l3vg3w/syyvujts3TuUksuxxAccas0qHxchrryt66wispglyl42a M6a8dtt+6k4asknmpj48kzjs8qljvd4xgpUe06DodnlxauHzm6+KDZ+HMZFJYUR+LTWGC2HGF5GS IJFF0EKUNXZIQATP7PF5MZXZ3IZOUN1S4ZG4LUMNVW2R+KQCKIW+3IQH03V+BCA9NMELNQBSF6T IWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRAX5WLVMNS0+RUPA3K22NCX4XXZS9O0MBH27BO6BP Nelzps+/UH9KSNLY6BHCMJU9P8G7M3FVKN28H3KDYA5PL/T8Z1PTDAVE0LXDQ2YOYH2UYPIGHBZZIS2PDBS8R07+qn+E7Q ==]> </ENCRYPT> <agentID> <! [[[[[218). try {string smsg = wxcpt.decryptmsg (msgSignature, timestamp, nonce, reqdata); // den Inhalt des PlainText XML -Tags für die Verarbeitung von DocumentBuilderFactory dbf = documentBuilderFactory.NewInstance () analysieren; DocumentBuilder db = dbf.newdocumentBuilder (); StringReader sr = new StringReader (SMSG); InputSource ist = new InputSource (SR); Document document = db.parse (ist); Element root = document.getDocumentElement (); Nodelist nodelist1 = root.getElementsByTagName ("Inhalt"); if (nodelist1.Item (0) == null) return "ok"; String content = nodelist1.Item (0) .GeteTextContent (); System.out.println ("Inhalt:" + Inhalt); } catch (Ausnahme e) {e.printstacktrace (); // Die Entschlüsselung fehlgeschlagen, überprüfen Sie bitte die Ausnahme für den Fehler} zurück "OK"; } / * * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Angenommen, das Unternehmen muss auf den einfachen Text des Benutzers wie folgt antworten: <xml> * <Tousername> <! [Cdata [mycreate]> </tousername> * <fromusername> <! [CDATA [WX5823BF96D3BD56C7]> </Fromsername> * <Createtime> 13483831860; <MsgType> <! [CDATA [Text]> </msgType> * <Content> <! [CDATA [Dies ist ein Test]> </content> * <msgid> 1234567890123456 </msgid> <Aggid> 128 </Agentid> </xml> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * usw. the userml shed userml -user -user -user -user -user -user -user -user -user -user -user -user -user -user -user -user -user -user -usw. 1. Zeitstempel und eine zufällige Zahlenzeichenfolge (Nonce), um die Meldungskörpersignatur zu generieren oder den entsprechenden Wert direkt aus der Post * -URL der öffentlichen Plattform zu verwenden. 2. Verschlüsseln Sie den einfachen Text, um den Cipher -Text zu erhalten. * 3.. Verwenden Sie den Cipher -Text, den Zeitstempel, die in Schritt 1 generierten Nonce und Token, die vom Unternehmen auf der öffentlichen Plattform festgelegt werden, um Nachrichten -Körper -Signaturen zu generieren. * 4. Spleißen Sie den Chiffrettext, die Signatur, den Zeitstempel und die zufällige Zahlenzeichenfolge in eine Zeichenfolge im XML -Format und senden Sie sie an das Unternehmen. * Die obigen 2, 3 und 4 Schritte können mit der von der öffentlichen Plattform bereitgestellten Bibliotheksfunktion Encryptmsg implementiert werden. */ // @get // @path ("send") public void sendsg (String timestamp, String nonce) {String srespdata = "<xml> <tousername> <! [cdata [mycreate]]> </tousername> <fromusername> <! [CDATA [WXE49318EB604CF00B]]> </from Userername> <createTime> 1348831860 </createTime> <msgType> <! [CDATA [Text]]> </msgType> <Content> <! [CDATA [this ist ein Test]]> </content> <msgid> 1234567890123456 </msgid> <agentID> 1 </agentID> </xml> "; try {string sencryptmsg = wxcpt.encryptmsg (srespdata, timestamp, nonce); System.out.println ("After Encrypt sencrytmsg:" + sencryptmsg); Antwort.getWriter (). Print (sencryptmsg); } catch (Ausnahme e) {e.printstacktrace (); // Verschlüsselung fehlgeschlagen} // return srespdata; } /** * Diese Methode kann jede Art von Nachrichten senden * * @param msgType * Text | Bild | Sprache | Video | Datei | Nachrichten * @param touser * Member -ID -Liste (Nachrichtenempfänger, mehrere Empfänger werden durch '|' getrennt und bis zu 1.000 werden unterstützt). Sonderfall: Als @all angegeben, wird * @param topy * Abteilungs -ID an alle Mitglieder gesendet, die der Enterprise -Anwendung folgen. Mehrere Empfänger werden durch '|' getrennt und bis zu 100 unterstützt. Ignorieren Sie diesen Parameter, wenn Touser @All * @Param Totag * Tag -ID -Liste ist, werden mehrere Empfänger durch '|' getrennt. Ignorieren Sie diesen Parameter, wenn Touser @All * @param Inhalt * ist, wenn msgType = text, Textnachricht Inhalt * @param MediaId * When msgType = Bild | Sprache | Video, entsprechende Nachrichteninformations-ID (-------) * @param title * wenn msgType = Video, Nachrichtentitel * @Param Beschreibung @param picurl * Wenn msgType = news, Bildpfad * @param Safe * angibt, ob es sich um eine vertrauliche Nachricht handelt, gibt 0 an, nein, 1 zeigt Ja an. String access_token = getAccessToken (); // String Request String String Action = create_session_url + access_token; // Incapsulate Message Request JSON StringBuffer sb = new StringBuffer (); sb.append ("{"); sb.append ("/" touser/":" + "/" " + touser +"/",", "); sb.append ("/" toparty/":" + "/" " + toparty +"/",", "); sb.append ("/" totag/":" + "/" " + totag +"/","); if (msgType.equals ("text") {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" text/":" + "{"); sb.append ("/" content/":" + "/" " + content +"/""); sb.Append ("}"); } else if (msgType.equals ("Bild")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" image/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("voice")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" voice/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("Video") {sb.append ("/" msgType/":" + "/" " + msgType +"/","); SB.Append ("/" Video/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/",", "); sb.append ("/" title/":" + "/" " + title +"/","); SB.Append ("/" Beschreibung/":" + "/" " + Beschreibung +"/""); sb.Append ("}"); } else if (msgType.equals ("file")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" Datei/":" + "{"); sb.append ("/" media_id/":" + "/" " + mediaId +"/""); sb.Append ("}"); } else if (msgType.equals ("news")) {sb.append ("/" msgType/":" + "/" " + msgType +"/","); sb.append ("/" news/":" + "{"); sb.Append ("/" Artikel/":" + "["); sb.append ("{"); sb.append ("/" title/":" + "/" " + title +"/","); sb.append ("/" Beschreibung/":" + "/" " + Beschreibung +"/","); sb.append ("/" url/":" + "/" " + url +"/","); sb.append ("/" picurl/":" + "/" " + picurl +"/""); sb.Append ("}"); Sb.Append ("]"); sb.Append ("}"); } sb.append (",/" sicher/":" + "/" " + sicher +"/",")); SB.Append ("/" AgentID/":" + "/" " + agentID +"/","); sb.append ("/" debug/":" + "/" " +" 1 " +"/""); sb.Append ("}"); String json = sb.toString (); try {url = new url (action); HttpsurlConnection http = (httpsurlConnection) url.openconnection (); http.setRequestMethod ("post"); http.setRequestProperty ("Content-Typ", "Application/JSON; CharSet = Utf-8"); http.setDooutput (true); http.setDoInput (true); System.setProperty ("sun.net.client.defaultConnectTimeout", "30000"); // // Verbindungszeitlimit 30 Sekunden System.setProperty ("sun.net.client.defaultreadTimeout", "30000"); // // Timeout 30 Sekunden http.connect () lesen; OutputStream os = http.getOutputStream (); os.write (json.getBytes ("utf-8")); // in Parameter inputStream übergeben ist = http.getInputStream (); int size = is.Available (); byte [] jsonBytes = neues Byte [Größe]; is.read (jsonBytes); String result = new String (jsonBytes, "utf-8"); System.out.println ("Anfrage return Ergebnis:" + Ergebnis); os.flush (); os.close (); } catch (Ausnahme e) {e.printstacktrace (); }} public static void main (String [] args) {stationResource wechat = new stationResource (); // Wechat.SendwechatmsGtext ("@all", "2", "," Information Center Benachrichtigung "," 0 "); Wechat.Sendwechatmsg ("News", "@all", "", ",", "," Test SENMSG ",", "getestet", "wirklich getestet", "http://www.baidu.com", ",", ",", ",", ",", "http://www.baidu.com", "," "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg", "0"); }}Das obige ist die WeChat Enterprise -Kontoüberprüfung/Senden/Empfangen von Nachrichten, die Ihnen vom Editor vorgelegt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!