Java WeChat Public Platform Development Management ، يجب عليك أولاً قراءة الوثائق الرسمية
تنقسم إدارة رسائل WeChat إلى استلام الرسائل العادية ، وتلقي الحدث ، وإرسال الرسائل (الرد السلبي) ، ورسائل خدمة العملاء ، والرسائل الجماعية ، ورسائل القالب.
1. استلام الرسائل العادية
عندما يرسل مستخدم WeChat العادي رسالة إلى حساب عام ، سيقوم خادم WeChat بتعبئة حزمة بيانات XML لرسالة البريد إلى عنوان URL الذي تم ملؤه بواسطة المطور.
فيما يتعلق بـ MSGID ، فإن التفسير الرسمي يعادل كل معرف رسالة. فيما يتعلق بوزن رسالة إعادة المحاولة ، يوصى باستخدام MSGID في قائمة الانتظار. إذا فشل خادم WeChat في تلقي استجابة في غضون خمس ثوانٍ ، فسيقوم بفصل الطلب وإعادة أدائها ، وإعادة المحاولة ثلاث مرات في المجموع.
على سبيل المثال ، مثال XML للرسالة النصية
<xml> <touserName> <! اختبار]]> </content> <SGID> 1234567890123456 </sggid> </sml>
تحقق من الرسائل الأخرى في المستند الرسمي ، وقم ببساطة بتغليف الرسائل التالية الفئة الملخصية الملخصية.
حزمة com.phil.wechat.msg.model.req ؛ استيراد java.io.serializable ؛ / ** * فئة الرسائل الأساسية * * Author Phil * */ Public Abstract Class AbstractMSG تنفذ {Private Static Final Long SerialVersionuid = -624427633057415731L ؛ السلسلة الخاصة touserName. // المطور WeChat ID سلسلة خاصة من اسم username ؛ // حساب المرسل (OpenId) سلسلة خاصة msgtype = setMsgType () ؛ // نوع الرسالة ، على سبيل المثال/النص/الصورة الخاصة الطول الطويل ؛ // وقت إنشاء الرسائل (عدد صحيح) msgid الطويل الخاص ؛ // معرف الرسالة ، integer 64-bit/ ** * نوع الرسالة * * regurn */ public string setmsgtype () ؛ }رسالة نص textmsg.java
حزمة com.phil.wechat.msg.model.req ؛ / *** رسالة نصية* Author Phil* date 30 يونيو 2017**/ textMsg الفئة العامة يمتد الملخصة {private static final long serialversionuid = -1764016801417503409l ؛ محتوى سلسلة خاصة ؛ // رسالة نصية Override setmsgtype () {return "text" ؛ }}البعض الآخر مثل هذا ...
2. الرد بشكل سلبي على رسائل المستخدم
بعد أن يرسل خادم WeChat رسالة المستخدم إلى عنوان خادم المطور (الذي تم تكوينه في مركز المطورين) للحساب الرسمي ، سوف ينفصل خادم WeChat إذا فشل في تلقي الاستجابة في غضون خمس ثوان ويبدأ طلبًا مرة أخرى ، ومحاولة ثلاث مرات في المجموع. إذا تبين أثناء التصحيح ، فقد تبين أنه لا يمكن للمستخدم استلام رسالة الاستجابة ، فيمكنك التحقق مما إذا كان معالجة الرسائل قد تم توقيتها. إذا لم يتمكن الخادم من ضمان أنه سيعالج والرد في غضون خمس ثوان ، فيمكنه الرد مباشرة على السلسلة الفارغة. لن يتعامل خادم WeChat مع هذا ولن يبدأ إعادة المحاولة.
إذا "لم يتمكن هذا الحساب الرسمي من تقديم الخدمات في الوقت الحالي ، فيرجى المحاولة مرة أخرى لاحقًا" ، فهناك سببان لذلك.
على سبيل المثال ، مثال رسالة نصية الرد XML
<xml> <touserName> <! <Content> <!
في حزمة بسيطة
رد رسالة تجريدية الفئة RespabStractMsg.java
حزمة com.phil.wechat.msg.model.resp ؛ استيراد java.io.serializable ؛ / ** * الفئة الأساسية للرسائل (الحساب العام-> مستخدم عادي) * * Author Phil * */ Public Abstract Class RespabStractMsg {// حساب المتلقي (المستلم OpenId) TouserName الخاص ؛ // المطور WeChat ID سلسلة خاصة من اسم username ؛ // وقت إنشاء الرسائل (جزء لا يتجزأ) // نوع الرسالة (النص/الموسيقى/الأخبار) سلسلة خاصة msgtype = setMsgType () ؛ // نوع الرسالة المجردة المجردة setMsgType () ؛ } رد الرسائل النصية regptextmsg.java
حزمة com.phil.wechat.msg.model.resp ؛ / ** * الرد على رسائل الصور * * Author Phil * data 26 مارس 2017 * */ الفئة العامة Respimagemsg يمتد respabstractmsg {صورة خاصة ؛ Override Public String setMsgType () {return "Image" ؛ } / ** * * Author Phil * date 19 يوليو 2017 * * / صورة الفئة العامة {// قم بتحميل ملفات الوسائط المتعددة من خلال الواجهة في إدارة المواد للحصول على المعرف. سلسلة خاصة MediaId ؛ السلسلة العامة getMediaId () {return mediaId ؛ } public void setMediaId (String mediaId) {mediaId = mediaId ؛ }}} أنواع الرسائل الأخرى كما يلي ...
3. معالجة الرسائل
Master XML تحليل
حزمة com.phil.wechat.msg.controller ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.util.map ؛ استيراد java.util.objects ؛ استيراد org.apache.commons.lang3.StringUtils ؛ استيراد org.dom4j.documentException ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد com.phil.modules.config.wechatconfig ؛ استيراد com.phil.modules.util.msgutil ؛ استيراد com.phil.modules.util.signatureutil ؛ استيراد com.phil.modules.util.xmlutil ؛ استيراد com.phil.wechat.base.controller.baseController ؛ استيراد com.phil.wechat.base.result.wechatresult ؛ استيراد com.phil.wechat.msg.model.req.basicmsg ؛ استيراد com.phil.wechat.msg.model.resp.respabstractmsg ؛ استيراد com.phil.wechat.msg.model.resp.respnewsmsg ؛ استيراد com.phil.wechat.msg.model.resp.respnewsmsg ؛ استيراد com.phil.wechat.msg.service.wechatmsgservice ؛ /** * Author Phil * date 19 سبتمبر ، 2017 * */controller @requestmapping ("/weChat") فئة public wechatmsgcontroller يمتد BaseController {private logger = loggerfactory.getLogger (this.getClass ()) ؛ @autowired wechatmsgservice wechatmsgservice ؛ /** * تحقق مما إذا كان يتم إرسال المعلومات من خادم WeChat ومعالجة الرسالة * param out * throws ioException */ @requestmapping (value = "/handler" ، method = {requestMethod.get ، requestMethod.post}) Public Void ProcessPost () This.getRequest (). this.getResponse (). boolean isPost = objects.equals ("post" ، this.getRequest (). getMethod (). touppercase ()) ؛ إذا كان (ispost) {logger.debug ("الوصول ناجح ، يتم معالجة المنطق") ؛ String Respxml = DefaultMsGdispose (this.getRequest (). if (stringUtils.isNotBlank (respxml)) {this.getResponse (). getWriter (). الكتابة (respxml) ؛ }} else {string signature = this.getRequest (). getParameter ("signature") ؛ // timestamp string timestamp = this.getRequest (). getParameter ("timestamp") ؛ // number number string nonce = this.getRequest (). getParameter ("nonce") ؛ // تحقق من الطلب عن طريق التحقق من التوقيع. إذا كان التحقق ناجحًا ، فاحصل على Echosttr كما هو ، مما يشير إلى أن الوصول ناجح. خلاف ذلك ، يفشل الوصول إذا (signatureUtil.checksIgnature (التوقيع ، الطابع الزمني ، nonce)) {// سلسلة عشوائية echosttr = this.getRequest (). getParameter ("echosttr") ؛ logger.debug ("أدخل ناجحة ، echosttr {}" ، echosttr) ؛ this.getResponse (). getWriter (). الكتابة (echoStr) ؛ }}} / ** * طريقة المعالجة الافتراضية * param input * return * throws استثناء * throws documentException * / private string defaultsgdispose (inputStream inputStream) يلقي استثناء {String result = null ؛ if (inputStream! = null) {map <string ، string> params = xmlutil.parsestreamTomap (inputStream) ؛ if (params! = null && params.size ()> 0) {basicmsg msginfo = new basicmsg () ؛ String CreateTime = params.get ("createTime") ؛ سلسلة msgid = params.get ("msgid") ؛ msginfo.setCreateTime ((createTime! = null &&! "". يساوي (createTime))؟ integer.parseint (createTime): 0) ؛ msginfo.setFromuserName (params.get ("fromuserName")) ؛ msginfo.setmsgid ((msgid! = null &&! "". يساوي (msgid))؟ long.parselong (msgid): 0) ؛ msginfo.settouserName (params.get ("touserName")) ؛ WeChatResult ResultObj = coreHandler (msginfo ، params) ؛ if (resultObj == null) {// return null ؛ } نجاح منطقي = resultobj.issuccess () ؛ // إذا كان هذا صحيحًا ، فهذا يعني أنه يتم إرجاع ملف XML ، ويمكن تحويله مباشرة ، وإلا وفقًا للنوع إذا (النجاح) {result = resultObj.getObject (). toString () ؛ } آخر {int type = resultObj.getType () ؛ // 1 رسالة رسومية محددة هنا ، وإلا سيتم تحويلها مباشرة إذا (type == wechatresult.newsmsg) {respnewsmsg newsmsg = (respnewsmsg) resultObj.getObject () ؛ النتيجة = msgutil.newsmsgtoxml (newsmsg) ؛ } آخر {respabstractmsg basicmsg = (respabstractmsg) resultObj.getObject () ؛ النتيجة = msgutil.msgtoxml (basicmsg) ؛ }} آخر {result = "msg خاطئ" ؛ }} نتيجة الإرجاع ؛ } / ** * المعالجة الأساسية * * param msg * الفئة الأساسية للرسائل * param params * xml data * @return * / private wechatresult coreHandler (basicmsg msg ، map <string ، string> params) {wechatresult result = null ؛ String msgtype = params.get ("msgtype") ؛ if (stringUtils.isempty (msgtype)) {switch (msgtype) {case wechatconfig.req_message_type_text: // text message result = wechatmsgservice.textmsg (msg ، params) ؛ استراحة؛ case wechatconfig.req_message_type_image: // صورة رسالة الصورة = weChatMsGservice.imagemsg (msg ، params) ؛ استراحة؛ case wechatconfig.req_message_type_link: // link message result = wechatmsgservice.linkmsg (msg ، params) ؛ استراحة؛ Case WeChatConfig.req_message_type_location: // نتيجة الموقع الجغرافي = weChatMsgService.locationMsg (msg ، params) ؛ استراحة؛ Case WeChatConfig.req_message_type_voice: // نتيجة رسالة الصوت = weChatMsgService.voicemsg (msg ، params) ؛ استراحة؛ Case WeChatConfig.req_message_type_shortvideo: // نتيجة رسالة فيديو قصيرة = WeChatmsGservice.shortvideo (MSG ، Params) ؛ استراحة؛ case wechatconfig.req_message_type_video: // video message result = wechatmsgservice.shortvideo (msg ، params) ؛ استراحة؛ case wechatconfig.req_message_type_video: // video message result = wechatmsgservice.videomsg (msg ، params) ؛ استراحة؛ CASE WeChatConfig.req_message_type_event: // enter message string eventtype = params.get ("event") ؛ // if (eventType! = null &&! " استراحة؛ case wechatconfig.event_type_unsubscribe: result = weChatmsGservice.unsubscribe (msg ، params) ؛ استراحة؛ case wechatconfig.event_type_scan: result = weChatmsGservice.scan (msg ، params) ؛ استراحة؛ case wechatconfig.event_type_location: result = weChatmsGservice.eventLocation (msg ، params) ؛ استراحة؛ CASE WeChatConfig.event_type_click: result = weChatmsGservice.eventClick (msg ، params) ؛ استراحة؛ case wechatconfig.event_type_view: result = weChatmsGservice.eventView (msg ، params) ؛ استراحة؛ Case WeChatConfig.kf_create_session: result = weChatmsGservice.kfcreatesession (msg ، params) ؛ استراحة؛ Case WeChatConfig.kf_close_session: result = weChatmsGservice.kfcloseessess (msg ، params) ؛ استراحة؛ Case WeChatConfig.kf_close_session: result = weChatmsGservice.kfcloseessess (msg ، params) ؛ استراحة؛ CASE WeChatConfig.kf_switch_session: نتيجة = weChatmsgService.kfswitchSession (msg ، params) ؛ استراحة؛ الافتراضي: WeChatmsgService.eventDefaultReply (MSG ، params) ؛ استراحة؛ } } استراحة؛ الافتراضي: WeChatmsGservice.defaultMsg (MSG ، Params) ؛ }} نتيجة الإرجاع ؛ }}فقط قدم فكرة ، يرجى الانتقال إذا كنت تشير إلى الرمز
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.