كيفية الحصول على بيانات اعتماد استدعاء الواجهة وحفظها على WeChat ، سأقدمها لك أدناه
1. التفسير
* يرجى الرجوع إلى أول المادتين للحصول على تعليمات مفصلة.
*هذه المقالة مقسمة إلى ثلاثة أجزاء:
دور واجهة استدعاء اعتماد Access_token وشرح كيفية الحصول
كيفية تنفيذ تنفيذ "خادم التحكم المركزي" المذكور في مستند WeChat لحفظ Access_Token
* في نهاية هذه المقالة ، سيتم تقديم جميع رموز مصدر العرض التوضيحي بما في ذلك المقالات الثلاثة الأولى في هذه المقالة.
لماذا تحتاج إلى الحصول على واجهات اعتماد استدعاء واجهة Access_Token وحفظها
• ابدأ التطوير - احصل على بيانات اعتماد استدعاء الواجهة
◦Document عنوان:
• يقدم وثيقة الموقع الرسمي التفسير التالي:
◦Access_Token هي التذكرة الفريدة عالميًا للحساب الرسمي. مطلوب access_token عند الاتصال بكل واجهة من الحساب الرسمي. يحتاج المطورون إلى حفظه بشكل صحيح. يجب أن يحتفظ تخزين Access_Token بحجم 512 مساحة على الأقل. تكون فترة صحة Access_Token حاليًا ساعتين وتحتاج إلى تحديثها بانتظام. سوف يتسبب الاستحواذ المتكرر في الوصول إلى Access_Token الذي حصلت عليه في المرة الأخيرة لتكون غير صالحة.
•يفهم:
◦ يمكننا ببساطة قراءة المستند والعثور على أن العديد من الوظائف المتقدمة ، مثل: القائمة المخصصة ، إدارة المواد ، إدارة المستخدم ، إدارة الحساب وغيرها من الوظائف المتقدمة ، لها المعلمة "؟ Access_Token = Token" في روابط الطلبات. هذه معلمة استدعاء عالمية. تحتاج الواجهة الخلفية WeChat إلى تحديد الهوية بناءً على هذه المعلمة لضمان أمان حساب WeChat الرسمي الخاص بنا.
used طلب لمنع استثناء تحميل خادم WeChat بسبب أخطاء البرنامج في الحساب الرسمي ، افتراضيًا ، لا يمكن أن تتجاوز واجهة المكالمات لكل حساب رسمي حد معين. هنا ، يقتصر WeChat على 2000 مرة في اليوم. لذلك ، إذا أردنا الاتصال بهذه المعلمة بشكل متكرر ، فنحن بحاجة إلى حفظها يدويًا بواسطة المطور ، وكل Access_Token صالح لمدة ساعتين.
احصل
• يقدم وثيقة الموقع الرسمي التفسير التالي:
erques وصف طلب الاتصال الواجهة
طريقة طلب HTTP: احصل
https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_credential&appid=appid&secret=appsecret
■ العودة إلى الوصف
في ظل الظروف العادية ، ستعيد WeChat حزمة JSON التالية إلى الحساب الرسمي:
{"Access_Token": "Access_Token" ، "Expires_in": 7200}
عند حدوث خطأ ، ستعيد WeChat رموز الخطأ والمعلومات الأخرى. مثال حزمة JSON كما يلي (هذا المثال هو خطأ في Appid غير صالح):
{"errcode": 40013 ، "errmsg": "invalid appid"}
•يفهم:
erdice طلب ، يمكن تنفيذ هذه الطريقة محليًا مباشرة. لأنه مجرد طلب عادي ، على غرار الوصول إلى عنوان URL. لذلك ، لا تحتاج إلى تحميل هذا الجزء من الرمز إلى الخادم للعمل مباشرة.
protecol هو بروتوكول طلب HTTP هو طلب الحصول ، مما يعني أننا بحاجة إلى الحصول على دفق الإرجاع من خلال طلب الحصول على ، ودفق الإرجاع في شكل JSON. عند الاتصال ، نحتاج إلى حمل ثلاث معلمات: Grant_type و AppId و Secret. من بينها ، Appid و Secret هما المعلمات الرئيسية لحساب WeChat الرسمي لدينا ، والتي تم شرحها في المقالة السابقة. تنقسم نتيجة الإرجاع إلى نوعين: نتائج صحيحة وخاطئة. 【بايدو: JSON】
◦ في حقيقة ، يمكننا إدخال المثال الذي قدمه المستند مباشرة في شريط العناوين: https://api.weixin.qq.com/cgi-bin/token؟ grant_type = client_credential & appid = appid & secret = appsecret ، سنرى رسالة مثل هذه: "{" errcode ": 40013 ،" errmsg ":" تلميح غير صالح للعلم:
◦ عندما نستبدل المعلمتين أعلاه مع أرقام الاختبار الخاصة بنا AppID و AppSecret ، سنرى الرسالة التالية: "{" Access_token ":" XRLLR3FNF ... BADAMIO "،" Expires_in ": 7200}" ، مما يعني الاستحواذ الناجح.
◦ لا نحصل على دفق الإرجاع من خلال رمز Java ونحصل على Access_Token.
•ينجز
يتيح Final Static Final Max_time = 7200*1000 ؛ // WeChat الحد الأقصى لوقت الصلاحية access_token (MS) TART Final String Static Private = "Weixinapitest" ؛ // TagPrivat "6DA7676 *** F0A9F15FBF06027856BB" ؛ // المفتاح السري/**توضح حالة الاختبار هذه كيفية الحصول على Access_Token. * Access_Token هي التذكرة الفريدة عالميًا للحساب الرسمي. مطلوب access_token عند الاتصال بكل واجهة من الحساب الرسمي. */@testpublic void getaccess_token () يلقي ioException {// stitch رابط httpsurl المطلوب بواسطة urlstring urlstring = "https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_crededald=" // إنشاء url url requrl = url جديد (urlstring) ؛ // احصل على الرابط httpsurlConnection httpsconn = (httpsurlConnection) requrl .OpenConnection () ؛ // احصل على دفق الإدخال للاتصال لقراءة محتوى الاستجابة inputStreamReader ISR = جديد inputStreamReader (httpsconn.getInputStream ()) ؛ // اقرأ محتوى استجابة الخادم وعرض char [] char = char new [1024] ؛ سلسلة reslut = "" ؛ int len ؛ بينما ((len = isr.read (chars))! = -1) {reslut += new string (chars ، 0 ، len) ؛ } isr.close () ؛ / * * تحويل JSON إلى Javabean. تم تقديم جرة جهة خارجية: GSON */ GSON GSON = New GSON () ؛ // تحويل JSON التي تم الحصول عليها إلى حبة في Java // ملاحظة: Access_Token Access_Token هي جافابان تم إنشاؤها بنفسها. Access_token access_token = gson.fromjson (reslut ، new Access_Token (). getClass ()) ؛ if (access_token.getaccess_token ()! = null) {system.out.println ("The Access_token التي تم الحصول عليها هي:" + access_token.getaccess_token ()) ؛ System.out.println ("الوقت الصحيح لل Access_token هو:" + access_token.getexpires_in () + "s") ؛ } آخر {system.out.println (Tag + "فشل في الحصول على Access_Token ، يرجى التحقق") ؛ }} حفظ واجهة استدعاء اعتماد Access_Token
•أفكار
قم بتخزين Access_Token الذي تم الحصول عليه والوقت الحالي في الملف. عند الاستخراج ، حدد الفرق الزمني بين الوقت الحالي والوقت المسجل في التخزين. إذا كان أكبر من max_time ، فأعد ربحه ، واستبدل المحتوى الذي تم الوصول إليه في الملف. إذا كان أقل من max_time ، احصل عليه مباشرة.
•ينجز
/ * * تنفذ هذه الطريقة الحصول على Access_Token ، وإنقاذ وحفظ ساعتين فقط من Access_Token. إذا تجاوز ساعتين ، فأعد تحريكه ؛ إذا لم يتجاوز ساعتين ، احصل عليه مباشرة. تعتمد هذه الطريقة على *: سلسلة ثابتة عامة getAccessToken () ؛ * * IDEA: قم بتخزين Access_Token الذي تم الحصول عليه والوقت الحالي في الملف ، * عند الاستخراج ، حدد الفرق الزمني بين الوقت الحالي والوقت المسجل في التخزين. إذا كان أكبر من max_time ، فقم بإعادة تشغيله ، وقم بتخزين الوصول الذي تم الحصول عليه إلى الملف لاستبدال المحتوى الأصلي*، وإذا كان أقل من max_time ، فاحصل عليه مباشرة. */ test public void getSavedAccess_Token () يلقي ioException {gson gson = new gson () ؛ String maccess_token = null ؛ // access_token يجب الحصول عليها ؛ ملف الملف = ملف جديد ("temp_access_token.temp") ؛ // الموقع الذي يتم فيه حفظ Access_Token // إذا لم يكن الملف موجودًا ، فقم بإنشاء if (! file.exists ()) file.createNewFile () ؛ // إذا كان حجم الملف يساوي 0 ، فهذا يعني أنه يتم استخدامه لأول مرة ، وأدخل Access_Token if (file.length () == 0) {maccess_token = getAccessToken () ؛ FileOutputStream fos = new FileOutputStream (ملف ، خطأ) ؛ // append access_token في = new Access_Token () ؛ at.setAccess_Token (maccess_token) ؛ at.setExpires_in (System.CurrentTimeMillis () + "") ؛ String json = gson.tojson (at) ؛ fos.write ((json) .getBytes ()) ؛ fos.close () ؛ } آخر {// قراءة محتوى الملف fileInputStream fis = جديد fileInputStream (ملف) ؛ بايت [] ب = بايت جديد [2048] ؛ int len = fis.read (b) ؛ String MJSonAccess_Token = سلسلة جديدة (B ، 0 ، LEN) ؛ // اقرأ محتوى الملف Access_Token Access_Token = gson.fromjson (MjsonAccess_Token ، New Access_Token (). getClass ()) ؛ if (access_token.getExpires_in ()! = null) {long savetime = long.parselong (access_token.getexpires_in ()) ؛ long nowtime = system.currentTimeMillis () ؛ REMIANTIME الطويل = NowTime - Savetime ؛ // system.out.println (tag + "time recoD:" + remiantime) ؛ if (remiantime <max_time) {access_token at = gson.fromson (mjsonaccess_token ، new access_token (). getClass ()) ؛ maccess_token = at.getaccess_token () ؛ } آخر {maccess_token = getAccessToken () ؛ FileOutputStream fos = new FileOutputStream (ملف ، خطأ) ؛ // append access_token في = new Access_Token () ؛ at.setAccess_Token (maccess_token) ؛ at.setExpires_in (System.CurrentTimeMillis () + "") ؛ String json = gson.tojson (at) ؛ fos.write ((json) .getBytes ()) ؛ fos.close () ؛ }}} system.out.println ("access_token التي تم الحصول عليها هي:" + maccess_token) ؛ } / * * احصل على WeChat Server AccessToken. هذا الجزء يتفق مع getAccess_Token () ، لا تتم إضافة أي تعليقات*/سلسلة ثابتة عامة getAccessToken () {String urlString = "https://api.weixin.qq.com/cgi-bin/token؟grant_type=client_credential=appid=" + appid + " سلسلة reslut = فارغة ؛ حاول {url requrl = url new (urlstring) ؛ httpsurlConnection httpsconn = (httpsurlConnection) requrl .OpenConnection () ؛ inputStreamReader ISR = جديد inputStreamReader (httpsconn.getInputStream ()) ؛ char [] chars = new Char [1024] ؛ reslut = "" ؛ int len ؛ بينما ((len = isr.read (chars))! = -1) {reslut += new string (chars ، 0 ، len) ؛ } isr.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } gson gson = new gson () ؛ Access_token access_token = gson.fromjson (reslut ، new Access_Token (). getClass ()) ؛ if (access_token.getaccess_token ()! = null) {return access_token.getaccess_token () ؛ } آخر {return null ؛ }} توضح المقالات الثلاثة الأولى الكود المصدر: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.