Entwicklungsreihe für die ?ffentliche WeChat-Plattform
May 14, 2018 pm 03:28 PMUm mit der Entwicklung der ?ffentlichen WeChat-Plattform zu beginnen, müssen wir zun?chst verstehen, wozu die WeChat-Plattform uns beitragen kann.
Verwenden Sie Ihr ?ffentliches Konto, um sich bei http://mp.weixin.qq.com/ anzumelden, w?hlen Sie das Menü – Erweiterte Funktionen – Entwicklungsmodus – Dokumente anzeigen, und Sie werden das sehen aktueller Stand der entwicklungsf?higen Funktionen der ?ffentlichen WeChat-Plattform.
1. Kommunikationsmechanismus
Der Hauptinhalt der ?ffentlichen Plattform ist
Akzeptieren Sie das gesendete ?ffentliche Konto von Benutzern an Sie Nachricht
Antworten Sie Ihrem Benutzer eine Nachricht
Es ist zu beachten, dass das Senden einer Nachricht und das Verschwinden der Antwort fortlaufend sind Prozess, nur Kann in einem Gespr?ch durchgeführt werden. Mit anderen Worten: Wenn Ihre Benutzer nicht mit Ihnen sprechen, k?nnen Sie Ihren Kunden keine aktiven Nachrichten senden (Massennachrichten sind eine andere Situation, bei der die H?ufigkeit begrenzt ist). Sie k?nnen auch eine kostenpflichtige Nutzung von WeChat beantragen CRM-Plattform). Alle gesendeten und empfangenen Nachrichten erfordern zur übertragung die WeChat-Plattform.
2. Nachrichtentypen
Im Folgenden werden die Nachrichtentypen vorgestellt, die Benutzer Ihnen senden k?nnen. Dies sind die Nachrichtentypen, die derzeit empfangen werden.
1. Nachrichtentypen akzeptieren
Dies ist das, was uns normalerweise am h?ufigsten begegnet. Dies l?sst sich anhand einiger im Text erw?hnter Schlüsselw?rter beurteilen Die Bedeutung des Benutzers erkennen und darauf reagieren.
1.2 Bildnachrichten:
Derzeit ist es immer noch schwierig zu verstehen, was Benutzer durch Bilder ausdrücken m?chten. Daher entscheiden sich die meisten ?ffentlichen Konten dafür, Bildinformationen zu ignorieren oder sie manuell zu verarbeiten. Ich kann nur sagen: Die Bilder sind wundersch?n, aber ich kann sie nicht verstehen.
1.3 Geolocation-Nachricht:
Der Benutzer sendet Ihnen seinen Standort, was für die meisten ?ffentlichen Konten eine wichtige Information ist. Es kann einige Dienste basierend auf Standortinformationen bereitstellen, z. B. ein ?ffentliches Hotelreservierungskonto, das Hotels in Ihrer N?he empfehlen kann. Eine weitere Erg?nzung besteht darin, dass Standortinformationen analysiert und in Textnachrichten verwendet werden k?nnen. Wenn der Benutzer beispielsweise ?Fu?g?ngerzone Nanjing Road“ eingibt, k?nnen dem Benutzer die relevanten H?ndler der Fu?g?ngerzone Nanjing Road angezeigt werden.
1.4 Linknachricht:
Es gibt noch keine besonders effektive Verwendungsmethode im Entwicklungsmodus. Es kann h?ufiger beim Einkaufen oder bei einer Beratung verwendet werden, um die Person zu verdeutlichen, über die Sie sprechen.
1.5 Ereignis-Push-Nachricht:
Wenn der Benutzer an der Konversation mit Ihnen teilnimmt, k?nnen Sie den Benutzer zuerst begrü?en usw. Diese Nachricht unterstützt derzeit nur Version 4.5 und wurde noch nicht entwickelt. Es gibt viel Raum zum Nachdenken über die Zukunft. Was passiert beispielsweise, wenn der Benutzer die Sitzung betritt?
2. Antwortnachrichtentypen
2.1 Textnachricht
Dies ist die Art von Nachricht, die wir normalerweise am h?ufigsten senden. Wenn zur Beantwortung der Nachricht des Benutzers nur einfacher Text erforderlich ist, kann dies der Fall sein verwendete Informationen. Textnachrichten k?nnen Linkadressen enthalten. 2.2 Grafische Nachricht
2.3 Musiknachrichten
Nachdem wir den Kommunikationsmechanismus und die Nachrichtentypen der ?ffentlichen Plattform verstanden haben, beginnen wir mit der Vorbereitung der Entwicklungsumgebung
Melden Sie sich an WeChat Work-Plattform, w?hlen Sie erweiterte Funktionen aus, wechseln Sie in den Entwicklungsmodus und werden Sie Entwickler. Sie müssen es wie unten gezeigt konfigurieren. Die URL-Konfigurationsinformationen bedeuten, dass der Backend-Server von WeChat Ihre Benutzernachrichten zur Verarbeitung an die URL sendet. Token ist ein Passwort zwischen Ihnen und WeChat. Es wird verwendet, um zu überprüfen, ob die Nachricht vom WeChat-Dienst gesendet wird und nicht von anderen, die Ihr System angreifen.
Sie k?nnen es noch nicht einrichten. W?hrend der Einrichtung stellt WeChat eine GET-Anfrage für die von Ihnen festgelegte URL und prüft, ob die Schnittstelle verwendet werden kann. Sie k?nnen dies erst einrichten, nachdem Sie die GET-Methode bereit haben.
Wie wir aus der Dokumentation wissen, müssen wir die POST- und GET-Methoden implementieren, und die GET-Methode wird zur Verifizierung von WeChat und Ihrer Kommunikationsverifizierung verwendet, POST wird zur Nachrichtenverarbeitung verwendet.
Erstellen Sie ein neues Servlet HelloWeChat und implementieren Sie zun?chst die GET-Methode
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 為了簡(jiǎn)單起見(jiàn),先不對(duì)消息來(lái)源進(jìn)行校驗(yàn) response.setContentType("text/html;charset=UTF-8"); PrintWriter pw = response.getWriter(); String echo = request.getParameter("echostr"); echo = new String(echo.getBytes("ISO-8859-1"),"UTF-8"); pw.println(echo); }
Sie k?nnen http://localhost:8080/QiyadengWeb/HelloWeChat?echostr=hello Chinese verwenden. Wenn es keine Probleme gibt, k?nnen Sie es auf dem Server bereitstellen und dann einrichten die ?ffentliche Plattform WeChat.
3. Implementieren Sie die POST-Methode
Die POST-Methode empf?ngt zun?chst das von der ?ffentlichen WeChat-Plattform gesendete XML und extrahiert den Nachrichtenabsender und den Nachrichteninhalt. Für weitere Inhalte zum Senden von Nachrichten k?nnen Sie Ihre eigene Verarbeitungslogik hinzufügen und diese schlie?lich zu einer XML-Antwortnachricht zusammenfügen und an die ?ffentliche WeChat-Plattform zurücksenden.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter pw = response.getWriter(); String wxMsgXml = IOUtils.toString(request.getInputStream(),"utf-8"); WeChatTextMessage textMsg = null; try { textMsg = getWeChatTextMessage(wxMsgXml); } catch (Exception e) { e.printStackTrace(); } StringBuffer replyMsg = new StringBuffer(); if(textMsg != null){ //增加你所需要的處理邏輯,這里只是簡(jiǎn)單重復(fù)消息 replyMsg.append("您給我的消息是:"); replyMsg.append(textMsg.getContent()); } else{ replyMsg.append(":)不是文本的消息,我暫時(shí)看不懂"); } String returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName()); pw.println(returnXml); }
Zum Debuggen empfiehlt Fiddler hier ein Tool. Sie k?nnen WeChat-POST-Nachrichten auf Ihrem lokalen Server simulieren, ohne sie jedes Mal zum Debuggen auf dem Server bereitstellen zu müssen. Informationen zur Verwendung der POST-Daten von Fiddler finden Sie in den in der folgenden Abbildung markierten Inhalten.
4. Bereitstellen und testen
Schlie?en Sie den ersten Schritt ab und führen Sie ein Gespr?ch mit Ihrem ?ffentlichen Konto. Es erfolgt keine Antwort die Nachricht. Wenn Sie Fragen haben, herzlichen Glückwunsch .
5. Abh?ngigkeitsbibliothek
Für Schüler, die Maven verwenden, fügen Sie einfach die folgenden Abh?ngigkeiten hinzu. Für Nicht-Maven-Benutzer suchen Sie einfach diese Bibliotheken und fügen Sie sie dem Builder-Pfad hinzu.
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.3</version> </dependency>
6. Vollst?ndiger Code
package com.qiyadeng.wechat; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; /** * Servlet implementation class HelloWeChat */ public class HelloWeChat extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloWeChat() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 為了簡(jiǎn)單起見(jiàn),先不對(duì)消息來(lái)源進(jìn)行校驗(yàn) response.setContentType("text/html;charset=UTF-8"); PrintWriter pw = response.getWriter(); String echo = request.getParameter("echostr"); echo = new String(echo.getBytes("ISO-8859-1"),"UTF-8"); pw.println(echo); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter pw = response.getWriter(); String wxMsgXml = IOUtils.toString(request.getInputStream(),"utf-8"); WeChatTextMessage textMsg = null; try { textMsg = getWeChatTextMessage(wxMsgXml); } catch (Exception e) { e.printStackTrace(); } StringBuffer replyMsg = new StringBuffer(); if(textMsg != null){ //增加你所需要的處理邏輯,這里只是簡(jiǎn)單重復(fù)消息 replyMsg.append("您給我的消息是:"); replyMsg.append(textMsg.getContent()); } else{ replyMsg.append(":)不是文本的消息,我暫時(shí)看不懂"); } String returnXml = getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName()); pw.println(returnXml); } private WeChatTextMessage getWeChatTextMessage(String xml){ XStream xstream = new XStream(new DomDriver()); xstream.alias("xml", WeChatTextMessage.class); xstream.aliasField("ToUserName", WeChatTextMessage.class, "toUserName"); xstream.aliasField("FromUserName", WeChatTextMessage.class, "fromUserName"); xstream.aliasField("CreateTime", WeChatTextMessage.class, "createTime"); xstream.aliasField("MsgType", WeChatTextMessage.class, "messageType"); xstream.aliasField("Content", WeChatTextMessage.class, "content"); xstream.aliasField("MsgId", WeChatTextMessage.class, "msgId"); WeChatTextMessage wechatTextMessage = (WeChatTextMessage)xstream.fromXML(xml); return wechatTextMessage; } private String getReplyTextMessage(String content, String weChatUser){ WeChatReplyTextMessage we = new WeChatReplyTextMessage(); we.setMessageType("text"); we.setFuncFlag("0"); we.setCreateTime(new Long(new Date().getTime()).toString()); we.setContent(content); we.setToUserName(weChatUser); we.setFromUserName("shanghaiweather");//TODO 你的公眾帳號(hào)微信號(hào) XStream xstream = new XStream(new DomDriver()); xstream.alias("xml", WeChatReplyTextMessage.class); xstream.aliasField("ToUserName", WeChatReplyTextMessage.class, "toUserName"); xstream.aliasField("FromUserName", WeChatReplyTextMessage.class, "fromUserName"); xstream.aliasField("CreateTime", WeChatReplyTextMessage.class, "createTime"); xstream.aliasField("MsgType", WeChatReplyTextMessage.class, "messageType"); xstream.aliasField("Content", WeChatReplyTextMessage.class, "content"); xstream.aliasField("FuncFlag", WeChatReplyTextMessage.class, "funcFlag"); String xml =xstream.toXML(we); return xml; } }
Standortidentifizierung Dies ist eine Nachricht, die h?ufig in praktischen Anwendungen verwendet wird, insbesondere für viele H?ndler, durch das Verst?ndnis der Standort des Benutzers, Bereitstellung spezieller Produkte oder Empfehlungen für Einkaufszentren für Benutzer. Benutzer k?nnen zwei Arten von Nachrichten senden:
1. Geografische WeChat-Standortinformationen
2 ??>
Lassen Sie uns herausfinden, welche Informationen die WeChat-Standortnachricht enth?ltDie wichtigsten enthaltenen Informationen sind L?ngengrad, Breitengrad und der Standort des Labels. Entsprechende Dienste k?nnen den Nutzern auf Basis der im Label beschriebenen Standortinformationen bereitgestellt werden. Sie k?nnen Ihre neuesten Produkte oder regionalen Produkte auch basierend auf den L?ngen- und Breitengradinformationen des Benutzers bereitstellen.
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml>
Definieren Sie zun?chst die WeChatLocationMessage-Klasse basierend auf den geografischen Standortinformationen von WeChat und konvertieren Sie XML in ein WeChatLocationMessage-Objekt
Dieser Artikel verwendet die Karten-API von Baidu , finden Sie als Beispiel die n?chstgelegene Bank.
public class WeChatLocationMessage { private String toUserName; private String fromUserName; private String createTime; private String msgType; private String locationx; private String localtiony; private String scale; private String label; private String msgId; public static WeChatLocationMessage getWeChatLocationMessage(String xml){ XStream xstream = new XStream(new DomDriver()); WeChatLocationMessage message = null; xstream.alias("xml", WeChatLocationMessage.class); xstream.aliasField("ToUserName", WeChatLocationMessage.class, "toUserName"); xstream.aliasField("FromUserName", WeChatLocationMessage.class, "fromUserName"); xstream.aliasField("CreateTime", WeChatLocationMessage.class, "createTime"); xstream.aliasField("MsgType", WeChatLocationMessage.class, "msgType"); xstream.aliasField("Location_X", WeChatLocationMessage.class, "locationx"); xstream.aliasField("Location_Y", WeChatLocationMessage.class, "localtiony"); xstream.aliasField("Scale", WeChatLocationMessage.class, "scale"); xstream.aliasField("Label", WeChatLocationMessage.class, "label"); xstream.aliasField("MsgId", WeChatLocationMessage.class, "msgId"); message = (WeChatLocationMessage)xstream.fromXML(xml); return message; } //getter and setter }
Ergebnisse ausgeben
public String getPalace(String query,String lat,String lng) throws ClientProtocolException, IOException{ HttpClient httpClient = new DefaultHttpClient(); String url = palceRequestUrl(query,lat,lng); logger.log(Level.INFO, url); HttpGet httpget = new HttpGet(url); ResponseHandler<String> responseHandler = new BasicResponseHandler(); String responseBody = httpClient.execute(httpget, responseHandler); logger.log(Level.INFO,"baidu response:"+responseBody); return responseBody; } public String palceRequestUrl(String query,String lat,String lng) throws UnsupportedEncodingException { String url = WeChatConstant.BASEURL + "place/search?query=" + URLEncoder.encode(query,"UTF-8") + "&key=" + WeChatConstant.MAPKEY +"&location="+lat+","+lng +"&radius=2000"+"&output=" + WeChatConstant.OUTPUTFORMAT; return url; }
Als N?chstes werden WeChat-Benutzern die aktuellen Standortinformationen der Baidu-Karte im Format grafischer Nachrichten angezeigt
<PlaceSearchResponse> <status>OK</status> <results> <result> <name>中國(guó)工商銀行東長(zhǎng)安街支行</name> <location> <lat>39.915891</lat> <lng>116.41867</lng> </location> <address>東城區(qū)東長(zhǎng)安街1號(hào)東方廣場(chǎng)西三辦公樓1樓</address> <uid>a025683c73033c35a21de987</uid> <detail_url>http://api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987&amp;output=html&amp;source=placeapi </detail_url> <tag>銀行,王府井/東單</tag> </result> </results> </PlaceSearchResponse>
2. Stra?ennamen, Wahrzeichen von Geb?uden oder Namen von Einkaufszentren
public static String getWeChatReplyNewsMessageByBaiduPlace(List<BaiduPlaceResponse> placeList, double lat, double lng,String userName, int size){ WeChatReplyNewsMessage newsMessage = new WeChatReplyNewsMessage(); List<Item> items = new ArrayList<Item>(); StringBuffer strBuf = new StringBuffer(); logger.log(Level.INFO,"placeList count="+placeList.size()); newsMessage.setItems(items); if(placeList.size()>size){ newsMessage.setArticleCount(size); } else{ newsMessage.setArticleCount(placeList.size()); } logger.log(Level.INFO,"article count="+newsMessage.getArticleCount()); newsMessage.setCreateTime(new Date().getTime()+""); newsMessage.setMsgType("news"); newsMessage.setFuncFlag("0"); newsMessage.setToUserName(userName); newsMessage.setFromUserName(WeChatConstant.FROMUSERNAME); for(int i = 0;i <newsMessage.getArticleCount();i++){ BaiduPlaceResponse place = placeList.get(i); Double distance = GeoUtil.DistanceOfTwoPoints(Double.valueOf(place.getLng()), Double.valueOf(place.getLat()), lng, lat, GaussSphere.Beijing54); Item item = new Item(); item.setTitle(place.getName()+"["+distance+"米]"+"\n"+place.getAddress()+"\n"+place.getTelephone()); item.setPicUrl(""); item.setUrl(place.getDetailUrl()); item.setDescription(""); items.add(item); } logger.log(Level.INFO,"newMessage="+newsMessage.toString()); strBuf = strBuf.append(getWeChatNewsMessage(newsMessage)); return strBuf.toString(); } public static String getWeChatNewsMessage(WeChatReplyNewsMessage newsMessage){ XStream xstream = new XStream(new DomDriver()); xstream.alias("xml", WeChatReplyNewsMessage.class); xstream.aliasField("ToUserName", WeChatReplyNewsMessage.class, "toUserName"); xstream.aliasField("FromUserName", WeChatReplyNewsMessage.class, "fromUserName"); xstream.aliasField("CreateTime", WeChatReplyNewsMessage.class, "createTime"); xstream.aliasField("MsgType", WeChatReplyNewsMessage.class, "msgType"); xstream.aliasField("ArticleCount", WeChatReplyNewsMessage.class, "articleCount"); xstream.aliasField("Content", WeChatReplyNewsMessage.class, "content"); xstream.aliasField("FuncFlag", WeChatReplyNewsMessage.class, "funcFlag"); xstream.aliasField("Articles", WeChatReplyNewsMessage.class, "items"); xstream.alias("item", Item.class); xstream.aliasField("Title", Item.class, "title"); xstream.aliasField("Description", Item.class, "description"); xstream.aliasField("PicUrl", Item.class, "picUrl"); xstream.aliasField("Url", Item.class, "url"); return xstream.toXML(newsMessage); }Für Stra?ennamen, Wahrzeichen von Geb?uden und andere Informationen besteht die Methode darin, den L?ngen- und Breitengrad der eingegebenen Standortinformationen anhand von Karteninformationen Dritter zu bestimmen. Dieser Artikel verwendet die Baidu Map API, um den L?ngen- und Breitengrad des gesuchten Standorts zu bestimmen. Nach der Bestimmung des L?ngen- und Breitengrads ist das Problem dasselbe wie beim ersten Nachrichtentyp, und die entsprechende Verarbeitung erfolgt entsprechend dem L?ngen- und Breitengrad.
Weitere verwandte Artikel in der WeChat-Reihe zur Entwicklung ?ffentlicher Plattformen finden Sie auf der chinesischen PHP-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)