كيفية الاتصال بالخادم باستخدام WeChat Development API ، دعنا نقدمها إليك أدناه
1. التفسير
* تم تطوير هذا المثال وإظهاره وفقًا لوثيقة تطوير WeChat: http://mp.weixin.qq.com/wiki/home/index.html أحدث إصدار (4/3/2016 5:34:36 PM).
* منصة التحرير: myeclipse10.7+win32+jdk1.7+tomcat7.0
* الخادم: Alibaba Cloud Windows Server 2008 64bits
* متطلبات النظام الأساسي: طريقة شرح استخدام Servlet ، متطلبات النظام الأساسي: J2EE6.0+، JDK6.0+، Tomcat7.0+
* التوضيح يركز أكثر على تحليل API.
* من أجل تعليمات الاختبار ، تكون كل حالة اختبار مستقلة ولا تعتمد على طرق أخرى. لا تفكر في العبوة كثيرًا.
* يتم تنفيذ العرض التوضيحي قدر الإمكان وفقًا لمتطلبات API. الغرض: فهم كيفية استخدام المستند وتحقيق تأثير التعلم من مثال واحد وتطبيقه على الآخرين.
* متطلبات المعرفة: مؤسسة جافا الصلبة ، فهم معرفة اتصالات شبكة HTTP ، والفهم الكافي لـ Javaweb ، تحليل JSON
* الوقت الحالي: 4/3/2016 5:32:57 مساءً ، تسود هذه المرة.
2. الوثيقة الأصلية (الملخص)
عنوان المستند:
للوصول إلى تطوير منصة WeChat العامة ، يحتاج المطورون إلى اتباع الخطوات التالية:
1. املأ تكوين الخادم
2. تحقق من صحة عنوان الخادم
3. تنفيذ منطق الأعمال بناءً على مستندات الواجهة
3. فهم الوثيقة
تحقق من صحة عنوان الخادم
1. يتم تقديم API مثل هذا:
بعد أن يقدم المطور المعلومات ، سيرسل خادم WeChat طلب الحصول على عنوان URL لعنوان الخادم المملوء. يحمل طلب الحصول على أربعة معلمات: التوقيع ، الطابع الزمني ، nonce ، echosttr
يتحقق المطور من الطلب عن طريق التحقق من التوقيع (هناك طريقة التحقق أدناه).
إذا أكدت أن طلب GET يأتي من خادم WeChat ، فيرجى إرجاع محتوى معلمة EchoStr كما هو ، ويصبح الوصول مسبقًا ويصبح مطورًا بنجاح. خلاف ذلك ، فشل الوصول.
عملية التشفير/الفحص هي كما يلي:
1) فرز ترتيب القاموس من الرمز المميز ، الطابع الزمني ، و nonce
2) لصق 3 سلاسل المعلمة في سلسلة واحدة لتشفير SHA1
3) يمكن مقارنة الأوتار التي حصل عليها المطور بالتوقيع لتحديد الطلب الذي نشأ من WeChat.
2. فهم
وهذا يعني أن الطلب موجود في وضع "GET" ، وسيقوم الوصول إلى الطلب بإرجاع أربعة معلمات: التوقيع ، الطابع الزمني ، nonce ، echosttr.
نحن بحاجة إلى قبول هذه المعلمات ثم معالجتها. إذا نجح التحقق ، يتم إرجاع "Echosttr" المستلم ، وإلا فإن التحقق فشل.
تتمثل طريقة التحقق في فرز رمز الرمز المميز الثلاثة المقبول ، والطابع الزمني ، و NONCE ، ثم تشفير SHA1 ، ومقارنته أخيرًا بالتوقيع.
*يمكن مقارنة السلسلة المشفرة بالتوقيع. إذا كان ذلك متساويًا [قد لا يشرح API ذلك بوضوح شديد] ، فقم بإرجاع "Echosttr" والتحقق منه بنجاح.
3. إدراك
قم بإنشاء CoreServlet Servlet لتنفيذ httpservlet وقم بتحميل طريقة DOGE.
تحضير المعلمة
// حدد رمزًا عالميًا ، يقوم المطور بتعيينه بنفسه. يشرح API بهذه الطريقة: يمكن شغل الرمز المميز من قبل المطور في الإرادة ، // يستخدم كتوقيع الأجيال (سيتم مقارنة الرمز المميز مع الرمز المميز الموجود في عنوان URL للواجهة للتحقق من الأمن) token = "wgyscsf" ؛ سلسلة Timestamp = req.getParameter ("Timestamp") ؛ سلسلة nonce = req.getParameter ("nonce") ؛ سلسلة echosttr = req.getParameter ("echosttr") ؛العملية وفقا للخطوات الثلاث التي ذكرها واجهة برمجة التطبيقات
// الخطوة 1: فرز ترتيب القاموس من الرمز المميز ، الطابع الزمني ، سلسلة nonce [] parms = سلسلة جديدة [] {token ، timeStamp ، nonce} ؛ التشفير [Baidu: Java Sha1 Encryption] // لصق السلسلة parmsstring = "" ؛ // لاحظ أنه لا يمكن = فارغ هنا. لـ (int i = 0 ؛ i <parms.length ؛ i ++) {parmsstring+= parms [i] ؛} // sha1 charption string mparms = null ؛ // النتيجة بعد التشفير ... // هذا المكان هو تنفيذ charption sha1 ، لا يوجد رمز mprams = hexstring.tosring () ؛ // Get request يأتي من خادم WeChat ، يرجى إرجاع محتوى معلمة echosttr كما هو ، ويصبح الوصول سريان ويصبح مطورًا بنجاح ، وإلا فإن الوصول فشل. */// الخطوة 3: يحصل المطور على السلسلة المشفرة ويمكنه مقارنةها بالتوقيع لتحديد أن الطلب يأتي من الوصول الناجح لـ WeChat. System.out.println (tag + ":" + mparms + "--->" + signature) ؛ if (mparms.equals (signature)) {// system.out.println (tag + ":" + mparms + "---->" + signature) ؛ printWriter.write (echosttr) ؛} آخر {// فشل الوصول ، لا حاجة إلى الكتابة مرة أخرى // system.out.println (Tag + "Access FAIL") ؛}4. املأ تكوين الخادم
1) بما في ذلك تكوين خادم المحتوى هو بشكل أساسي واجهة الوصول إلى الخادم و WeChat التي نحتاج إلى تكوينها بعد أن نكتب التعليمات البرمجية الخاصة بنا للوصول إلى منصة تطوير WeChat.
2) عملية الخادم افتح tomcat للخادم ووضع الرمز المكتوب في ملف WebApps.
3) عملية منصة WeChat العامة
*تقدم بطلب للحصول على حساب اختبار WeChat (مسح مباشرة مع WeChat لتسجيل الدخول): http://mp.weixin.qq.com/debug/cgi-bin/sandbox؟t=sandbox/login
*افتح رقم اختبار النظام الأساسي لـ WeChat وتكوين معلومات تكوين الواجهة. التكوين كما يلي
عنوان URL: http: // ip/weixinapidemo/coreservlet
الرمز المميز: WGYSCSF
*سيتم تذكيره عند إرسال ، نجاح التكوين والفشل.
يمكن استخدام جميع رموز مصدر التشغيل في هذا الجزء مباشرة
package com.gist.servlet ؛ import java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.security.messagedigest ؛ import java.security.nosuchalgorithmexception ؛ import java.util.arrays ؛ import javax.servlet.servlexception ؛ javax.servlet.http.httpservlet ؛ import javax.servlet.http.httpletrequest ؛ import javax.servlet.http.httpservletrespons http://blog.csdn.net/wgyscsf </n> * فترة الكتابة 2016-4-3 4:34:05 PM */@webservlet ("/coreervlet). ] * يحمل طلب GET أربعة معلمات: التوقيع ، الطابع الزمني ، nonce ، echostr * يتحقق المطور من الطلب عن طريق التحقق من التوقيع (هناك طريقة التحقق أدناه). إذا أكدت أن طلب GET يأتي من خادم WeChat ، فيرجى إرجاع محتوى معلمة EchoStr كما هو ، *، الوصول إلى المفعول ويصبح مطورًا بنجاح ، وإلا يفشل الوصول. *. المتغيرات لتشكيل تسلسل. تتمثل الطريقة في تكوين تسلسل من صغير إلى كبير بالترتيب الأبجدي أو بترتيب أعداد صغيرة وكبيرة. */ override void void doget (httpservletrequest req ، httpservletresponse resp) يلقي servletexception ، ioException {// تعيين req.setcharacterencoding ("utf-8") ؛ Resp.SetContentType ("html/text ؛ charset = utf-8") ؛ Resp.SetchAracterEncoding ("UTF-8") ؛ // الحصول على دفق الإخراج printWriter printWriter = resp.getWriter () ؛ // حدد رمزًا عالميًا ، يقوم المطور بتعيينه بنفسه. يشرح API هذا: يمكن ملء الرمز المميز في الإرادة من قبل المطور ، // يستخدم كتوقيع الأجيال (سيتم مقارنة الرمز المميز مع الرمز المميز الموجود في عنوان URL للواجهة للتحقق من الأمن) token = "wgyscsf" ؛ // وفقًا لوصف API ، احصل على توقيع سلسلة المعلمات الأربعة أعلاه = req.getParameter ("التوقيع") ؛ سلسلة Timestamp = req.getParameter ("Timestamp") ؛ سلسلة nonce = req.getParameter ("nonce") ؛ سلسلة echosttr = req.getParameter ("echosttr") ؛ // // temp: طباعة مؤقتة ، شاهد حالة معلمة الإرجاع // system.out.println (tag + ": التوقيع:" + signature + "، timestamp:" // + timestamp + "، nonce:" + nonce + "، echoStr:" + echoStr) ؛ // الوصول وفقًا لـ "عملية التشفير/التحقق" التي ذكرها API. هناك ثلاث خطوات في Total // الخطوة 1: فرز ترتيب القاموس من الرمز المميز ، الطابع الزمني ، غير المعلمات غير المعلمات [] parms = سلسلة جديدة [] {token ، timestamp ، nonce} ؛ تشفير // لصق السلسلة parmsstring = "" ؛ // لاحظ أنه لا يمكن = فارغ هنا. لـ (int i = 0 ؛ i <parms.length ؛ i ++) {parmsstring+= parms [i] ؛ } // sha1 تشفير سلسلة mparms = null ؛ // النتيجة المشفرة messagedigest digest = null ؛ حاول {digest = java.security.messagedigest.getInstance ("sha") ؛ } catch (nosuchalgorithmexception e) {// todo catch catch e.printstacktrace () ؛ } digest.update (parmsstring.getBytes ()) ؛ byte messagedigest [] = digest.digest () ؛ // إنشاء hex string stringbuffer hexstring = new StringBuffer () ؛ // تحويل صفيف البايت إلى الرقم السداسي ل (int i = 0 ؛ i <messagedigest.length ؛ i ++) {String Shahex = Integer.ToHexString (messagedigest [i] & 0xff) ؛ if (shahex.length () <2) {hexstring.append (0) ؛ } hexstring.append (shahex) ؛ } mparms = HexString.toString () ؛ // نتيجة التشفير/ * * * * * متطلبات واجهة برمجة التطبيقات: إذا أكدت أن طلب GET هو من خادم WeChat ، فيرجى إرجاع محتوى معلمة echostr كما هو ، وسيأتم الوصول إلى تأثير وتصبح مطورًا بنجاح. خلاف ذلك ، سيفشل الوصول. */ // الخطوة 3: يحصل المطور على السلسلة المشفرة ويمكنه مقارنةها بالتوقيع لتحديد أن الطلب يأتي من الوصول الناجح لـ WeChat. system.out.println (tag + ":" + mparms + "--->" + signature) ؛ if (mparms.equals (signature)) {// system.out.println (tag + ":" + mparms + "---->" + signature) ؛ printWriter.write (echoStr) ؛ } آخر {// فشل الوصول ، لا حاجة للكتابة // system.out.println (العلامة + "فشل الوصول") ؛ }} Override void dopost (httpservletrequest req ، httpservletresponse resp) يلقي servleTexception ، ioException {doge (req ، resp) ؛ }}تم تقديم المقالة الأولى من Java WeChat Development API لك هنا. آمل أن تستمر في الانتباه إلى المحتوى المحدث في المستقبل. شكرًا لك!