قدمت المقالة السابقة أننا سنمكّن وضع رد الاتصال. بعد بدء وضع رد الاتصال ، سنقوم بتنفيذ وظيفة الدردشة. عادة ، يمكنك إرسال الرسائل النصية والصوت والصور ومقاطع الفيديو وما إلى ذلك باستخدام WeChat Chat. يتم تنفيذ بعض هذه الوظائف فقط هنا لمشاركتها مع الجميع.
1. إنشاء اتصال مع حساب WeChat Enterprise
1. تطبيقات المؤسسة اتصل بالواجهة التي يوفرها حساب المؤسسة ، أو إدارة أو الاستعلام عن الموارد التي تديرها خلفية حساب المؤسسة ، أو إرسال رسائل إلى الأعضاء ، وما إلى ذلك ، والتي تسمى وضع الاتصال النشط.
2. يدفع حساب المؤسسة الرسائل التي يرسلها المستخدم أو الأحداث التي يطرحها المستخدم إلى تطبيق المؤسسة ، ويتم معالجتها بواسطة تطبيق المؤسسة ، والتي يشار إليها باسم وضع رد الاتصال.
3. يقرأ المستخدمون صفحة H5 المرسلة بواسطة تطبيق Enterprise في WeChat. يمكن لهذه الصفحة استدعاء الواجهة الأصلية التي توفرها WeChat واستخدام إمكانيات الطرفية المفتوحة لـ WeChat ، والتي تسمى نموذج JSAPI.
هذا مكتوب في وثيقة تطوير حساب WeChat Enterprise ، لكننا نستخدم بشكل عام أول طريقتين .
في الواقع ، المكالمات النشطة وعمليات الاسترجاعات نسبية. هذا من منظور خادم WeChat. يرسل خادم WeChat رسائل إلى عميل WeChat من خلال حساب الشركة ، وهو مكالمة نشطة. يقوم عميل WeChat بإرسال رسائل فعليًا للاتصال بخادم WeChat هي مكالمة سلبية (رد الاتصال) مقارنة بالخادم.
2. اتصل بشكل سلبي بتنسيق البيانات الذي تمت معالجته بواسطة خادم WeChat
1. اللحن الرئيسي: يرسل الخادم البيانات بتنسيق JSON إلى عميل WeChat ، ولا تحتاج البيانات إلى تشفيرها.
2. رد الاتصال: تتطلب الرسائل المرسلة من قبل عميل WeChat تشفير AES ، والرسائل المقبولة من قبل الخادم بتنسيق XML.
يتم تمثيل هذين الصورة على النحو التالي:
3. مخطط مبدأ الدردشة
أولاً ، يرسل عميل WeChat رسالة إلى الخادم للمعالجة. بعد نقل البيانات إلى خادم الطرف الثالث بتنسيق XML ، يقوم خادم الطرف الثالث بتحويل البيانات إلى تنسيق JSON ، ونقلها إلى خادم WeChat ، ويرسلها إلى العميل.
4. تنفيذ الكود
مع أساس المبدأ أعلاه ، ما يلي هو قسم الكود
1.Servlet
Public void dopost (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {request.setcharacterencoding ("UTF-8") ؛ استجابة. setcharacterencoding ("UTF-8") ؛ String msg_signature = request.getParameter ("msg_signature") ؛ سلسلة Timestamp = request.getParameter ("Timestamp") ؛ سلسلة nonce = request.getParameter ("nonce") ؛ inputStream inputStream = request.getInputStream () ؛ سلسلة postdata = ioutils.toString (inputStream ، "UTF-8") ؛ System.out.println (postdata) ؛ سلسلة msg = "" ؛ wxbizmsgcrypt wxcpt = null ؛ حاول {wxcpt = new wxbizmsgcrypt (Stoken ، Sencodingaeskey ، Scorpid) ؛ msg = wxcpt.decryptmsg (msg_signature ، timestamp ، nonce ، postdata) ؛ } catch (aesexception e) {E.PrintStackTrace () ؛ } system.out.println ("msg =" + msg) ؛ // الحصول على واجهة الوصول إلى بيانات الاعتماد سلسلة AccessToken = commonutil.getToken ("WXE510946434680DAB" ، "Ewtaho766Invp4e1mcS1mhyut2Daleb62Req3Vsfizhy4vtmwzpkweuxuxux3g0"). جرب {suppressWarnings ("غير مستخدم") العلم المنطقي = chatservice1.SendMessage (AccessToken ، msg) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} 2. الخدمات
الدرجة العامة chatsservice1 {public static boolean sendMessage (String AccessToken ، String msg) يلقي الاستثناء {boolean flag = false ؛ خريطة <string ، string> requestMap = messageutil.parsexml (msg) ؛ // Sender String fromuserName = requestMap.get ("fromuserName") ؛ // نوع الرسالة سلسلة msgtype = requestMap.get ("msgtype") ؛ if (msgtype.equals (messageUtil.req_message_type_text)) {// إذا كان نصًا رسالة نصية لرسالة خدمة العملاء = requestMap.get ("المحتوى") ؛ // محتوى رسالة النص // تجميع رسالة نص العميل النص ، المعلمة 1: معرف المستخدم ؛ المعلمة 2: تم إرسال المحتوى jsonmsg = advancedutil.maketextCustomessage ("Lishehe | Zhisheng | Zhangwenyuan | lixinjiang" ، المحتوى) ؛ } آخر إذا (msgtype.equals (messageutil.req_message_type_image)) {// المرسلة هي سلسلة صورة mediaid = requestMap.get ("mediaid") ؛ jsonmsg = advancedutil.makeimageCustommessage ("Lishhe | Zhisheng | Zhangwenyuan | lixinjiang" ، mediaid) ؛ } آخر إذا (msgtype.equals (messageutil.req_message_type_voice)) {String mediaId = requestMap.get ("mediaid") ؛ jsonmsg = advancedutil.makevoiceCustommessage ("Lishhe | Zhisheng | Zhangwenyuan | lixinjiang" ، mediaid) ؛ } flag = AdvancedUtil.SendCustommessage (AccessToken ، JsonMSG) ؛ العلم العودة }} 3. الأدوات
الفئة العامة AdvancedUtil {private static logger log = loggerfactory.getLogger (AdvancedUtil.class) ؛ /*** التجميع وأرسل رسالة نصية* regurn*/سلسلة ثابتة maketextCustMessage (سلسلة OpenId ، محتوى السلسلة) {content.replace ("/" "،" /// ") ؛ String jsonmsg = "/" touser/":/" ٪ s/"/" msgtype/":/" text/"،/" AgentId/":/" ٪ s/"،/" text/": makeimageCustommessage (سلسلة مفتوحة ، سلسلة mediaid) {string jsonmsg = "{/" touser/":/" ٪ s/"،/" msgtype/":/" image/"،/" acentId/":/" ٪ s/"،/" Image/": Mediaid) ؛ {/"touser/":/"٪ s/"/"msgtype/":/"voice/" ،/ 4. ملخص
هذا يدرك الاستقبال ودفع الرسائل. يقوم خادم الطرف الثالث بفك تشفير وتوصيف بيانات XML المستلمة ، ويحصل على نوع الرسالة منه ، ثم يقوم بتغليف الرسالة المراد إرسالها وتحويلها إلى تنسيق JSON ، وينقلها إلى خادم WeChat ويرسلها إلى العميل.
تم تجميع هذه المقالة في "ملخص Tutorial Android WeChat Development" ، و "ملخص تعليمي Java WeChat Development" يرحب الجميع بالتعلم والقراءة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.