微信公眾號(hào)開(kāi)發(fā)總結(jié)
這里只是對(duì)微信公眾號(hào)開(kāi)發(fā)一些基本知識(shí)的總結(jié),形成微信開(kāi)發(fā)的基本思路。
詳情文檔還是要參考微信官方文檔:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
1、微信公眾號(hào)是什么
微信公眾號(hào)分為訂閱號(hào)和服務(wù)號(hào),那訂閱號(hào)和服務(wù)號(hào)有什么區(qū)別呢,所有的訂閱號(hào)都會(huì)顯示在微信訂閱號(hào)消息會(huì)話列表里,而服務(wù)號(hào)則會(huì)有一個(gè)單獨(dú)的會(huì)話,并且訂閱號(hào)和服務(wù)號(hào)的所擁有的功能也不同。訂閱號(hào)和服務(wù)號(hào)也分別未認(rèn)證和認(rèn)證兩種。微信公共號(hào)是需要進(jìn)行個(gè)人信息認(rèn)證的。它們之間的區(qū)別詳情請(qǐng)見(jiàn):
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Explanation_of_interface_privileges.html
但是個(gè)人只能申請(qǐng)訂閱號(hào),服務(wù)號(hào)只有企業(yè)才能申請(qǐng),但是訂閱號(hào)很多功能無(wú)法體驗(yàn),這時(shí)候就需要接口測(cè)試號(hào)
2、接口測(cè)試號(hào)
接口測(cè)試號(hào)無(wú)法像其它公眾號(hào)一樣讓他人搜索到,其無(wú)法該接口測(cè)試號(hào)的名字,但是它其它的功能還是挺全的。申請(qǐng)地址如下:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,登陸成功后會(huì)需要填寫(xiě)一些信息,如下面的圖片。
appID和appsecret是微信服務(wù)器幫我們生成的,暫時(shí)不用管這個(gè),把它們當(dāng)成公眾號(hào)的一個(gè)電子身份。
為什么還需要域名和接口呢,因?yàn)槲覀冊(cè)谖⑿殴娞?hào)上面的操作都是反饋給微信服務(wù)器的,那么開(kāi)發(fā)人員又怎么會(huì)知道這個(gè)信息呢,必須通過(guò)微信服務(wù)器發(fā)送給我們自己的服務(wù)器,這個(gè)域名就是我們自己服務(wù)器外網(wǎng)ip的域名,注意是外網(wǎng),內(nèi)網(wǎng)微信服務(wù)器是無(wú)法直接訪問(wèn)的。所以你需要在騰訊云或者阿里云申請(qǐng)一臺(tái)云服務(wù)器,然后在什么一個(gè)域名,將域名解析到云服務(wù)器的IP,可能有點(diǎn)貴。沒(méi)關(guān)系,用自己的電腦也能代建服務(wù)器,需要借助內(nèi)網(wǎng)穿透工具,什么是內(nèi)網(wǎng)穿透,可以自己baidu,下面就是用內(nèi)網(wǎng)穿透工具ngrok生成的外網(wǎng)IP,要注意的是內(nèi)網(wǎng)穿透工具要支持http或者h(yuǎn)ttps協(xié)議。
有了域名之后,還需要填寫(xiě)一個(gè)url,這個(gè)url就是微信服務(wù)器像我們服務(wù)器發(fā)起請(qǐng)求的地址。分為get和post請(qǐng)求,get請(qǐng)求主要用于驗(yàn)證,驗(yàn)證雙方服務(wù)器是否能夠建立連接,post主要用于微信服務(wù)器向我們服務(wù)器發(fā)送數(shù)據(jù)。
token可以隨意填寫(xiě),不過(guò)后面需要用到

3、get請(qǐng)求驗(yàn)證
只有驗(yàn)證通過(guò)才能成為開(kāi)發(fā)者,詳細(xì)請(qǐng)看官網(wǎng)文檔
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
我下面給了一個(gè)Java SpringBoot框架下面的一個(gè)簡(jiǎn)單例子
@GetMapping(value = "/index")
public String index(HttpServletRequest request) {
//微信加密簽名 : 結(jié)合了開(kāi)發(fā)者填寫(xiě)的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)
String signature = request.getParameter("signature");
// 時(shí)間戳
String timestamp = request.getParameter("timestamp");
// 隨機(jī)數(shù)
String nonce = request.getParameter("nonce");
// 隨機(jī)字符串
String echostr = request.getParameter("echostr");
String token = "abcdefg";
// 通過(guò)檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn),若校驗(yàn)成功則原樣返回echostr,表示接入成功,否則接入失敗
if (checkSignature(token, signature, timestamp, nonce)) {
return echostr;
} else {
return "error";
}
}
這個(gè)checkSigature()方法主要用來(lái)進(jìn)行校驗(yàn),校驗(yàn)的內(nèi)容主要如下:

4、access_token
在開(kāi)始開(kāi)發(fā)前還需要搭建一個(gè)服務(wù)來(lái)獲取access_token,當(dāng)我們的服務(wù)器訪問(wèn)微信服務(wù)器的api時(shí)都需要在參數(shù)中帶上access_token,然后服務(wù)器為了避免同一時(shí)間有大量的請(qǐng)求來(lái)訪問(wèn)這個(gè)接口,所以對(duì)這個(gè)接口進(jìn)行了訪問(wèn)次數(shù)限制,如果你僅僅用來(lái)個(gè)人測(cè)試,不搭建access_token的中控服務(wù)也行,但是用于生產(chǎn),當(dāng)人數(shù)多了之后很快次數(shù)就會(huì)用完的。
搭建這個(gè)access_token中控服務(wù)的主要目的在于緩存access_token,微信服務(wù)器的access_token是2小時(shí)有效的,獲取下一個(gè)access_token后上一個(gè)access_token會(huì)失效,所以我們緩存一個(gè)access_token,時(shí)間控制在2小時(shí)以內(nèi),到了是時(shí)間后獲取下一個(gè)access_token。
5、開(kāi)始開(kāi)發(fā)
做好上面的準(zhǔn)備后就可以開(kāi)始開(kāi)發(fā)了。
(1)菜單模塊
微信公眾號(hào)上面很多都是有菜單的,我們大致上能做的有下面這些功能,這些都比較號(hào)理解.
個(gè)性化菜單就是根據(jù)用戶標(biāo)簽、用戶性別,手機(jī)操作系統(tǒng)、用戶所在地區(qū)或手機(jī)語(yǔ)言來(lái)設(shè)置不同的菜單

(2)消息管理:主要是微信服務(wù)器和我們自己服務(wù)器之間的各自消息傳遞
接收普通消息:用戶輸入文本、圖片消息等等后微信服務(wù)器將消息轉(zhuǎn)發(fā)給我們服務(wù)器,下面是這些消息的涵蓋范圍

接收事件消息,這個(gè)一般表示用戶的某個(gè)動(dòng)作

被動(dòng)回復(fù)消息,主要用于在微信公眾號(hào)進(jìn)行相關(guān)操作后,我們自己的服務(wù)器自己進(jìn)行相應(yīng),回復(fù)給用戶的消息


浙公網(wǎng)安備 33010602011771號(hào)