วิธีรับและบันทึกข้อมูลรับรองการโทรอินเตอร์เฟสบน WeChat ฉันจะแนะนำให้คุณทราบด้านล่าง
1. คำอธิบาย
* โปรดดูบทความสองบทความแรกสำหรับคำแนะนำโดยละเอียด
*บทความนี้แบ่งออกเป็นสามส่วน:
บทบาทของการโทรเข้าอินเตอร์เฟส access_token และอธิบายวิธีการรับข้อมูลการโทรติดต่อข้อมูลรับรอง access_token
วิธีการใช้งานการใช้งาน "เซิร์ฟเวอร์ควบคุมกลาง" ที่กล่าวถึงในเอกสาร WeChat เพื่อบันทึก access_token
* ในตอนท้ายของบทความนี้รหัสแหล่งสาธิตทั้งหมดรวมถึงบทความสามบทความแรกในบทความนี้จะได้รับ
ทำไมคุณต้องได้รับและบันทึกข้อมูลรับรองการโทรแบบอินเทอร์เฟซ access_token
•เริ่มการพัฒนา - รับข้อมูลรับรองการโทรแบบอินเทอร์เฟซ
◦ที่อยู่ที่อยู่: http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
•เอกสารเว็บไซต์อย่างเป็นทางการให้คำอธิบายต่อไปนี้:
◦Access_Tokenเป็นตั๋วที่ไม่ซ้ำกันทั่วโลกของบัญชีอย่างเป็นทางการ access_token เป็นสิ่งจำเป็นเมื่อโทรแต่ละอินเทอร์เฟซของบัญชีอย่างเป็นทางการ นักพัฒนาจำเป็นต้องประหยัดอย่างถูกต้อง การจัดเก็บ Access_Token จะต้องรักษาพื้นที่อักขระอย่างน้อย 512 ระยะเวลาที่ถูกต้องของ ACCESS_TOKEN ปัจจุบัน 2 ชั่วโมงและจำเป็นต้องได้รับการรีเฟรชเป็นประจำ การได้มาซ้ำ ๆ จะทำให้ Access_token คุณได้รับครั้งสุดท้ายที่จะไม่ถูกต้อง
•เข้าใจ:
◦เราสามารถอ่านเอกสารและพบว่าฟังก์ชั่นขั้นสูงจำนวนมากเช่น: เมนูที่กำหนดเองการจัดการวัสดุการจัดการผู้ใช้การจัดการบัญชีและฟังก์ชั่นขั้นสูงอื่น ๆ มีพารามิเตอร์ "? access_token = โทเค็น" ในลิงค์สำหรับคำขอ นี่คือพารามิเตอร์การโทรทั่วโลก แบ็กเอนด์ WeChat จำเป็นต้องกำหนดตัวตนตามพารามิเตอร์นี้เพื่อให้แน่ใจว่าการรักษาความปลอดภัยของบัญชีอย่างเป็นทางการของ WeChat ของเรา
◦ในการสั่งซื้อเพื่อป้องกันข้อยกเว้นการโหลดเซิร์ฟเวอร์ WeChat ที่เกิดจากข้อผิดพลาดของโปรแกรมในบัญชีอย่างเป็นทางการโดยค่าเริ่มต้นอินเตอร์เฟสการโทรของแต่ละบัญชีอย่างเป็นทางการจะไม่เกินขีด จำกัด ที่แน่นอน ที่นี่ WeChat จำกัด วันละ 2,000 ครั้ง ดังนั้นหากเราต้องการเรียกพารามิเตอร์นี้บ่อยครั้งเราต้องบันทึกด้วยตนเองโดยนักพัฒนาและแต่ละ Access_token นั้นใช้ได้ 2 ชั่วโมง
รับการโทรติดต่อข้อมูลรับรอง access_token
•เอกสารเว็บไซต์อย่างเป็นทางการให้คำอธิบายต่อไปนี้:
คำอธิบายคำขอการโทร
วิธีการร้องขอ 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": "appid ไม่ถูกต้อง"}
•เข้าใจ:
emget คำขอวิธีนี้สามารถใช้งานได้โดยตรงในพื้นที่ เพราะมันเป็นเพียงคำขอ Get ปกติคล้ายกับการเข้าถึง URL ดังนั้นคุณไม่จำเป็นต้องอัปโหลดส่วนนี้ของรหัสไปยังเซิร์ฟเวอร์เพื่อทำงานโดยตรง
protocol คำขอ HTTP เป็นคำขอ GET ซึ่งหมายความว่าเราจำเป็นต้องได้รับสตรีมการส่งคืนผ่านคำขอ GET และสตรีมการส่งคืนอยู่ในรูปแบบของ JSON เมื่อโทรเราต้องพกพาพารามิเตอร์สามตัว: Grant_type, Appid และ Secret ในหมู่พวกเขา Appid และ Secret เป็นพารามิเตอร์สำคัญของบัญชีทางการ WeChat ของเราซึ่งได้รับการอธิบายในบทความก่อนหน้า ผลการส่งคืนแบ่งออกเป็นสองประเภท: ผลลัพธ์ที่ถูกต้องและผิด 【 Baidu: JSON 】
◦ในความเป็นจริงเราสามารถป้อนตัวอย่างโดยตรงจากเอกสารในแถบที่อยู่: https://api.weixin.qq.com/cgi-bin/token? grant_type = client_credential & appid = appid & secret = appsecret เราจะเห็นข้อความเช่นนี้: "{" errcode ": 40013," errmsg ":" คำใบ้ appid ไม่ถูกต้อง: [pqkl0120ic11] "}"
◦เมื่อเราแทนที่พารามิเตอร์สองตัวด้านบนด้วยหมายเลขทดสอบของเรา AppId และ AppSecret เราจะเห็นข้อความต่อไปนี้: "{" Access_Token ":" XRLLR3FNF ... Badamio "," Expires_in ": 7200}" ซึ่งหมายถึงการได้มาที่ประสบความสำเร็จ
◦เราได้รับสตรีมการส่งคืนผ่านรหัส Java และรับ access_token
•ทำให้สำเร็จ
Private Static Final Long Max_Time = 7200*1000; // WeChat อนุญาตให้ Access_Token สูงสุดเวลา (MS) สตริงสตริงสุดท้ายคงที่ส่วนตัว = "Weixinapitest"; // tagprivate สตริงสุดท้ายคงที่ appid = "WX889B **** "6DA7676 *** F0A9F15FBF06027856BB"; // รหัสลับ/***กรณีการทดสอบนี้แสดงให้เห็นถึงวิธีการรับ access_token * Access_Token เป็นตั๋วที่ไม่ซ้ำกันทั่วโลกของบัญชีอย่างเป็นทางการ access_token เป็นสิ่งจำเป็นเมื่อโทรแต่ละอินเทอร์เฟซของบัญชีอย่างเป็นทางการ */@testpublic void getaccess_token () พ่น ioexception {// stitch ลิงค์ httpsurl ที่ต้องการโดย api rist urlstring = "https://api.weixin.qq.com/cgi-bin/token // สร้าง URL URL requrl = url ใหม่ (urlstring); // รับลิงค์ httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); // รับสตรีมอินพุตของการเชื่อมต่อเพื่ออ่านเนื้อหาตอบกลับ inputstreamreader isr = new InputStreamReader (httpsconn.getInputStream ()); // อ่านเนื้อหาการตอบกลับของเซิร์ฟเวอร์และแสดง char [] chars = char ใหม่ [1024]; สตริง reslut = ""; int len; ในขณะที่ ((len = isr.read (chars))! = -1) {reslut += สตริงใหม่ (chars, 0, len); } isr.close (); / * * แปลง JSON เป็น Javabean มีการแนะนำขวดของบุคคลที่สาม: GSON */ GSON GSON = New GSON (); // แปลง JSON ที่ได้รับเป็นถั่วใน Java // note: Access_Token Access_Token เป็น Javabean ที่สร้างขึ้นด้วยตัวเอง access_token access_token = gson.fromjson (reslut, access_token ใหม่ (). getClass ()); if (access_token.getaccess_token ()! = null) {system.out.println ("access_token ที่ได้รับคือ:" + access_token.getaccess_token ()); System.out.println ("เวลาที่ถูกต้องของ access_token คือ:" + access_token.getexpires_in () + "s"); } else {system.out.println (tag + "ไม่สามารถรับ access_token ได้โปรดตรวจสอบ"); - บันทึกการโทรติดต่อข้อมูลรับรอง access_token
•ความคิด
เก็บ access_token ที่ได้รับและเวลาปัจจุบันในไฟล์ เมื่อสกัดให้กำหนดความแตกต่างของเวลาระหว่างเวลาปัจจุบันและเวลาที่บันทึกไว้ในที่เก็บข้อมูล หากมากกว่า MAX_TIME ให้กลับมาใช้ใหม่อีกครั้งและแทนที่เนื้อหาที่เข้าถึงได้ในไฟล์ หากน้อยกว่า max_time ให้รับโดยตรง
•ทำให้สำเร็จ
/ * * วิธีนี้ใช้การได้มาซึ่ง Access_Token, บันทึกและบันทึก Access_Token เพียง 2 ชั่วโมงเท่านั้น หากเกินสองชั่วโมงให้กลับมาอีกครั้ง หากไม่เกินสองชั่วโมงให้รับโดยตรง วิธีนี้ขึ้นอยู่กับ *: สตริงคงที่สาธารณะ getAccessToken (); * * แนวคิด: เก็บ access_token ที่ได้รับและเวลาปัจจุบันในไฟล์ * เมื่อแยกออกให้กำหนดความแตกต่างของเวลาระหว่างเวลาปัจจุบันและเวลาที่บันทึกไว้ในที่เก็บข้อมูล หากมากกว่า max_time ให้กลับมาอีกครั้งและจัดเก็บการเข้าถึงไฟล์ที่ได้รับเพื่อแทนที่เนื้อหาต้นฉบับ*และหากน้อยกว่า MAX_TIME ให้รับโดยตรง */ @Test โมฆะสาธารณะ GetSavedAccess_Token () พ่น IOException {GSON GSON = new GSON (); สตริง maccess_token = null; // access_token ที่จะได้รับ; ไฟล์ไฟล์ = ไฟล์ใหม่ ("TEMP_ACCESS_TOKEN.TEMP"); // ตำแหน่งที่ ACCECT_TOKEN ถูกบันทึกไว้ // หากไฟล์ไม่มีอยู่ให้สร้างถ้า (! file.Exists ()) file.createnewFile (); // ถ้าขนาดไฟล์เท่ากับ 0 หมายความว่ามันถูกใช้เป็นครั้งแรกและป้อน access_token ถ้า (file.length () == 0) {maccess_token = getAccessToken (); fileOutputStream fos = new fileOutputStream (ไฟล์, false); // ผนวก access_token at = new Access_token (); at.setaccess_token (maccess_token); at.Setexpires_in (System.currentTimeMillis () + ""); สตริง json = gson.tojson (at); fos.write ((json) .getBytes ()); fos.close (); } else {// อ่านเนื้อหาไฟล์ FileInputStream FIS = ใหม่ FileInputStream (ไฟล์); ไบต์ [] b = ไบต์ใหม่ [2048]; int len = fis.read (b); String mjsonaccess_token = สตริงใหม่ (b, 0, len); // อ่านเนื้อหาไฟล์ access_token access_token = gson.fromjson (mjsonaccess_token, access_token ใหม่ (). getclass ()); if (access_token.getExpires_in ()! = null) {long savetime = long.parselong (access_token.getExpires_in ()); นานแล้ว = System.currentTimeMillis (); Long Remiantime = Nowtime - Savetime; // system.out.println (แท็ก + "ความแตกต่างเวลา:" + remiantime); if (remiantime <max_time) {access_token at = gson.fromjson (mjsonaccess_token, access_token ใหม่ (). getClass ()); maccess_token = at.getaccess_token (); } else {maccess_token = getAccessToken (); fileOutputStream fos = new fileOutputStream (ไฟล์, false); // ผนวก access_token at = new Access_token (); at.setaccess_token (maccess_token); at.Setexpires_in (System.currentTimeMillis () + ""); สตริง 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= สตริง reslut = null; ลอง {url requrl = url ใหม่ (urlstring); httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); InputStreamReader ISR = ใหม่ inputStreamReader (httpsconn.getInputStream ()); ถ่าน [] chars = char ใหม่ [1024]; reslut = ""; int len; ในขณะที่ ((len = isr.read (chars))! = -1) {reslut += สตริงใหม่ (chars, 0, len); } isr.close (); } catch (ioexception e) {e.printstacktrace (); } GSON GSON = new GSON (); access_token access_token = gson.fromjson (reslut, access_token ใหม่ (). getClass ()); if (access_token.getaccess_token ()! = null) {return access_token.getaccess_token (); } else {return null; - สามบทความแรกแสดงให้เห็นถึงซอร์สโค้ด: http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น