تتطلب القائمة المخصصة لمنصة WeChat Development Platform أموالًا لتحقيقها لتحقيقها. إذا كنت لا ترغب في إنفاق المال ، فيمكنك فقط اللعب مع حساب الاختبار ، ولكن هذا لا يؤثر على التطوير. يعتمد تطوري على تطوير تطبيق منصة WeChat العامة للمعلم Liu Feng.
طالما نستخدم النظام الأساسي العام لاختبار الحساب ، يمكننا تطوير قائمة مخصصة. إنه أكثر ملاءمة. يحتوي حساب الاختبار على العديد من الواجهات ، وهو مريح للغاية.
عند تطوير قائمة مخصصة ، يمكنك الرجوع إلى القائمة المخصصة في وثائق مطور WeChat Public Platform لإنشائها.
1. تخصيص القائمة
1. تتضمن القوائم المخصصة ما يصل إلى 3 قوائم من المستوى الأول ، وكل قائمة من المستوى الأول تحتوي على قوائم ما يصل إلى 5 من المستوى الثاني.
2. تحتوي القائمة من المستوى الأول على ما يصل إلى 4 أحرف صينية ، والقائمة من المستوى الثاني تحتوي على ما يصل إلى 7 أحرف صينية. سيتم استبدال الأجزاء الإضافية بـ "...".
3. بعد إنشاء قائمة مخصصة ، فإن استراتيجية تحديث القائمة هي أنه عندما يدخل المستخدم صفحة جلسة الحساب الرسمية أو صفحة ملف تعريف الحساب الرسمي ، إذا وجد أن آخر طلب لسحب القائمة كان قبل 5 دقائق ، فسوف يسحب القائمة. إذا تم تحديث القائمة ، فسيتم تحديث قائمة العميل. أثناء الاختبار ، يمكنك محاولة إلغاء تتبع الحساب العام ومتابعته مرة أخرى ، ثم
يمكنك رؤية التأثير بعد الخلق.
يمكن أن تنفذ واجهة القائمة المخصصة أنواعًا متعددة من الأزرار ، على النحو التالي:
1. انقر: انقر لدفع الحدث
بعد أن ينقر المستخدم على زر Click Type ، سيقوم خادم WeChat بضغط بنية حدث نوع الرسالة إلى المطور من خلال واجهة الرسائل (راجع دليل واجهة الرسائل) ، ويحضر قيمة المفتاح التي تم ملؤها بواسطة المطور في الزر. يمكن للمطور التفاعل مع المستخدم من خلال قيمة المفتاح المخصصة ؛
2. عرض: url القفز
بعد أن ينقر المستخدم على زر العرض ، سيفتح عميل WeChat عنوان URL لصفحة الويب التي تم ملؤها من قبل المطور في الزر ، والتي يمكن دمجها مع إذن صفحة الويب للحصول على واجهة المعلومات الأساسية للمستخدم للحصول على معلومات أساسية للمستخدم.
3. Scancode_push: فحص رمز الضغط على الحدث
بعد أن ينقر المستخدم على الزر ، سيقوم عميل WeChat باستدعاء أداة المسح الضوئي ، وعرض نتيجة المسح الضوئي بعد الانتهاء من عملية المسح (إذا كان عنوان URL ، وسيدخل عنوان URL) ، وسيتم تمرير نتيجة المسح إلى المطور ، ويمكن للمطور إرسال رسالة.
4.
بعد أن ينقر المستخدم على الزر ، سيقوم عميل WeChat باستدعاء أداة المسح. بعد الانتهاء من تشغيل رمز المسح ، تمرير نتيجة رمز المسح إلى المطور. في الوقت نفسه ، يتم إغلاق أداة المسح ، وينبثق مربع موجه "استلام الرسالة" ، ثم قد يتم استلام رسالة أرسلها المطور.
5. PIC_SYSPHOTO: النظام المنبثق لالتقاط الصور ونشر الصور
بعد أن ينقر المستخدم على الزر ، سيقوم عميل WeChat بضبط كاميرا النظام. بعد الانتهاء من عملية الصور ، سوف يرسل الصور التي تم التقاطها إلى المطور ودفع الحدث إلى المطور. في الوقت نفسه ، ستحتفظ بكاميرا النظام ثم تلقي رسالة أرسلها المطور.
6. pic_photo_or_album: منبثقة ولتقط الصور أو نشر الصور في الألبوم
بعد أن ينقر المستخدم على الزر ، سيظهر عميل WeChat المحدد للمستخدم لتحديد "التقاط صورة" أو "حدد من ألبوم الهاتف المحمول". بعد أن يختار المستخدم ، سوف يمر عبر العمليتين الأخريين.
7. PIC_WEIXIN: مرسل ألبوم صور WeChat المنبثق
بعد أن ينقر المستخدم على الزر ، سيقوم عميل WeChat بضبط ألبوم WeChat. بعد الانتهاء من عملية التحديد ، سترسل الصورة المحددة إلى خادم المطور ودفع الحدث إلى المطور. في الوقت نفسه ، سيتم إغلاق الألبوم. بعد ذلك ، قد يتم استلام رسالة من المطور.
8. location_select: محدد تحديد الموقع الجغرافي المنبثق
بعد أن ينقر المستخدم على الزر ، سيقوم عميل WeChat بالاتصال بأداة تحديد الموقع الجغرافي. بعد الانتهاء من عملية التحديد ، سترسل الموقع الجغرافي المحدد إلى خادم المطور ، وفي الوقت نفسه ، سيغلق أداة اختيار الموقع ، ثم تلقي رسالة أرسلها المطور.
9. Media_id: أرسل رسالة (باستثناء رسالة نصية)
بعد أن ينقر المستخدم على زر نوع Media_id ، سيرسل خادم WeChat المادة المقابلة لمعرف المواد الدائم الذي تم ملؤه بواسطة المطور إلى المستخدم. يمكن أن تكون أنواع المواد الدائمة هي الصور والصوت والفيديو والرسائل الرسومية. يرجى ملاحظة: يجب أن يكون معرف المواد الدائم هو المعرف القانوني الذي تم الحصول عليه بعد تحميل واجهة "إدارة المواد/إضافة مادة دائمة".
10. عرض _limited: اقفز إلى عنوان URL للرسالة النصية
بعد أن ينقر المستخدم على زر view_limited type ، سيفتح عميل WeChat عنوان URL للرسالة الرسومية المقابلة لمعرف المادة الدائم الذي تم ملؤه بواسطة المطور في الزر. يدعم نوع المواد الدائمة رسالة الرسوم فقط. يرجى ملاحظة: يجب أن يكون معرف المواد الدائم هو المعرف القانوني الذي تم الحصول عليه بعد تحميل واجهة "إدارة المواد/إضافة مادة دائمة"
2. الوصول إلى واجهة القائمة المخصصة
1: احصل على Access_Token
يتطلب إنشاء القوائم المخصصة والاستعلام وحذفها استدعاء واجهة القائمة المخصصة مفتوحة على النظام الأساسي العام. للاتصال بهذه الواجهة ، تحتاج إلى الحصول على Access_Token (بيانات اعتماد الوصول إلى الواجهة). تعتمد جميع هذه الواجهات على بروتوكول HTTPS ، لذلك نحتاج أولاً إلى حل مشكلة كيفية إرسال طلبات HTTPS في برامج Java.
احصل على بيانات اعتماد الوصول إلى الواجهة Access_Token:
يتم الوصول إلى Access_token من خلال GOT:
https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_credential&appid=appid&secret=appsecret
هناك ثلاث معلمات في الرابط ، وهي Grant_type و AppId و Secret. وفقًا لوصف المعلمة في الشكل ، يقوم Grant_type بإجراء القيمة الثابتة Client_credential ، ويتم تعيين AppId و Secret لنا بواسطة WeChat بعد التقدم بطلب للحصول على القائمة المخصصة.
بعد إرسال الطلب بنجاح ، سيقوم خادم WeChat بإرجاع سلسلة JSON ، بما في ذلك Access_Token و Expires_in. من بينها ، Access_Token هو بيانات الاعتماد التي نحتاجها في النهاية ، و Expires_in هي فترة صحة بيانات الاعتماد ، والوحدة هي ثواني ، و 7200 ثانية هي ساعتين. هذا يعني أنه ليس في كل مرة تصل فيها إلى واجهة خاصة ، فأنت بحاجة إلى إعادة تكوين Access_token ، ويمكن استخدامها طالما أن Access_token لا يزال في غضون فترة الصلاحية.
2: إنشاء القائمة
لإنشاء قائمة ، اتصل بواجهة القائمة
وصف طلب الاتصال الواجهة
طريقة طلب http: post (يرجى استخدام بروتوكول https) https://api.weixin.qq.com/cgi-bin/menu/create؟access_token=access_token
في الواقع ، هو إرسال سلسلة قائمة JSON في المنشور إلى العنوان https://api.weixin.qq.com/cgi-bin/menu/create؟access_token=access_token.
3. تغليف طريقة الطلب العام (مدير الثقة المخصص)
لإنشاء قائمة ، يتمثل أحدهما في الحصول على واجهة Access_Token والآخر هو تخصيص واجهة القائمة ، وكلاهما هو طلبات HTTPS.
1: إنشاء مدير الثقة شهادة
لطلبات HTTPS ، نحتاج إلى مدير الثقة في الشهادة. يجب تعريف فئة المدير هذه بنفسها ، ولكنها تحتاج إلى تنفيذ واجهة X509TrustManager. الرمز كما يلي:
حزمة org.liufeng.weixin.util ؛ استيراد java.security.cert.certificateException ؛ استيراد java.security.cert.x509certificate ؛ استيراد javax.net.ssl.x509trustmanager ؛ / ** * مدير الثقة الشهادة (لطلبات https) * * Author liufeng * date 2013-08-08 */ public class myx509trustmanager يطرف x509trustmanager CheckSerVerTrusted (x509certificate [] سلسلة ، سلسلة AuthType) يلقي CertificateException {} public x509certificate [] getAcceptedIssuers () {return null ؛ }} وظيفة مدير الشهادة هي الوثوق بجميع الشهادات المحددة.
2: إنشاء طلب HTTPS عالمي
يجب على طلب HTTPS العالمي
1) دعم طلبات HTTPS ؛
2) الدعم الحصول على و post ؛
3) دعم تقديم المعلمة وأيضا دعم أي معلمات ؛
حزمة org.liufeng.weixin.util ؛ استيراد java.io.bufferedreader ؛ استيراد java.io.inputstream ؛ استيراد java.io.inputstreamreader ؛ استيراد java.io.outputStream ؛ استيراد java.net.connectException ؛ استيراد java.net.url ؛ استيراد javax.net.ssl.httpsurlConnection ؛ استيراد javax.net.ssl.sslcontext ؛ استيراد javax.net.ssl.sslsocketfactory ؛ استيراد javax.net.ssl.trustmanager ؛ استيراد net.sf.json.jsonobject ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ / ** * فئة أدوات الواجهة العامة للمنصة العامة * * Author liUyq * date 2013-08-09 */ class public weixinutil {private static logger log = loggerfactory.getLogger (weixinutil.class) ؛ / *** بدء طلب https واحصل على النتيجة** param request request عنوان طلب* param requestmethod method (get ، post)* param outputstr data* @regurn jsonoBject jsonobject = null ؛ StringBuffer Buffer = new StringBuffer () ؛ حاول {// إنشاء كائن sslContext وقم بتهيئة TrustManager [] tm = {new Myx509TrustManager ()} ؛ sslContext sslContext = sslContext.getInstance ("ssl" ، "sunjsse") ؛ sslContext.init (null ، tm ، new java.security.securerandom ()) ؛ // احصل على كائن SSLSocketFactory من كائن SSLContext أعلاه sslsocketfactory ssf = sslContext.getSocketFactory () ؛ url url = url new url (requesturl) ؛ httpsurlConnection httpurlconn = (httpsurlConnection) url.openconnection () ؛ httpurlconn.setsslsocketfactory (SSF) ؛ httpurlconn.setDooutput (صواب) ؛ httpurlconn.setDoInput (true) ؛ httpurlconn.setusecaches (false) ؛ // set method method (get/post) httpurlconn.setRequestMethod (requestMethod) ؛ if ("get" .equalsignorecase (requestMethod)) httpurlconn.connect () ؛ // عندما تكون هناك بيانات يجب تقديمها إذا (null! = outputStr) {outputStream outputStream = httpurlconn.getOutputStream () ؛ // انتبه إلى تنسيق الترميز لمنع OutderStream.write الصيني (OutderStstr.getBytes ("UTF-8")) ؛ outputStream.Close () ؛ } // قم بتحويل دفق الإدخال الذي تم إرجاعه إلى inputStream inputStream = httpurlconn.getInputStream () ؛ inputStreamReader inputStreamReader = جديد inputStreamReader (inputStream ، "UTF-8") ؛ BufferredReader BufferedReader = جديد BufferEdReader (inputStreamReader) ؛ سلسلة str = null ؛ بينما ((str = bufferedReader.ReadLine ())! = null) {buffer.append (str) ؛ } bufferedReader.Close () ؛ inputStreamReader.Close () ؛ // إصدار Resource InportStream.close () ؛ inputStream = null ؛ httpurlconn.disconnect () ؛ jsonobject = jsonobject.fromObject (buffer.toString ()) ؛ } catch (connectexception ce) {log.error ("weixin server connection timed Out.") ؛ } catch (استثناء e) {log.error ("خطأ في طلب https: {}" ، e) ؛ } إرجاع jsonobject ؛ }} 4. تغليف فئة كيان القائمة
1: تصنيف الأزرار
عادةً ما نعتبر عناصر القائمة المخصصة كأزرار ، ويتم تقسيم أنواع الأزرار إلى نقرة (انقر فوق الحدث) وعرض (زيارة صفحات الويب).
أزرار نوع النقر لها ثلاث سمات: اكتب ، اسم ومفتاح ، في حين أن أزرار نوع العرض لها ثلاث سمات: الكتابة والاسم وعنوان
2: أولاً ، بعد استدعاء واجهة بيانات الوصول ، سيقوم خادم WeChat بإرجاع البيانات بتنسيق JSON: {"Access_Token": "Access_Token" ، "Expires_in": 7200}. نحن نغلفه ككائن AccessToken. يحتوي الكائن على سمتين: الرمز المميز و Expiresin ، الرمز كما يلي:
حزمة org.liufeng.weixin.pojo ؛ / ** * بيانات اعتماد واجهة WeChat Universal * * Author liufeng * date 2013-08-08 */ class public AccessToken {// the the token private thin ؛ // وقت صحة أوراق الاعتماد ، الوحدة: ثواني Private Ent Expiresin ؛ السلسلة العامة getToken () {return token ؛ } public void settoken (string token) {this.token = token ؛ } public int getExpiresin () {return Expiresin ؛ } public void setExpiresin (int Expiresin) {this.expiresin = Expiresin ؛ }} التالي هو تغليف بنية القائمة. نظرًا لأننا نستخدم البرمجة الموجهة للكائنات ، يجب تحويل بيانات قائمة تنسيق JSON النهائي مباشرة من الكائن ، بدلاً من تهجئة الكثير من بيانات JSON في رمز البرنامج. يعتمد تغليف بنية القائمة على بنية قائمة تنسيق JSON الواردة في وثيقة API منصة عامة ، كما هو موضح أدناه:
مثال على طلب النقر والعرض
{"زر": [{"type": "انقر" ، "الاسم": "أغنية اليوم" ، "المفتاح": "v1001_today_music"} ، {"name": "menu" ، "sub_button": [{"type" ، "اكتب": "عرض" ، "اسم": "فيديو" ، "url": "http://v.qq.com/"} ، {"type": 3: بنية قائمة التغليف
يحتاج كل كائن زر إلى سمة اسم شائعة ، لذلك يجب تحديد فئة قاعدة كائن الزر ، وتحتاج جميع كائنات الأزرار إلى ورث هذه الفئة. رمز الفئة الأساسية كما يلي:
حزمة org.liufeng.weixin.pojo ؛ / ** * الفئة الأساسية للزر * * Author liufeng * date 2013-08-08 */ زر الفئة العامة {اسم السلسلة الخاصة ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }} التالي هو تغليف عنصر القائمة الفرعية. يتم تعريف القائمة الفرعية هنا على النحو التالي: قد يكون عنصر القائمة بدون قائمة فرعية عنصر قائمة ثانوية ، أو قائمة أساسية لا تحتوي على قائمة ثانوية. يجب أن يحتوي هذا النوع من عنصر القائمة الفرعية على ثلاث سمات: النوع والاسم والمفتاح. الرمز المغلف كما يلي:
حزمة org.liufeng.weixin.pojo ؛ / ** * زر عادي (subbutton) * * Author liufeng * date 2013-08-08 */ commonbutton public commonbutton يمتد الزر {نوع السلسلة الخاصة ؛ مفتاح السلسلة الخاص ؛ السلسلة العامة gettype () {نوع الإرجاع ؛ } public void setType (نوع السلسلة) {this.type = type ؛ } السلسلة العامة getKey () {return Key ؛ } public void setKey (مفتاح سلسلة) {this.key = key ؛ }} تعريف عنصر القائمة الأصل: قائمة من المستوى الأول تحتوي على عناصر قائمة ثانوية. يحتوي هذا النوع من عناصر القائمة على خصائصين: الاسم و sub_button ، و sub_button عبارة عن مجموعة من عناصر القوائم الفرعية. رمز التغليف لعنصر القائمة الأصل هو كما يلي:
حزمة org.liufeng.weixin.pojo ؛ / ** * زر معقد (زر الوالدين) * * Author liufeng * date 2013-08-08 */ Complexbutton العام يمتد زر {private button [] sub_button ؛ زر عام [] getub_button () {return sub_button ؛ } public void setsub_button (button [] sub_button) {this.sub_button = sub_button ؛ }} تغليف القائمة بأكملها. يحتوي كائن القائمة على عناصر قائمة متعددة (على الأكثر ، يمكن أن يكون هناك 3). يمكن أن تكون عناصر القائمة هذه عناصر القائمة الفرعية (قائمة المستوى الأول بدون قوائم ثانوية) أو عناصر القائمة الأصل (عناصر القائمة التي تحتوي على قوائم ثانوية)
حزمة org.liufeng.weixin.pojo ؛ / ** * قائمة * * Author liufeng * date 2013-08-08 */ قائمة الفئة العامة {زر خاص [] زر عام [] getButton () {return button ؛ } public void setButton (button [] button) {this.button = button ؛ }}وبهذه الطريقة ، نكممل تغليف فئة كيان القائمة.
كيفية الحصول على اعتماد Access_Token
استمر في إضافة الكود التالي إلى فئة weixinutil.java من طريقة الطلب العالمي السابق للحصول على بيانات اعتماد وصول الواجهة:
// احصل على عنوان واجهة Access_Token (الحصول على) إلى 200 مرة/يوم/اليوم العام الثابتة النهائي access_token_url = "https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_credential&appid=appid&secret=appscret" ؛ / ** * احصل على Access_token * * param appid creditive * param appsecret Key * @return */ public static accessToken getAccessToken (سلسلة appid ، string appsecret) {AccessToken AccessToken = null ؛ requesturl = access_token_url.replace ("appid" ، appid) .replace ("AppSecret" ، AppSecret) ؛ jsonobject jsonobject = httprequest (requesturl ، "get" ، null) ؛ // إذا كان الطلب ناجحًا إذا (null! = jsonoBject) {try {accessToken = new AccessToken () ؛ AccessToken.settoken (jsonobject.getString ("access_token")) ؛ AccessToken.setExpiresin (jsonobject.getint ("Expires_in")) ؛ } catch (jsonexception e) {AccessToken = null ؛ // فشل في الحصول على الرمز المميز log.error ("فشل في الحصول على رمز errcode: {} errmsg: {}" ، jsonobject.getint ("errcode") ، jsonobject.getString ("errmsg")) ؛ }} return AccessToken ؛ } كيفية إنشاء قائمة مخصصة
استمر في إضافة الكود التالي إلى فئة Weixinutil.java من طريقة الطلب العالمي السابق لإنشاء قائمة مخصصة:
// إنشاء القائمة (post) يقتصر على 100 مرة/اليوم Static String Menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create؟access_token=access_token" ؛ / *** إنشاء قائمة** @param قائمة قائمة القائمة مثال* param accessToken Access_token* return 0 تعني النجاح ، تشير القيم الأخرى إلى الفشل*/ static int static int static (قائمة القائمة ، string accessToken) {int result = 0 ؛ // قم بتجميع عنوان URL الخاص بسلسلة القائمة إنشاء url = menu_create_url.replace ("Access_Token" ، AccessToken) ؛ // تحويل كائن القائمة إلى json string string jsonmenu = jsonobject.fromObject (menu) .toString () ؛ // اتصل بالواجهة لإنشاء قائمة JSonObject JSonObject = httprequest (url ، "post" ، jsonmenu) ؛ if (null! = jsonobject) {if (0! = jsonobject.getInt ("errcode")) {result = jsonobject.getInt ("errcode") ؛ log.error ("Create Menu Errcode: {} errmsg: {}" ، jsonobject.getint ("errcode") ، jsonobject.getString ("errmsg")) ؛ }} نتيجة الإرجاع ؛ } استدعاء الأساليب المغلفة لإنشاء قوائم مخصصة
حزمة org.liufeng.weixin.main ؛ استيراد org.liufeng.weixin.pojo.accesstoken ؛ استيراد org.liufeng.weixin.pojo.button ؛ استيراد org.liufeng.weixin.pojo.commonbutton ؛ استيراد org.liufeng.weixin.pojo.complexbutton ؛ استيراد org.liufeng.weixin.pojo.menu ؛ استيراد org.liufeng.weixin.util.weixinutil ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ / ** * فئة مدير القائمة * * Author liufeng * date 2013-08-08 */ public class menumanager {private static logger log = loggerfactory.getLogger (menumanager.class) ؛ الفراغ الثابت العام (سلسلة [] args) {// مستخدم جهة خارجية سلسلة اعتماد فريدة من نوعها appid = "00000000000000000" ؛ . // اتصل بالواجهة للحصول على Access_Token AccessToken على = weixinutil.getAccessToken (AppId ، AppSecret) ؛ if (null! = at) {// اتصل بالواجهة لإنشاء قائمة int int = weixinutil.createMenu (getMenu () ، at.getToken ()) ؛ // تحديد نتيجة إنشاء القائمة إذا (0 == نتيجة) log.info ("نجح إنشاء القائمة!") ؛ else log.info ("فشل إنشاء القائمة ، رمز الخطأ:" + نتيجة) ؛ }} / ** * تجميع بيانات القائمة * * return * / القائمة الثابتة الخاصة getMenu () {commonButton btn11 = new CommonButton () ؛ btn11.setName ("توقعات الطقس") ؛ btn11.settype ("انقر") ؛ btn11.setKey ("11") ؛ CommonButton BTN12 = New CommonButton () ؛ BTN12.SetName ("Bus Query") ؛ btn12.settype ("انقر") ؛ BTN12.SetKey ("12") ؛ CommonButton BTN13 = New CommonButton () ؛ BTN13.SetName ("البحث المحيطي") ؛ btn13.settype ("انقر") ؛ BTN13.SetKey ("13") ؛ CommonButton BTN14 = New CommonButton () ؛ BTN14.SetName ("اليوم في التاريخ") ؛ btn14.settype ("انقر") ؛ BTN14.SetKey ("14") ؛ CommonButton BTN21 = New CommonButton () ؛ btn21.setName ("أغنية ON DEPORT") ؛ btn21.settype ("انقر") ؛ BTN21.SetKey ("21") ؛ CommonButton BTN22 = New CommonButton () ؛ BTN22.SetName ("اللعبة الكلاسيكية") ؛ btn22.settype ("انقر") ؛ BTN22.SetKey ("22") ؛ CommonButton BTN23 = New CommonButton () ؛ BTN23.SetName ("راديو جميل") ؛ btn23.settype ("انقر") ؛ BTN23.SetKey ("23") ؛ CommonButton BTN24 = New CommonButton () ؛ BTN24.SetName ("التعرف على الوجه") ؛ BTN24.SetType ("Click") ؛ BTN24.SetKey ("24") ؛ CommonButton BTN25 = New CommonButton () ؛ BTN25.SetName ("الدردشة") ؛ btn25.settype ("انقر") ؛ BTN25.SetKey ("25") ؛ CommonButton BTN31 = New CommonButton () ؛ BTN31.SetName ("Q Friends Circle") ؛ btn31.settype ("انقر") ؛ btn31.setKey ("31") ؛ CommonButton BTN32 = New CommonButton () ؛ BTN32.SetName ("تصنيف الفيلم") ؛ btn32.settype ("انقر") ؛ BTN32.SetKey ("32") ؛ CommonButton BTN33 = New CommonButton () ؛ BTN33.SetName ("نكتة روح الدعابة") ؛ btn33.settype ("انقر") ؛ BTN33.SetKey ("33") ؛ CompensButton mainbtn1 = New CompensButton () ؛ mainbtn1.setName ("مساعد الحياة") ؛ mainbtn1.setsub_button (New CommonButton [] {btn11 ، btn12 ، btn13 ، btn14}) ؛ CompensButton mainbtn2 = New CompensButton () ؛ mainbtn2.setName ("المحاولة المحظوظة") ؛ MainBtn2.SetSub_button (New CommonButton [] {Btn21 ، Btn22 ، Btn23 ، Btn24 ، Btn25}) ؛ CompensButton mainbtn3 = New CompensButton () ؛ MainBtn3.setName ("المزيد من الخبرة") ؛ mainbtn3.setsub_button (New CommonButton [] {BTN31 ، BTN32 ، BTN33}) ؛ /*** هذا هو بنية القائمة الحالية للحساب الرسمي XiaoQRobot. تحتوي كل قائمة من المستوى الأول على عنصر قائمة من المستوى الثاني * * إذا لم يكن هناك قائمة من المستوى الثاني ضمن قائمة معينة من المستوى الأول ، كيف ينبغي تعريف القائمة؟ * على سبيل المثال ، عنصر القائمة من المستوى الثالث ليس "تجربة أكثر" ، ولكنه "فكور نكتة" مباشرة ، ثم يجب تعريف القائمة على النحو التالي: * menu.setbutton (زر جديد [] {mainbtn1 ، mainbtn2 ، btn33}) ؛ */ قائمة القائمة = قائمة جديدة () ؛ menu.setButton (زر جديد [] {mainbtn1 ، mainbtn2 ، mainbtn3}) ؛ قائمة العودة ؛ }}ملاحظة: عند تشغيل الرمز أعلاه ، تحتاج إلى استبدال التطبيقات والتطبيقات بحسابك الرسمي.
الرد على الحدث انقر فوق القائمة
حزمة org.liufeng.course.service ؛ استيراد java.util.date ؛ استيراد java.util.map ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد org.liufeng.course.message.resp.textMessage ؛ استيراد org.liufeng.course.util.messageutil ؛ / ** * فئة الخدمة الأساسية * * Author liufeng * date 2013-05-20 */ فئة عامة corevice {/ ** * طلبات العملية من WeChat * * param request * regurn */ public static string processRequest (httpservletrequest request) {string spensage = null ؛ جرب {// محتوى الرسالة النصية التي تم إرجاعها بشكل افتراضي repcontent = "طلب معالجة الاستثناء ، يرجى المحاولة!" ؛ // xml request request map <string ، string> requestMap = messageutil.parsexml (request) ؛ // Sender Account (Open_id) String fromuserName = requestMap.get ("fromuserName") ؛ // سلسلة الحساب العامة touserName = requestMap.get ("touserName") ؛ // نوع الرسالة سلسلة msgtype = requestMap.get ("msgtype") ؛ // الرد على رسالة النص textMessage TextMessage = new TextMessage () ؛ textMessage.SettouserName (fromusername) ؛ textMessage.setFromuserName (touserName) ؛ textMessage.setCreateTime (تاريخ جديد (). getTime ()) ؛ textMessage.setMsgType (messageutil.resp_message_type_text) ؛ textMessage.setfuncflag (0) ؛ // رسالة نصية if (msgtype.equals (messageutil.req_message_type_text)) {respcontent = "أنت ترسل رسالة نصية!" ؛ } // رسالة صورة أخرى إذا (msgtype.equals (messageutil.req_message_type_image)) {respcontent = "أنت ترسل رسالة صورة!" ؛ } // رسالة الموقع الجغرافي آخر إذا (msgtype.equals (messageutil.req_message_type_location)) {respcontent = "أنت ترسل رسالة موقع جغرافي!" ؛ } // رسالة ارتباط أخرى if (msgtype.equals (messageutil.req_message_type_link)) {respcontent = "أنت ترسل رسالة ارتباط!" ؛ } // رسالة صوتية أخرى إذا (msgtype.equals (messageutil.req_message_type_voice)) {respcontent = "أنت ترسل رسالة صوتية!" ؛ } // Push event else if (msgtype.equals (messageutil.req_message_type_event)) {// نوع الحدث string eventtype = requestMap.get ("event") ؛ // اشترك إذا (EventType.equals (messageutil.event_type_subscribe)) {respcontent = "شكرًا لك على اهتمامك!" ؛ } // إلغاء الاشتراك آخر إذا (EventType.equals (messageutil.event_type_unsubscribe)) {// todo بعد إلغاء الاشتراك ، لا يمكن للمستخدم استلام الرسالة المرسلة بواسطة الحساب الرسمي ، لذلك لا توجد حاجة للرد على مفتاح الحدث} تم تحديده عند إنشاء سلسلة القائمة المخصصة eventKey = requestMap.get ("EventKey") ؛ if (eventKey.equals ("11")) {respcontent = "يتم النقر على عناصر القائمة المتوقعة الطقس!" ؛ } if if (eventKey.equals ("12")) {respcontent = "تم النقر على عنصر قائمة استعلام الحافلة!" ؛ } if if (eventKey.equals ("13")) {respcontent = "يتم النقر على عنصر قائمة البحث المحيطي!" ؛ } if if (eventKey.equals ("14")) {respcontent = "تم النقر على عنصر القائمة في التاريخ!" ؛ } if if (eventKey.equals ("21")) {respcontent = "تم النقر على عنصر قائمة الأغنية على الطلب!" ؛ } if if (eventKey.equals ("22")) {respcontent = "تم النقر على عنصر قائمة اللعبة الكلاسيكية!" ؛ } if if (eventKey.equals ("23")) {respcontent = "تم النقر على عنصر قائمة راديو الجمال!" ؛ } if if (eventKey.equals ("24")) {respcontent = "تم النقر على عنصر قائمة التعرف على الوجه!" ؛ } آخر إذا (EventKey.equals ("25")) {respcontent = "تم النقر على عنصر قائمة الدردشة!" ؛ } if if (eventKey.equals ("31")) {respcontent = "تم النقر على عنصر قائمة Q Circle!" ؛ } if if (eventKey.equals ("32")) {respcontent = "تم النقر على عنصر قائمة تصنيف الفيلم!" ؛ } if if (eventKey.equals ("33")) {respcontent = "تم النقر على عنصر قائمة الفكاهة النكتة!" ؛ }}} textMessage.setContent (respcontent) ؛ respmessage = messageutil.textMessageToxMl (textMessage) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إرجاع respmessage ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.