1. Pemetaan Intranet
Karena URL WeChat Enterprise Account Mode Callback Mode mendukung akses nama domain, diperkirakan Anda perlu mendaftarkan cangkang kacang dan melakukan penetrasi intranet (harganya 16 yuan untuk membeli versi gratis, dan Anda hanya dapat menambahkan nama domain pada hari berikutnya setelah Anda membelinya)
2. Akun WeChat Enterprise
Daftarkan Akun WeChat Enterprise: https://qy.weixin.qq.com/ (pilih tim, tim tidak memerlukan sertifikasi)
Kontak: Buat organisasi baru -> Ikuti anggota
Akun Perusahaan -> Pusat Aplikasi -> Aplikasi Baru -> Aplikasi Pesan -> Pemilihan Mode (Mode Callback) -> Nyalakan WeChat Message Forwarding,
Mode Callback Deskripsi: http://qydev.weixin.qq.com/wiki/index.php?title=%e5%9b%9e%E8%B0%83%E6%A8%A1%E5%BC%8F
Kode Enkripsi dan Dekripsi Mode Callback: 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%9E%E7%A0%81
Seperti yang ditunjukkan pada Gambar 1:
Menu Kustom: Jalur permintaan untuk aplikasi pengembangan ditunjukkan pada Gambar 2:
Pengaturan -> Pengaturan Fungsi -> Manajemen Izin -> Grup Manajemen Baru -> Izin Aplikasi (Rahasia)
3. Gunakan jersey untuk mengembangkan layanan layanan web
3.1 Tentukan token di kelas, kata sandi acak 43 digit, perusahaan corpid, rahasia
3.2 Metode Verifikasi
/ * * ----------------------------- Ketika perusahaan menyalakan mode panggilan balik, nomor perusahaan akan mengirimkan permintaan GET ke URL verifikasi * Misalkan ketika mengklik verifikasi, perusahaan menerima permintaan serupa: dapatkan * /cgi-bin /wxpush? Msg_signature = 5c45ff5ff5F5E21C57E6AC3ACA8B1787878787878 × TAMP * = 1409659589 & NONCE = 263014780 & echostr = p9nazczydtweshep1vc5x9xho% * 2FQYX3ZPB4YKA9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HOMPER PLAYPEATE PARACEUTE * 1.DWEIXIN.QQ.COM * * Ketika menerima permintaan ini, The Enterpe/The Enterprise. (msg_signature), timestamp (timestamp), string angka acak (nonce *) dan string terenkripsi acak (echostr) yang didorong oleh platform publik. Perhatikan decoding URL pada langkah ini. 2. Verifikasi kebenaran tanda tangan bodi pesan 3. * Mendekripsi teks echostr asli, perlakukan teks asli sebagai respons permintaan GET, dan kembalikan ke platform publik. Langkah 2. 3 dapat diimplementasikan menggunakan fungsi pustaka yang disediakan oleh platform publik. *// ** * URL Callback, WeChat memanggil metode ini untuk verifikasi * * @return */ @get @path ("stasiun") string publik verifikasi () {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 sechostr = null; coba {sechoStr = wxcpt.verifyurl (msgSignature, timestamp, nonce, echostr); } catch (Exception e) {E.PrintStackTrace (); // URL Verifikasi Gagal, silakan lihat pengecualian untuk alasan kesalahan} return sechoStr; }3.3 Menerima informasi pengguna dan mendekripsi
/ * * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * <Tousername> <! [Cdata [wx5823bf96d3bd56c7]]> </Tousername *> <Encrypt> <! +rtK1I9qca6aM/wvqnLSV5zEPeusUiX5L5X/0lWfrf0QADHHhGd3QczcdCUpj911L3vg3W/ * sYYvuJTs3TUUkSUXxaccAS0qhxchrRYt66wiSpGLYL42aM6A8dTT * +6k4asknmpj48kzjs8qljvd4xgpue06dodnlxaUhzm6 * +Kdz +hmzfjyur +ltwgc2hgf5gsijff0ekunxziqatp7pf5mzxz3izoun1s4zg0ekunxziqatp7pf5mzxz3izoun1s4zzg4g4r4g4p7pf5mzxzooun1s4zg4g4g4r4g4p7pf5mzxzoun1s4zg4g4g4r4r4g4r +3IQH03V +BCA9NMELNQBSF6TIWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0 * +RUPA3K22NCX4XXZS9O0MBH27BO6BPNZPS * +/UH9KSNLY6BHCMJU9P8G7M3FVKN28H3KDYA5PL */T8Z1PTDAVE0LXDQ2YOYYH2UyPighBZZIS2PDBS8R07+qn+e7q ==]] </encrypt> * <agentid> <! Enterprise menerima permintaan POST, harus * 1. Purse Parameter pada URL, termasuk tanda tangan Badan Pesan (MSG_SIGNATURE), timestamp (cap waktu) dan string nomor acak (nonce) * 2. Verifikasi kebenaran tanda tangan badan pesan. * 3. Posting yang diminta data diuraikan oleh XML dan mendekripsi konten tag <cryrypt>. Teks polos yang didekripsi adalah teks sederhana dari pesan balasan pengguna. Silakan merujuk ke dokumen resmi untuk format teks biasa* Langkah 2 dan 3 dapat diimplementasikan menggunakan fungsi perpustakaan decryptmsg yang disediakan oleh platform publik. */ @Post @path ("station") public string receivememsg (string reqdata) {string msgSignature = request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); // data ciphertext diminta oleh pos // string sreqdata = // "<xml> <Tousername> <! [Cdata [wx5823bf96d3bd56c7]]> </tousername> <Encrypt> <! [Cd ATA [rypevhkd8qqkfhvq6qleeb4j58tipdvo+rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwf RF0QADHHHGD3QCZCDCUPJ911L3VG3W/SYYVUJTS3TUUKSUXXACCAS0QHXCHRRYT66WISPGLYL42A M6A8DTT+6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6+KDZ+HMZFJYUR+LTWGC2HGF5GS ijff0ekunxziqatp7pf5mzxz3izoun1s4zg4lumnvw2r+kqckiw+3iqh03v+bca9nmelnqbsf6t IWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0+RUPA3K22NCX4XXZS9O0MBH27BO6BP Nelzps+/UH9KSNLY6BHCMJU9P8G7M3FVKKN28H3KDYA5PL/T8Z1PTDAVE0LXDQ2YOYYH2UYPIGHBZZIS2PDBS8R07+QN+E7Q ==]] </ENCRYPT> </quTIDAD <! coba {string smsg = wxcpt.decryptmsg (msgSignature, timestamp, nonce, reqdata); // Parsen konten tag XML plaintext untuk memproses DocumentBuilderFactory dbf = DocumentBuilderFactory.NewInstance (); DocumentBuilder db = dbf.newDocumentBuilder (); StringReader sr = New StringReader (SMSG); InputSource adalah = inputsource baru (SR); Dokumen dokumen = db.parse (IS); Elemen root = document.getDocumentElement (); Nodelist nodeList1 = root.getElementsbyTagname ("content"); if (nodelist1.item (0) == null) return "ok"; String content = nodeList1.item (0) .gettextContent (); System.out.println ("Konten:" + konten); } catch (Exception e) {e.printstacktrace (); // Dekripsi gagal, silakan periksa pengecualian untuk kegagalan} return "ok"; }3.4 Kirim Informasi ke WeChat
Pengaturan -> Pengaturan Fungsi -> Manajemen Izin -> Buat grup manajemen baru; Dapatkan rahasia
/** * Metode ini dapat mengirim pesan dari jenis apa pun * * @param msgtype * Teks | Gambar | Voice | Video | File | Berita * @param Touser * Daftar ID Anggota (Penerima Pesan, banyak penerima dipisahkan oleh '|', dan hingga 1.000 didukung). Kasus Khusus: Ditentukan sebagai @all, * akan mengirim * @param topy * Daftar ID departemen ke semua anggota yang mengikuti aplikasi perusahaan. Beberapa penerima dipisahkan oleh '|', dan hingga 100 didukung. Abaikan parameter ini ketika Touser adalah @all * @param totag * Daftar ID tag, banyak penerima dipisahkan oleh '|'. Ignore this parameter when touser is @all* @param content * When msgType=text, text message content* @param mediaId * When msgType=image|voice|video, corresponding message information ID (-------) * @param title * When msgType=news|video, message title* @param description * When msgType=news|video, message description* @param url * When msgType=news, message link* @param picurl * Ketika msgType = berita, jalur gambar * @param aman * menunjukkan apakah itu pesan rahasia, 0 menunjukkan tidak, 1 menunjukkan ya, default 0 */ public void sendWeChatMSG (string msgType, string touser, string topy, string totag, string konten, string mediaid, string title, string description, string url, string picurl, string picurl, string safe) {string MediaD, string description, string url, String picurl, string picurl, string safe String access_token = getAccessToken (); // string permintaan string string action = create_session_url + access_token; // Encapsulate Kirim Permintaan Pesan 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 ("image")) {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 ("/" Deskripsi/":" + "/" " + Deskripsi +"/""); SB.Append ("}"); } else if (msgtype.equals ("file")) {sb.append ("/" msgtype/":" + "/" " + msgtype +"/","); sb.append ("/" file/":" + "{"); 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 ("/" Deskripsi/":" + "/" " + Deskripsi +"/","); SB.Append ("/" url/":" + "/" " + url +"/","); SB.Append ("/" picurl/":" + "/" " + picurl +"/""); SB.Append ("}"); SB.Append ("]"); SB.Append ("}"); } sb.append (",/" safe/":" + "/" " + safe +"/","); SB.Append ("/" AgentId/":" + "/" " + 1 +"/","); SB.Append ("/" Debug/":" + "/" " +" 1 " +"/""); SB.Append ("}"); String json = sb.toString (); coba {url = url baru (tindakan); HttpsurlConnection http = (httpsurlConnection) url.openconnection (); http.setRequestMethod ("post"); http.setRequestProperty ("tipe konten", "aplikasi/json; charset = utf-8"); http.setDoOutput (true); http.setDoInput (true); System.setProperty ("sun.net.client.defaultconnecttimeout", "30000"); // // Connection Timeout 30 Seconds System.setProperty ("Sun.net.Client.Defaultreadtimeout", "30000"); // // Baca timeout 30 detik http.connect (); OutputStream os = http.getoutputStream (); os.write (json.getbytes ("UTF-8")); // Lulus dalam parameter inputStream adalah = http.getInputStream (); ukuran int = is.vailable (); byte [] jsonbytes = byte baru [ukuran]; is.read (jsonbytes); String result = string baru (jsonbytes, "UTF-8"); System.out.println ("Permintaan Hasil Pengembalian:" + Hasil); os.flush (); os.close (); } catch (Exception e) {E.PrintStackTrace (); }} // Dapatkan kode akses antarmuka string publik getAccessToken () {httpclient client = httpclient baru (); Postmethod post = postmethod baru (access_token_url); post.releaseconnection (); POST.SetRequestHeader ("tipe konten", "Aplikasi/X-WWW-Form-Urlencoded; charset = UTF-8"); NamevaluePair [] param = {new namevaluePair ("corpid", corpid), new namevaluePair ("corpsecret", rahasia)}; // Tetapkan kebijakan untuk mencegah kesalahan cookie dilaporkan dilaporkan defaulthttpparams.getDefaultParams (). SetParameter ("http.protocol.cookie-policy", cookiePolicy.browser_compatibility); // atur parameter untuk posting posting posting posting posting.setRequestBody (param); Hasil string = ""; coba {client.executeMethod (post); result = string baru (post.getResponseBodyAsstring (). getBytes ("gbk")); } catch (ioException e) {e.printstacktrace (); } // Konversi data ke JSON JSONObject JasonObject; jasonobject = jsonobject.fromObject (hasil); hasil = (string) jasonobject.get ("access_token"); post.releaseconnection (); System.out.println (hasil); hasil pengembalian; } public static void main (string [] args) {stationResource weChat = stationResource baru (); // wechat.sendweChatMSgText ("@all", "2", "", "Information Center Notification", "0"); wechat.sendwechatmsg ("berita", "@all", "", "", "test senmsg", "", "diuji", "benar -benar diuji", "http://www.baidu.com", "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg", "0"); }4. Pengembangan selesai. Kelas ini perlu ditambahkan untuk beristirahat di webx.xml untuk dikelola
<!-Dukungan RESTful-> <!-Layanan WebSerivce. Jika suatu layanan ditambahkan, jalur paket layanan perlu ditambahkan ke param-value-> <servlet> <servlet-name> jax-rs rest servlet </servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.servletcontainer </servlet-class> <init-param> <param-name> com.sun.jersey.config.property.packages </param-name> <param-value> com.base.pf.restful </param-value> </it-param> <Boad-on-startup> 2 </load-on-startup> </servlet> <servlet> <boad-n-n-nox> </load-on-startup> </servlet> <servlet-n-n-n-nox> </load-on-startup> </servlet> <servlet-n-n-n-nox> <rerl-pola>/rest/*</uRl-pola> </servlet-Mapping>
5. Kode Lengkap Selesai
paket com.base.pf.restful; impor java.io.ioException; impor java.io.inputstream; impor java.io.outputStream; impor java.io.stringreader; impor java.net.url; impor javax.net.ssl.httpsurlconnection; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor javax.ws.rs.get; impor javax.ws.rs.post; impor javax.ws.rs.path; impor javax.ws.rs.core.context; impor javax.xml.parsers.documentBuilder; impor javax.xml.parsers.documentbuilderfactory; impor net.sf.json.jsonobject; impor org.apache.commons.httpclient.httpClient; impor org.apache.commons.httpclient.namevaluepair; impor org.apache.commons.httpclient.cookiepolicy; impor org.apache.commons.httpclient.methods.postmethod; impor org.apache.commons.httpclient.params.defaulthttpparams; impor org.w3c.dom.document; impor org.w3c.dom.element; impor org.w3c.dom.nodelist; impor org.xml.sax.inputSource; impor com.qq.weixin.mp.aes.aesexception; impor com.qq.weixin.mp.aes.wxbizmsgcrypt; /** * pengembangan akun perusahaan weChat * * @author zhen.l * */@path ("wx") kelas publik stationResource {// http://hichinamobile.xicp.net/security/rest/wx // https://qy.weixin.qq. // perusahaan nomor-> Pusat Aplikasi-> Aplikasi Baru-> Aplikasi Jenis Pesan Private String AgentID = "1"; // Nomor Enterprise-> Pusat Aplikasi-> Klik Aplikasi-> ID Aplikasi Private String encodingaesKey = "NT6ZWTVFLYNXOHFOGGOZWDJPAGEFSV8LN5CNEYW7MWL"; // Nomor Enterprise-> Pusat Aplikasi-> Aplikasi Baru-> Aplikasi Jenis Pesan Private String corpid = "WXE49318EB604CF00B"; // Nomor Enterprise-> Pengaturan-> Informasi Nomor Perusahaan-> Informasi Akun Private String Secret = "M-YfKMGL_KXBVETGINZH3RQWBZ4XB6MFEQXXXLK77MKPXZYFDYQ-UGERXDUF8REL"; // Nomor Enterprise-> Pengaturan-> Pengaturan Fungsional-> Manajemen Izin @Context HTTPServletRequest Permintaan; @Context httpservletResponse respons; Wxbizmsgcrypt wxcpt = null; public stationResource () {coba {wxcpt = new wxbizmsgcrypt (token, encodingaeskey, corpid); } catch (aesException e) {e.printstacktrace (); }} // Dapatkan kode akses URL privat string statis final access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"; // Buat URL Permintaan Sesi Private Final Static String create_session_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; // Dapatkan kode akses antarmuka string publik getAccessToken () {httpclient client = new httpclient (); Postmethod post = postmethod baru (access_token_url); post.releaseconnection (); POST.SetRequestHeader ("tipe konten", "Aplikasi/X-WWW-Form-Urlencoded; charset = UTF-8"); NamevaluePair [] param = {new namevaluePair ("corpid", corpid), new namevaluePair ("corpsecret", rahasia)}; // Tetapkan kebijakan untuk mencegah kesalahan cookie dilaporkan dilaporkan defaulthttpparams.getDefaultParams (). SetParameter ("http.protocol.cookie-policy", cookiePolicy.browser_compatibility); // atur parameter untuk posting posting posting post.setRequestBody (param); Hasil string = ""; coba {client.executeMethod (post); result = string baru (post.getResponseBodyAsstring (). getBytes ("gbk")); } catch (ioException e) {e.printstacktrace (); } // Konversi data ke JSON JSONObject JasonObject; jasonobject = jsonobject.fromObject (hasil); hasil = (string) jasonobject.get ("access_token"); post.releaseconnection (); System.out.println (hasil); hasil pengembalian; } / * * --------------------------------- Saat perusahaan menyalakan mode panggilan balik, nomor perusahaan akan mengirim permintaan GET ke URL verifikasi * Misalkan ketika mengklik verifikasi, perusahaan menerima permintaan yang sama: dapatkan * /CGI-BIN /WXPUSH? MSG_SIGNATURE = 5C45FF5E21C57E6AD56BAC8758B79B1D9AC89FD3 * × TAMP * = 1409659589 & NONCE = 263014780 & echostr = p9nazczy = ptin. 2FQYX3ZPB4YKA9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HOMPER PLAYPEATE PARACEUTE * 1.DWEIXIN.QQ.COM * * Ketika menerima permintaan ini, The Enterpe/The Enterprise. (msg_signature), timestamp (timestamp), dan string angka acak (nonce *) dan string terenkripsi acak (echostr) didorong oleh platform publik. Perhatikan decoding URL pada langkah ini. 2. Verifikasi kebenaran tanda tangan bodi pesan 3. * Mendekripsi teks echostr asli, perlakukan teks asli sebagai respons permintaan GET, dan kembalikan ke platform publik. Langkah 2. 3 dapat diimplementasikan menggunakan fungsi pustaka yang disediakan oleh platform publik. *// ** * URL Callback, WeChat memanggil metode ini untuk verifikasi * * @return */ @get @path ("stasiun") string publik verifikasi () {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 sechostr = null; coba {sechoStr = wxcpt.verifyurl (msgSignature, timestamp, nonce, echostr); } catch (Exception e) {E.PrintStackTrace (); // Verifikasi URL gagal, silakan periksa pengecualian untuk alasan kesalahan} return sechoStr; } / * * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- msg_signature = 477715d11cdb4164915debcba66cb864d751f3e6 * × tamp = 1409659813 & nonce = 1372623149 http/1.1 host: qy.weixin.qq.qq.cqq.com * <Tousername> <! [Cdata [wx5823bf96d3bd56c7]]> </ Tousername *> <Encrypt> <! +rtK1I9qca6aM/wvqnLSV5zEPeusUiX5L5X/0lWfrf0QADHHhGd3QczcdCUpj911L3vg3W/ * sYYvuJTs3TUUkSUXxaccAS0qhxchrRYt66wiSpGLYL42aM6A8dTT * +6k4asknmpj48kzjs8qljvd4xgpue06dodnlxaUhzm6 * +Kdz +hmzfjyur +ltwgc2hgf5gsijff0ekunxziqatp7pf5mzxz3izoun1s4zg0ekunxziqatp7pf5mzxz3izoun1s4zzg4g4r4g4p7pf5mzxzooun1s4zg4g4g4r4g4p7pf5mzxzoun1s4zg4g4g4r4r4g4r +3IQH03V +BCA9NMELNQBSF6TIWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0 * +RUPA3K22NCX4XXZS9O0MBH27BO6BPNZPS * +/UH9KSNLY6BHCMJU9P8G7M3FVKN28H3KDYA5PL */T8Z1PTDAVE0LXDQ2YOYYH2UyPighBZZIS2PDBS8R07+qn+e7q ==]] </encrypt> * <agentid> <! Enterprise menerima permintaan POST, harus * 1. Purse Parameter pada URL, termasuk tanda tangan Badan Pesan (MSG_SIGNATURE), timestamp (cap waktu) dan string nomor acak (nonce) * 2. Verifikasi kebenaran tanda tangan badan pesan. * 3. Posting yang diminta data diuraikan oleh XML dan mendekripsi konten tag <cryrypt>. Teks polos yang didekripsi adalah teks sederhana dari pesan balasan pengguna. Silakan merujuk ke dokumen resmi untuk format teks biasa* Langkah 2 dan 3 dapat diimplementasikan menggunakan fungsi perpustakaan decryptmsg yang disediakan oleh platform publik. */ @Post @path ("station") public string receivememsg (string reqdata) {string msgSignature = request.getParameter ("msg_signature"); String timestamp = request.getParameter ("timestamp"); String nonce = request.getParameter ("nonce"); // data ciphertext diminta oleh pos // string sreqdata = // "<xml> <Tousername> <! [Cdata [wx5823bf96d3bd56c7]]> </tousername> <Encrypt> <! [Cd ATA [rypevhkd8qqkfhvq6qleeb4j58tipdvo+rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwf RF0QADHHHGD3QCZCDCUPJ911L3VG3W/SYYVUJTS3TUUKSUXXACCAS0QHXCHRRYT66WISPGLYL42A M6A8DTT+6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6+KDZ+HMZFJYUR+LTWGC2HGF5GS ijff0ekunxziqatp7pf5mzxz3izoun1s4zg4lumnvw2r+kqckiw+3iqh03v+bca9nmelnqbsf6t IWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0+RUPA3K22NCX4XXZS9O0MBH27BO6BP Nelzps+/UH9KSNLY6BHCMJU9P8G7M3FVKKN28H3KDYA5PL/T8Z1PTDAVE0LXDQ2YOYYH2UYPIGHBZZIS2PDBS8R07+QN+E7Q ==]] </ENCRYPT> </quTIDAD <! coba {string smsg = wxcpt.decryptmsg (msgSignature, timestamp, nonce, reqdata); // Parsen konten tag XML plaintext untuk memproses DocumentBuilderFactory dbf = DocumentBuilderFactory.NewInstance (); DocumentBuilder db = dbf.newDocumentBuilder (); StringReader sr = New StringReader (SMSG); InputSource adalah = inputsource baru (SR); Dokumen dokumen = db.parse (IS); Elemen root = document.getDocumentElement (); Nodelist nodeList1 = root.getElementsbyTagname ("content"); if (nodelist1.item (0) == null) return "ok"; String content = nodeList1.item (0) .gettextContent (); System.out.println ("Konten:" + konten); } catch (Exception e) {e.printstacktrace (); // Dekripsi gagal, silakan periksa pengecualian untuk kegagalan} return "ok"; } / * * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Misalkan perusahaan perlu membalas teks polos pengguna sebagai berikut: <xml> * <Tousername> <! [Cdata [myCreate]]> </Tousername> * <Fromusername> <! <msgtype> <! [Cdata [Teks]]> </sgtype> * <den konten> <! [Cdata [ini adalah tes]]> </dente> * <msgid> 1234567890123456 </msgid> <agentid> 128 </agentid> </xml> * * * msgid> dan string nomor acak (nonce) untuk menghasilkan tanda tangan badan pesan, atau secara langsung menggunakan nilai yang sesuai yang diuraikan dari pos * URL platform publik. 2. Enkripsi teks biasa untuk mendapatkan teks sandi. * 3. Gunakan teks cipher, cap waktu, nonce yang dihasilkan pada langkah 1 dan token yang ditetapkan oleh perusahaan pada platform publik untuk menghasilkan tanda tangan tubuh pesan. * 4. Sambungkan ciphertext, tanda tangan bodi pesan, cap waktu, dan string nomor acak ke dalam string dalam format XML dan kirim ke perusahaan. * Langkah 2, 3, dan 4 di atas dapat diimplementasikan menggunakan Fungsi Perpustakaan EncryptMSG yang disediakan oleh platform publik. */ // @get // @path ("kirim") public void sendMSG (string timestamp, string nonce) {string srespdata = "<xml> <Tousername> <! [Cdata [myCreate]]> </ Tousername> <Fromusername> <! [CDATA [WXE49318EB604CF00B]]> </from Username> <createTime> 1348831860 </createTime> <msgtype> <! [Cdata [Teks]]> </sgtype> <den konten> <! [Cdata [ini adalah tes]]> </content> <msgid> 1234567890123456 </msgid> <AgentId> 1 </agentid> </xml> "; coba {string sencryptMSg = wxcpt.encryptmsg (srespdata, timestamp, nonce); System.out.println ("After Encrypt sencrytmsg:" + sencryptmsg); response.getWriter (). print (sencryptmsg); } catch (exception e) {e.printstacktrace (); // enkripsi gagal} // return srespdata; } /** * Metode ini dapat mengirim semua jenis pesan * * @param msgtype * Teks | Gambar | Suara | Video | File | Berita * @param Touser * Daftar ID Anggota (Penerima Pesan, banyak penerima dipisahkan oleh '|', dan hingga 1.000 didukung). Kasus Khusus: Ditentukan sebagai @all, * akan mengirim * @param topy * Daftar ID departemen ke semua anggota yang mengikuti aplikasi perusahaan. Beberapa penerima dipisahkan oleh '|', dan hingga 100 didukung. Abaikan parameter ini ketika Touser adalah @all * @param totag * Daftar ID tag, banyak penerima dipisahkan oleh '|'. Ignore this parameter when touser is @all* @param content * When msgType=text, text message content* @param mediaId * When msgType=image|voice|video, corresponding message information ID (-------) * @param title * When msgType=news|video, message title* @param description * When msgType=news|video, message description* @param url * When msgType=news, message link* @param picurl * Ketika msgType = berita, jalur gambar * @param aman * menunjukkan apakah itu pesan rahasia, 0 menunjukkan tidak, 1 menunjukkan ya, default 0 */ public void sendWeChatMSG (string msgType, string touser, string topy, string totag, string konten, string mediaid, string title, string description, string url, string picurl, string picurl, string safe) {string MediaD, string description, string url, String picurl, string picurl, string safe String access_token = getAccessToken (); // string permintaan string string action = create_session_url + access_token; // Encapsulate Kirim Permintaan Pesan 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 ("image")) {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 ("/" Deskripsi/":" + "/" " + Deskripsi +"/""); SB.Append ("}"); } else if (msgtype.equals ("file")) {sb.append ("/" msgtype/":" + "/" " + msgtype +"/","); sb.append ("/" file/":" + "{"); 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 ("/" Deskripsi/":" + "/" " + Deskripsi +"/","); SB.Append ("/" url/":" + "/" " + url +"/","); SB.Append ("/" picurl/":" + "/" " + picurl +"/""); SB.Append ("}"); SB.Append ("]"); SB.Append ("}"); } sb.append (",/" safe/":" + "/" " + safe +"/","); SB.Append ("/" AgentId/":" + "/" " + AgentId +"/","); SB.Append ("/" Debug/":" + "/" " +" 1 " +"/""); SB.Append ("}"); String json = sb.toString (); coba {url = url baru (tindakan); HttpsurlConnection http = (httpsurlConnection) url.openconnection (); http.setRequestMethod ("post"); http.setRequestProperty ("tipe konten", "aplikasi/json; charset = utf-8"); http.setDoOutput (true); http.setDoInput (true); System.setProperty ("sun.net.client.defaultConnecttimeout", "30000"); // // Connection Timeout 30 Seconds System.setProperty ("Sun.net.Client.Defaultreadtimeout", "30000"); // // Baca timeout 30 detik http.connect (); OutputStream os = http.getoutputStream (); os.write (json.getbytes ("UTF-8")); // Lulus dalam parameter inputStream adalah = http.getInputStream (); ukuran int = is.vailable (); byte [] jsonbytes = byte baru [ukuran]; is.read (jsonbytes); String result = string baru (jsonbytes, "UTF-8"); System.out.println ("Permintaan Hasil Pengembalian:" + Hasil); os.flush (); os.close (); } catch (Exception e) {E.PrintStackTrace (); }} public static void main (string [] args) {stationResource weChat = stationResource baru (); // wechat.sendweChatMSgText ("@all", "2", "", "Information Center Notification", "0"); wechat.sendwechatmsg ("berita", "@all", "", "", "", "test senmsg", "", "diuji", "benar -benar diuji", "http://www.baidu.com", "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg", "0"); }}Di atas adalah pesan WeChat Enterprise Account Verifikasi/Kirim/Terima yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!