In diesem Artikel werfen wir einen Blick auf die von WeChat entwickelte Messaging-Schnittstelle.
Ich bin der Meinung, dass es bei der WeChat-Entwicklung darum geht, die WeChat-Schnittstelle aufzurufen, daher werde ich sie lesen und versuchen, sie anzurufen Wenn ich keine Arbeit an der WeChat-Schnittstelle habe, muss ich zum Aufrufen der WeChat-Schnittstelle HTTP-Get- und Post-Anfragen senden. Daher ist es am besten, zuerst eine httputil-Klasse zu schreiben, um Get- und Post-Anfragen speziell zu senden Bei der Java-Netzwerkprogrammierung verwende ich also einen Baidu-Code und kapsele ihn dann selbst. Der Code lautet wie folgt:
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import java.util.Map; import javax.activation.MimetypesFileTypeMap; /** * * @author luolei * */ public class HttpUtil { public static String httpGet(String httpUrl){ StringBuffer buffer = null; try{ URL url = new URL(httpUrl); HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); httpUrlConn.setDoInput(true); httpUrlConn.setRequestMethod("GET"); // 獲取輸入流 InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 讀取返回結(jié)果 buffer = new StringBuffer(); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 釋放資源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); httpUrlConn.disconnect(); }catch(Exception e){ e.printStackTrace(); } return buffer.toString(); } /** * * 發(fā) post 請求, */ public static String httpPost(String httpUrl,String data){ PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(httpUrl); // 打開和URL之間的連接 URLConnection conn = realUrl.openConnection(); // 設(shè)置通用的請求屬性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 發(fā)送POST請求必須設(shè)置如下兩行 conn.setDoOutput(true); conn.setDoInput(true); // 獲取URLConnection對象對應(yīng)的輸出流 out = new PrintWriter(conn.getOutputStream()); // 發(fā)送請求參數(shù) out.print(data); // flush輸出流的緩沖 out.flush(); // 定義BufferedReader輸入流來讀取URL的響應(yīng) in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("發(fā)送 POST 請求出現(xiàn)異常!"+e); e.printStackTrace(); } //使用finally塊來關(guān)閉輸出流、輸入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } /** * 上傳圖片 * * @param urlStr * @param textMap * @param fileMap * @return */ public static String formUpload(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) { String res = ""; HttpURLConnection conn = null; String BOUNDARY = "---------------------------123821742118716"; //boundary就是request頭和上傳文件內(nèi)容的分隔符 try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); // System.out.println(conn); conn.setConnectTimeout(5000); conn.setReadTimeout(30000); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn .setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); OutputStream out = new DataOutputStream(conn.getOutputStream()); // text if (textMap != null) { StringBuffer strBuf = new StringBuffer(); Iterator iter = textMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n"); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } // file if (fileMap != null) { Iterator iter = fileMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String inputName = (String) entry.getKey(); String inputValue = (String) entry.getValue(); if (inputValue == null) { continue; } File file = new File(inputValue); String filename = file.getName(); String contentType = new MimetypesFileTypeMap() .getContentType(file); if (filename.endsWith(".png")) { contentType = "image/png"; } if (contentType == null || contentType.equals("")) { contentType = "application/octet-stream"; } StringBuffer strBuf = new StringBuffer(); strBuf.append("\r\n").append("--").append(BOUNDARY).append( "\r\n"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n"); strBuf.append("Content-Type:" + contentType + "\r\n\r\n"); out.write(strBuf.toString().getBytes()); DataInputStream in = new DataInputStream( new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); } } byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(); out.write(endData); out.flush(); out.close(); // 讀取返回?cái)?shù)據(jù) StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { strBuf.append(line).append("\n"); } res = strBuf.toString(); reader.close(); reader = null; } catch (Exception e) { System.out.println("發(fā)送POST請求出錯。" + urlStr); e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); conn = null; } } return res; } }
wobei httpGet und httpPost verwendet werden Bei der WeChat-Entwicklung erfolgt die Nachrichtenschnittstelle im Allgemeinen im XML-Format. Daher ist ein Paket zum Parsen von JSON erforderlich Verwenden Sie gson
Beginnen wir nun mit dem Testen der Nachrichtenschnittstelle. Zuerst müssen Sie den Anforderungsprozess verstehen:
Der WeChat-Server sendet eine Get-Anfrage basierend auf den ausgefüllten Daten In der URL zur überprüfung wird weiterhin eine Postanforderung basierend auf der URL gesendet.
Nachrichtentypentwicklung Es sind haupts?chlich Text-, Bild-, Sprach- und andere Nachrichten vorhanden das Dokument sowie einige Ereignisse wie Aufmerksamkeit, Klicks und Sprünge.
Diese Nachrichten und Ereignisse liegen im XML-Format vor, daher muss ich zum Parsen dom4j verwenden.
Die doPost-Methode des verbundenen Servlets wurde zuvor überprüft Um die Nachricht zu analysieren,
Ich habe die in Liu Fengs Blog beschriebene Methode befolgt und ein MessageUtil geschrieben, das die Methode zum Parsen von XML kapselt und das analysierte Ergebnis in map
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception { // 將解析結(jié)果存儲在HashMap中 Map<String, String> map = new HashMap<String, String>(); // 從request中取得輸入流 InputStream inputStream = request.getInputStream(); // 讀取輸入流 SAXReader reader = new SAXReader(); Document document = reader.read(inputStream); // 得到xml根元素 Element root = document.getRootElement(); // 得到根元素的所有子節(jié)點(diǎn) List<Element> elementList = root.elements(); // 遍歷所有子節(jié)點(diǎn) for (Element e : elementList) map.put(e.getName(), e.getText()); // 釋放資源 inputStream.close(); inputStream = null; return map; }
Dann wird das analysierte XML entsprechend dem Tag-Namen in der Karte gespeichert - dem Inhalt
und dann dem Daraus kann der Nachrichtentyp msgType entnommen werden
String msgType = requestMap.get("MsgType");
Bestimmen Sie dann die Art der Nachricht, verschiedene Nachrichtentypen werden von verschiedenen Servlets verarbeitet,
// 文本消息 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { request.getRequestDispatcher("TextMessage").forward(request, response); } // 圖片消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) { request.getRequestDispatcher("ImageServlet").forward(request, response); } // 地理位置消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { request.getRequestDispatcher("LocationServlet").forward(request, response); } // 鏈接消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { request.getRequestDispatcher("LinkServlet").forward(request, response); } // 音頻消息 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) { request.getRequestDispatcher("VedioServlet").forward(request, response); } // 事件推送 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) { // 事件類型 String eventType = requestMap.get("Event"); // 訂閱 if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { request.getRequestDispatcher("SubServlet").forward(request, response); } // 取消訂閱 else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) { // TODO 取消訂閱后用戶再收不到公眾號發(fā)送的消息,因此不需要回復(fù)消息 } // 自定義菜單點(diǎn)擊事件 else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) { // TODO 自定義菜單權(quán)沒有開放,暫不處理該類消息 request.getRequestDispatcher("ClickServlet").forward(request, response); } }
Verschiedene Servlets verarbeiten unterschiedliche Nachrichten und k?nnen je nach Bedarf unterschiedliche Nachrichten zurückgeben Auch im XML-Format. Der Nachrichtentyp ?hnelt im Wesentlichen dem empfangenen Nachrichtentyp. Jedes XML-Tag entspricht dem Feldnamen und der Inhalt ist der Inhalt des Felds
:
public class BaseMessageResp { // 接收方帳號(收到的OpenID) private String ToUserName; // 開發(fā)者微信號 private String FromUserName; // 消息創(chuàng)建時間 (整型) private long CreateTime; // 消息類型(text/music/news) private String MsgType; // 位0x0001被標(biāo)志時,星標(biāo)剛收到的消息 private int FuncFlag;
Die Set- und Get-Methoden werden weggelassen
public class TextMessage extends BaseMessageResp { // 回復(fù)的消息內(nèi)容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } }
Da verschiedene Nachrichten dieselben Felder haben, habe ich eine gemeinsame Basisklasse geschrieben.
Jetzt sind wir einen Schritt davon entfernt, die Nachricht an den Benutzer zurückzugeben. Die Technologie wandelt diese Pojo-Klassen in XML-Strings um
mit xstream
/** * 文本消息對象轉(zhuǎn)換成xml * * @param textMessage 文本消息對象 * @return xml */ public static String textMessageToXml(TextMessage textMessage) { xstream.alias("xml", textMessage.getClass()); return xstream.toXML(textMessage); }
Dies ist nur eine einfache Beschreibung, Sie k?nnen den Link von Liu Feng lesen.
Schlie?lich gehen Sie einfach zurück Erhaltene Zeichenfolge an den WeChat-Server.
Sie k?nnen ein einfaches Abonnementkonto erstellen, indem Sie nur diese Nachrichtenschnittstellen verwenden. Es sollte so sein, dass das ?ffentliche Konto eines allgemeinen Unternehmens über eine Ansichtsschaltfl?che auf seine eigene Website zu springen scheint.
Jetzt k?nnen Sie die obige Schnittstelle verwenden, um verschiedene von Benutzern gesendete Nachrichten zu akzeptieren und die Nachrichten dann im Voraus zu verarbeiten oder einige APIs wie Wetter, Witze, Artikel usw. aufzurufen, um die Ergebnisse zu erhalten. Nach der Analyse k?nnen Sie dem Benutzer das gewünschte Format zurückgeben und ein Abonnementkonto wie einen Lebensassistenten üben. Das von Ihnen beantragte Abonnementkonto verfügt jedoch über eingeschr?nkte Berechtigungen, und ich wei? nicht, ob ich das kann Es.
Das obige ist der detaillierte Inhalt vonVon WeChat entwickelte Nachrichtenschnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP ist eine Open-Source-Skriptsprache, die in der Webentwicklung und serverseitigen Programmierung, insbesondere in der WeChat-Entwicklung, weit verbreitet ist. Heutzutage beginnen immer mehr Unternehmen und Entwickler, PHP für die WeChat-Entwicklung zu verwenden, da es sich zu einer wirklich leicht zu erlernenden und benutzerfreundlichen Entwicklungssprache entwickelt hat. Bei der WeChat-Entwicklung sind die Nachrichtenverschlüsselung und -entschlüsselung ein sehr wichtiges Thema, da sie die Datensicherheit betreffen. Bei Nachrichten ohne Verschlüsselungs- und Entschlüsselungsmethoden k?nnen Hacker leicht an die Daten gelangen, was eine Bedrohung für Benutzer darstellt.

Bei der Entwicklung ?ffentlicher WeChat-Konten wird h?ufig die Abstimmungsfunktion verwendet. Die Voting-Funktion ist eine tolle M?glichkeit für Nutzer, sich schnell an Interaktionen zu beteiligen und ist darüber hinaus ein wichtiges Tool für die Durchführung von Veranstaltungen und Meinungsumfragen. In diesem Artikel erfahren Sie, wie Sie PHP zur Implementierung der WeChat-Abstimmungsfunktion verwenden. Holen Sie sich die Autorisierung des offiziellen WeChat-Kontos. Zuerst müssen Sie die Autorisierung des offiziellen WeChat-Kontos einholen. Auf der ?ffentlichen WeChat-Plattform müssen Sie die API-Adresse des ?ffentlichen WeChat-Kontos, des offiziellen Kontos und des dem ?ffentlichen Konto entsprechenden Tokens konfigurieren. Bei unserer Entwicklung mit der PHP-Sprache müssen wir den von WeChat offiziell bereitgestellten PH verwenden

Mit der Popularit?t von WeChat beginnen immer mehr Unternehmen, es als Marketinginstrument zu nutzen. Die WeChat-Gruppen-Messaging-Funktion ist für Unternehmen eines der wichtigen Mittel zur Durchführung von WeChat-Marketing. Wenn Sie sich jedoch nur auf den manuellen Versand verlassen, ist dies für Vermarkter eine ?u?erst zeitaufw?ndige und mühsame Aufgabe. Daher ist es besonders wichtig, ein WeChat-Massen-Messaging-Tool zu entwickeln. In diesem Artikel wird erl?utert, wie Sie mit PHP WeChat-Massen-Messaging-Tools entwickeln. 1. Vorbereitungsarbeiten Um WeChat-Massen-Messaging-Tools zu entwickeln, müssen wir die folgenden technischen Punkte beherrschen: Grundkenntnisse der PHP-Entwicklung der ?ffentlichen WeChat-Plattform Entwicklungstools: Sub

WeChat ist derzeit eine der sozialen Plattformen mit der gr??ten Nutzerbasis weltweit. Mit der Popularit?t des mobilen Internets beginnen immer mehr Unternehmen die Bedeutung des WeChat-Marketings zu erkennen. Bei der Durchführung von WeChat-Marketing ist der Kundenservice ein entscheidender Bestandteil. Um das Kundenservice-Chatfenster besser verwalten zu k?nnen, k?nnen wir die PHP-Sprache für die WeChat-Entwicklung verwenden. 1. Einführung in die PHP-WeChat-Entwicklung PHP ist eine serverseitige Open-Source-Skriptsprache, die im Bereich der Webentwicklung weit verbreitet ist. In Kombination mit der Entwicklungsschnittstelle der ?ffentlichen WeChat-Plattform k?nnen wir die PHP-Sprache zur Durchführung von WeChat verwenden

Bei der Entwicklung ?ffentlicher WeChat-Konten ist die Benutzer-Tag-Verwaltung eine sehr wichtige Funktion, die es Entwicklern erm?glicht, ihre Benutzer besser zu verstehen und zu verwalten. In diesem Artikel wird erl?utert, wie Sie mit PHP die WeChat-Benutzer-Tag-Verwaltungsfunktion implementieren. 1. Erhalten Sie die OpenID des WeChat-Benutzers. Bevor wir die WeChat-Benutzer-Tag-Verwaltungsfunktion verwenden, müssen wir zun?chst die OpenID des Benutzers abrufen. Bei der Entwicklung ?ffentlicher WeChat-Konten ist es üblich, die OpenID durch Benutzerautorisierung zu erhalten. Nachdem die Benutzerautorisierung abgeschlossen ist, k?nnen wir den Benutzer über den folgenden Code abrufen

Da WeChat zu einem immer wichtigeren Kommunikationsmittel im Leben der Menschen wird, wird seine agile Messaging-Funktion schnell von einer gro?en Anzahl von Unternehmen und Einzelpersonen bevorzugt. Für Unternehmen ist die Entwicklung von WeChat zu einer Marketingplattform zu einem Trend geworden, und die Bedeutung der WeChat-Entwicklung ist nach und nach immer wichtiger geworden. Unter diesen wird die Gruppensendefunktion noch h?ufiger verwendet. Wie implementiert man als PHP-Programmierer Datens?tze zum Senden von Gruppennachrichten? Im Folgenden erhalten Sie eine kurze Einführung. 1. Verstehen Sie die Entwicklungskenntnisse im Zusammenhang mit ?ffentlichen WeChat-Konten, bevor Sie verstehen, wie Datens?tze zum Senden von Gruppennachrichten implementiert werden

So verwenden Sie PHP zur Entwicklung ?ffentlicher WeChat-Konten. ?ffentliche WeChat-Konten sind für viele Unternehmen zu einem wichtigen Kanal für Werbung und Interaktion geworden. PHP als h?ufig verwendete Websprache kann auch zur Entwicklung ?ffentlicher WeChat-Konten verwendet werden. In diesem Artikel werden die spezifischen Schritte zur Verwendung von PHP zum Entwickeln ?ffentlicher WeChat-Konten vorgestellt. Schritt 1: Erhalten Sie das Entwicklerkonto des offiziellen WeChat-Kontos. Bevor Sie mit der Entwicklung des offiziellen WeChat-Kontos beginnen, müssen Sie ein Entwicklerkonto des offiziellen WeChat-Kontos beantragen. Informationen zum spezifischen Registrierungsprozess finden Sie auf der offiziellen Website der ?ffentlichen WeChat-Plattform

Mit der Entwicklung des Internets und mobiler Smart-Ger?te ist WeChat zu einem unverzichtbaren Bestandteil im sozialen Bereich und im Marketing geworden. In diesem zunehmend digitalen Zeitalter ist die Verwendung von PHP für die WeChat-Entwicklung zum Fokus vieler Entwickler geworden. In diesem Artikel werden haupts?chlich die relevanten Wissenspunkte zur Verwendung von PHP für die WeChat-Entwicklung sowie einige Tipps und Vorsichtsma?nahmen vorgestellt. 1. Vorbereitung der Entwicklungsumgebung Bevor Sie WeChat entwickeln, müssen Sie zun?chst die entsprechende Entwicklungsumgebung vorbereiten. Insbesondere müssen Sie die PHP-Betriebsumgebung und die ?ffentliche WeChat-Plattform installieren
