為了使第三方開發(fā)者能夠?yàn)橛脩籼峁└喔袃r(jià)值的個(gè)性化服務(wù),微信公眾平臺(tái)開放了許多接口,包括自定義菜單接口、客服接口、獲取用戶信息接口、用戶分組接口、群發(fā)接口等,開發(fā)者在調(diào)用這些接口時(shí),都需要傳入一個(gè)相同的參數(shù)access_token,它是公眾賬號(hào)的全局唯一票據(jù),它是接口訪問憑證。
access_token的有效期是7200秒(兩小時(shí)),在有效期內(nèi),可以一直使用,只有當(dāng)access_token過期時(shí),才需要再次調(diào)用接口獲取access_token。在理想情況下,一個(gè)7x24小時(shí)運(yùn)行的系統(tǒng),每天只需要獲取12次access_token,即每2小時(shí)獲取一次。如果在有效期內(nèi),再次獲取access_token,那么上一次獲取的access_token將失效。
目前,獲取access_token接口的調(diào)用頻率限制為2000次/天,如果每次發(fā)送客服消息、獲取用戶信息、群發(fā)消息之前都要先調(diào)用獲取access_token接口得到接口訪問憑證,這顯然是不合理的,一方面會(huì)更耗時(shí)(多了一次接口調(diào)用操作),另一方面2000次/天的調(diào)用限制恐怕也不夠用。因此,在實(shí)際應(yīng)用中,我們需要將獲取到的access_token存儲(chǔ)起來,然后定期調(diào)用access_token接口更新它,以保證隨時(shí)取出的access_token都是有效的。
下面將為大家介紹如何定時(shí)獲取并存儲(chǔ)access_token。請(qǐng)注意:這不是一篇講解如何調(diào)用接口獲取access_token的文章,關(guān)于access_token的獲取,請(qǐng)參考文章?《微信公眾帳號(hào)開發(fā)教程第14篇-自定義菜單的創(chuàng)建及菜單事件響應(yīng)》。
在動(dòng)手前先來簡單分析一下,我們要解決的無非是如下兩個(gè)問題:
1.如何定時(shí)獲取access_token?
在Java中,如果要定時(shí)執(zhí)行某項(xiàng)任務(wù),需要用到j(luò)ava.util.Timer類,對(duì)于喜歡使用框架的朋友,可以采用?開源的任務(wù)調(diào)度框架quartz,Spring框架也支持quartz。除此這外,還有一種方法就是啟動(dòng)一個(gè)線程,在線程的run()方法中寫一個(gè)死循環(huán),然后使用Thread.sleep()來保證線程定時(shí)執(zhí)行某項(xiàng)任務(wù)。
2.將access_token保存在哪?
對(duì)于access_token的存儲(chǔ),可以考慮存儲(chǔ)在文件、數(shù)據(jù)庫或內(nèi)存中。具體采用哪種存儲(chǔ)方式,需要根據(jù)項(xiàng)目實(shí)際情況而定。如果只有一臺(tái)服務(wù)器,直接將access_token存儲(chǔ)在內(nèi)存中是最簡便有效的方式。
在本文中,筆者將演示的定期獲取并存儲(chǔ)access_token的流程為:Web服務(wù)器啟動(dòng)時(shí)就加載一個(gè)Servlet,在Servlet的init()方法中啟動(dòng)一個(gè)線程,在線程的run()方法中通過死循環(huán)+Thread.sleep()的方式定期獲取access_token,然后將獲取到的access_token保存在public static修飾的變量中。
在工程中創(chuàng)建一個(gè)InitServlet類,該類的代碼如下:
package org.liufeng.weixin.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.liufeng.weixin.thread.TokenThread; import org.liufeng.weixin.util.WeixinUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 初始化servlet * * @author liuyq * @date 2013-05-02 */ public class InitServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static Logger log = LoggerFactory.getLogger(WeixinUtil.class); public void init() throws ServletException { // 獲取web.xml中配置的參數(shù) TokenThread.appid = getInitParameter("appid"); TokenThread.appsecret = getInitParameter("appsecret"); log.info("weixin api appid:{}", TokenThread.appid); log.info("weixin api appsecret:{}", TokenThread.appsecret); // 未配置appid、appsecret時(shí)給出提示 if ("".equals(TokenThread.appid) || "".equals(TokenThread.appsecret)) { log.error("appid and appsecret configuration error, please check carefully."); } else { // 啟動(dòng)定時(shí)獲取access_token的線程 new Thread(new TokenThread()).start(); } } }
從上面的代碼可以看出,InitServlet類只重寫了init()方法,并沒有重寫doGet()和doPost()兩個(gè)方法,因?yàn)槲覀儾⒉淮蛩阕孖nitServlet來處理訪問請(qǐng)求。init()方法的實(shí)現(xiàn)也比較簡單,先獲取在web.xml中配置的參數(shù)appid和appsecret,再啟動(dòng)線程TokenThread定時(shí)獲取access_token。
InitServlet在web.xml中的配置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" "="">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a>> <servlet> <servlet-name>initServlet</servlet-name> <servlet-class> org.liufeng.weixin.servlet.InitServlet </servlet-class> <!-- 配置獲取access_token所需參數(shù)appid和appsecret --> <init-param> <param-name>appid</param-name> <param-value>wx617a123bb8bc99cd</param-value> </init-param> <init-param> <param-name>appsecret</param-name> <param-value>4d82cbbbb08714c12345b62d7hn3dcb8</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
InitServlet在web.xml中的配置與普通Servlet的配置有幾點(diǎn)區(qū)別:1)通過配置
TokenThread的源代碼如下:
package org.liufeng.weixin.thread; import org.liufeng.weixin.pojo.AccessToken; import org.liufeng.weixin.util.WeixinUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 定時(shí)獲取微信access_token的線程 * * @author liuyq * @date 2013-05-02 */ public class TokenThread implements Runnable { private static Logger log = LoggerFactory.getLogger(TokenThread.class); // 第三方用戶唯一憑證 public static String appid = ""; // 第三方用戶唯一憑證密鑰 public static String appsecret = ""; public static AccessToken accessToken = null; public void run() { while (true) { try { accessToken = WeixinUtil.getAccessToken(appid, appsecret); if (null != accessToken) { log.info("獲取access_token成功,有效時(shí)長{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken()); // 休眠7000秒 Thread.sleep((accessToken.getExpiresIn() - 200) * 1000); } else { // 如果access_token為null,60秒后再獲取 Thread.sleep(60 * 1000); } } catch (InterruptedException e) { try { Thread.sleep(60 * 1000); } catch (InterruptedException e1) { log.error("{}", e1); } log.error("{}", e); } } } }
代碼中的第23行通過while(true){}構(gòu)造了一個(gè)死循環(huán)(永久執(zhí)行);第25行調(diào)用公眾平臺(tái)接口獲取access_token;第29行讓線程休眠7000秒再運(yùn)行,即每隔7000秒獲取一次access_token,保證access_token永不失效。在項(xiàng)目中的其他類,可以通過調(diào)用 TokenThread.accessToken.getToken() 來得到接口訪問憑證access_token。在本地部署運(yùn)行該程序,Tomcat啟動(dòng)完成后就會(huì)在控制臺(tái)顯示如下日志:
[INFO ] weixin api appid:wx617a123bb8bc99cd [INFO ] weixin api appsecret:4d82cbbbb08714c12345b62d7hn3dcb8 [INFO ] 獲取access_token成功,有效時(shí)長7200秒 token:sFopJ9lMmLl4u-ad61ojKpS0TolhN2s3SnHoI2Mh5GgdiYb35i-7DG2T2CDyQKMe
為了能夠直觀看到定期獲取access_token的效果,可以試著將TokenThread里的線程休眠時(shí)間修改為30秒或60秒。
Atas ialah kandungan terperinci 微信公眾平臺(tái)開發(fā)保證access_token長期有效的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Program mini WeChat rasmi Xianyu telah dilancarkan secara senyap-senyap Dalam program mini, anda boleh menghantar mesej peribadi untuk berkomunikasi dengan pembeli/penjual, melihat maklumat dan pesanan peribadi, mencari item, dsb. Jika anda ingin tahu apakah program mini Xianyu WeChat. dipanggil, lihat sekarang. Apakah nama applet Xianyu WeChat Jawapan: Xianyu, transaksi terbiar, jualan terpakai, penilaian dan kitar semula. 1. Dalam program mini, anda boleh menghantar mesej terbiar, berkomunikasi dengan pembeli/penjual melalui mesej peribadi, melihat maklumat dan pesanan peribadi, mencari item yang ditentukan, dsb. 2. Pada halaman program mini, terdapat halaman utama, berdekatan, post idle, messages, and mine 5 functions; 3. Jika anda ingin menggunakannya, anda mesti mengaktifkan pembayaran WeChat sebelum anda boleh membelinya;

Melaksanakan kesan penapis gambar dalam program mini WeChat Dengan populariti aplikasi media sosial, orang ramai semakin gemar menggunakan kesan penapis pada foto untuk meningkatkan kesan artistik dan daya tarikan foto. Kesan penapis gambar juga boleh dicapai dalam program mini WeChat, menyediakan pengguna dengan fungsi penyuntingan foto yang lebih menarik dan kreatif. Artikel ini akan memperkenalkan cara melaksanakan kesan penapis imej dalam program mini WeChat dan memberikan contoh kod khusus. Pertama, kita perlu menggunakan komponen kanvas dalam applet WeChat untuk memuatkan dan mengedit imej. Komponen kanvas boleh digunakan pada halaman

Untuk melaksanakan kesan menu lungsur dalam Program Mini WeChat, contoh kod khusus diperlukan Dengan populariti Internet mudah alih, Program Mini WeChat telah menjadi bahagian penting dalam pembangunan Internet, dan semakin ramai orang telah mula memberi perhatian kepada dan. gunakan Program Mini WeChat. Pembangunan program mini WeChat adalah lebih mudah dan pantas daripada pembangunan APP tradisional, tetapi ia juga memerlukan penguasaan kemahiran pembangunan tertentu. Dalam pembangunan program mini WeChat, menu lungsur ialah komponen UI biasa, yang mencapai pengalaman pengguna yang lebih baik. Artikel ini akan memperkenalkan secara terperinci cara melaksanakan kesan menu lungsur dalam applet WeChat dan menyediakan praktikal

Program mini WeChat rasmi Xianyu telah dilancarkan secara senyap-senyap Ia menyediakan pengguna dengan platform yang mudah yang membolehkan anda menerbitkan dan berdagang item terbiar dengan mudah. Dalam program mini, anda boleh berkomunikasi dengan pembeli atau penjual melalui mesej peribadi, melihat maklumat peribadi dan pesanan, dan mencari item yang anda inginkan. Jadi apa sebenarnya yang dipanggil Xianyu dalam program mini WeChat ini akan memperkenalkannya kepada anda secara terperinci Pengguna yang ingin tahu, sila ikuti artikel ini dan teruskan membaca! Apakah nama applet Xianyu WeChat Jawapan: Xianyu, transaksi terbiar, jualan terpakai, penilaian dan kitar semula. 1. Dalam program mini, anda boleh menghantar mesej terbiar, berkomunikasi dengan pembeli/penjual melalui mesej peribadi, melihat maklumat dan pesanan peribadi, mencari item yang ditentukan, dsb. 2. Pada halaman program mini, terdapat halaman utama, berdekatan, post melahu, mesej, dan 5 fungsi;

Applet WeChat melaksanakan fungsi muat naik gambar Dengan perkembangan Internet mudah alih, applet WeChat telah menjadi bahagian yang amat diperlukan dalam kehidupan orang ramai. Program mini WeChat bukan sahaja menyediakan pelbagai senario aplikasi, tetapi juga menyokong fungsi yang ditentukan oleh pembangun, termasuk fungsi muat naik imej. Artikel ini akan memperkenalkan cara untuk melaksanakan fungsi muat naik imej dalam applet WeChat dan memberikan contoh kod khusus. 1. Kerja persediaan Sebelum mula menulis kod, kita perlu memuat turun dan memasang alat pembangun WeChat dan mendaftar sebagai pembangun WeChat. Pada masa yang sama, anda juga perlu memahami WeChat

Untuk melaksanakan kesan putaran imej dalam Program Mini WeChat, contoh kod khusus diperlukan Program Mini WeChat ialah aplikasi ringan yang menyediakan pengguna dengan fungsi yang kaya dan pengalaman pengguna yang baik. Dalam program mini, pembangun boleh menggunakan pelbagai komponen dan API untuk mencapai pelbagai kesan. Antaranya, kesan putaran gambar merupakan kesan animasi biasa yang boleh menambah minat dan kesan visual pada program mini. Untuk mencapai kesan putaran imej dalam program mini WeChat, anda perlu menggunakan API animasi yang disediakan oleh program mini. Berikut ialah contoh kod khusus yang menunjukkan cara untuk

Gunakan applet WeChat untuk mencapai kesan penukaran karusel WeChat applet ialah aplikasi ringan dengan ciri pembangunan dan penggunaan yang mudah dan cekap. Dalam program mini WeChat, adalah keperluan biasa untuk mencapai kesan penukaran karusel. Artikel ini akan memperkenalkan cara menggunakan applet WeChat untuk mencapai kesan penukaran karusel dan memberikan contoh kod khusus. Mula-mula, tambahkan komponen karusel pada fail halaman applet WeChat. Contohnya, anda boleh menggunakan teg <swiper> untuk mencapai kesan penukaran karusel. Dalam komponen ini, anda boleh lulus b

Melaksanakan fungsi padam gelongsor dalam program mini WeChat memerlukan contoh kod khusus Dengan populariti program mini WeChat, pembangun sering menghadapi masalah pelaksanaan beberapa fungsi biasa semasa proses pembangunan. Antaranya, fungsi padam gelongsor adalah keperluan fungsi yang biasa dan biasa digunakan. Artikel ini akan memperkenalkan secara terperinci cara melaksanakan fungsi padam gelongsor dalam applet WeChat dan memberikan contoh kod khusus. 1. Analisis keperluan Dalam program mini WeChat, pelaksanaan fungsi pemadaman gelongsor melibatkan perkara berikut: Paparan senarai: Untuk memaparkan senarai yang boleh diluncurkan dan dipadam, setiap item senarai perlu disertakan
