微信公眾號開發教程(一) 驗證接入
作者:陳惠,叩丁狼教育高階講師。原創文章,轉載請註明出處。
微信公眾號開發教程(一)驗證接入
本篇文章主要介紹了微信公眾號開發接入詳細流程,希望對剛接觸公眾號開發的同學有所幫助,有興趣的同學可多多關注叩丁狼公眾號,後續會更新不同的公眾號小案例。
公眾號的分類
我們平常在微信應用上會看到有很多的公眾號,但是各自並不一樣,公眾號也分很多種型別,不過最常見的就是服務號和訂閱號了。下面我們來看一下他們的區別:
1、訂閱號
為媒體和個人提供一種資訊傳播方式,主要偏於為使用者傳達資訊(類似報紙雜誌),主要的定位是閱讀,每天可以群發1條訊息;
2、服務號
為企業,政府或組織提供對使用者進行服務,主要偏於服務互動(類似銀行提供服務查詢),每個月只可群發4條訊息;
3、企業微信(企業號)
為企業,政府,事業單位,實現生產管理和協作運營的移動化,主要用於公司內部通訊使用,旨在為使用者提供移動辦公,需要先有成員的通訊資訊驗證才可以關注成功企業微信;
通過以下圖片我們可以更清晰的看出不同公眾號的區別:
還有一個比較明顯的區別就是,訂閱號都是存放在一個名叫訂閱號的資料夾中,點開才能看到所有關注過的訂閱號,但是服務號卻和好友一樣直接就顯示在聊天列表中。這個大家開啟微信客戶端便能看到。
如果大家有需要申請公眾號的,要根據實際需求考慮清楚應該申請哪一種公眾號
以下是官方給出的建議,大家可以多參考參考
1)如果想簡單的傳送訊息,達到宣傳效果,建議可選擇訂閱號;
2)如果想用公眾號獲得更多的功能,例如開通微信支付,建議可以選擇服務號;
3)如果想用來管理內部企業員工、團隊,對內使用,可申請企業號;
4)訂閱號可通過微信認證資質稽核通過後有一次升級為服務號的入口,升級成功後型別不可再變;
5)服務號不可變更成訂閱號。
4.測試號(用於開發測試及功能體驗)
這種是平常普通使用者是涉及不到的,是專門為開發人員準備的一種僅用於測試的公眾號。
由於使用者體驗和安全性方面的考慮,微信公眾號的註冊有一定門檻,某些高階介面的許可權需要微信認證後才可以獲取。所以,為了幫助開發者快速瞭解和上手微信公眾號開發,熟悉各個介面的呼叫,微信推出了公眾帳號測試號,無需公眾帳號、快速申請介面測試號,通過手機微信掃描二維碼即可獲得,利用測試號我們可以體驗和測試更多高階功能。
申請地址:
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
但測試號也不是萬能的,部分高階功能,如微信支付,卡券功能等也是不開放的。
如果要實現支付功能還是得去註冊個正式的公眾號。
微信公眾平臺:
我們註冊的公眾號都可以在這個平臺上進行管理,比如想弄一些自定義選單,或者自動回覆,或者平常推送的文章,都可以在這上面操作。
平臺中分為兩種管理模式:
平臺提供了兩種管理模式給我們,應該根據我們的需求來選擇使用不同的模式。
下面我們來了解一下,兩種模式的區別:
編輯模式
主要針對非程式設計人員及資訊釋出類公眾帳號使用。
開啟該模式後,可以方便地通過介面配置“自定義選單”和“自動回覆的訊息”。
好處是視覺化介面配置,操作簡單,快捷,但是功能有限。
開發模式
主要針對具備開發能力的人使用。
開啟該模式後,能夠使用微信公眾平臺開放的介面,但是編輯模式的設定會失效,比如“自定義選單”和“自動回覆的訊息”功能。通過程式設計方式可以實現更多複雜的功能,提供個性化服務。
總的來說,編輯模式就是為所有人提供的,如果你的需求僅僅只是最常見的選單,自動回覆等,使用編輯模式已經滿足,但是如果你需求的功能比較複雜,有很多很多的想法,就需要使用到開發模式。
下面我們來學習一下,怎麼使用這個開發模式。
開發模式配置流程
1.登入測試號頁面,可以看到該測試號相關的資訊
就是使用電腦開啟http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
使用微信掃一掃二維碼,即可在開啟的頁面中看見微信給你分配的測試號的相關資訊。
下面兩個屬性是唯一的標識,每個測試號都會有自己的appid與appsecret ,是比較重要的資訊,不要隨意發給別人。
appid:是公眾號開發識別碼,配合開發者密碼可呼叫公眾號的介面能力。
appsecret:是校驗公眾號開發者身份的密碼,具有極高的安全性。
如果是正式的公眾號,登入公眾平臺官網之後,找到“基本配置”選單欄也可以獲取上公眾號相關的資訊。
2.配置引數介紹
再往下看,我們會看到URL和Token這兩個屬性,和上面appid/appsecret不同的是,上面的是微信分配給我們的,但是下面這兩個是需要我們填進去的。
我們先來了解一下,這兩個屬性有什麼作用。
URL:就是指我們自己的伺服器地址
該URL是開發者用來接收和響應微信訊息和事件的介面URL
(必須以http://或https://開頭,分別支援80埠和443埠)
Token:可任意填寫,用作生成簽名(必須為英文或數字,長度為3-32字元)
該簽名在後邊會用到,這裡暫時隨便填個內容也可以
接下來我們需要了解的是微信與我們的伺服器互動的過程:
當我們在微信app上,給公眾號傳送一條內容的時候,實際會傳送到微信的伺服器上,此時微信的伺服器就會對內容進行封裝成某種格式的資料比如xml格式,再轉發到我們配置好的URL上,所以該URL實際就是我們處理資料的一個請求路徑。所以該URL必須是能暴露給外界訪問的一個公網地址,不能使用內網地址,生產環境可以申請騰訊雲,阿里雲伺服器等,但是在開發環境中可以暫時利用一些軟體來完成內網穿透,便於修改和測試,如NATAPP,花生殼等軟體,使用起來也很方便,在本地安裝對應的軟體,配置執行後,直接使用軟體分配的臨時域名來訪問本地應用即可,只是偶爾會存在網路不穩定的情況。這裡不詳細介紹如何使用了,具體教程可參考軟體官網。
在開發的過程中,我們會經常使用到微信公眾號提供給開發者的開發文件
具體地址:https://mp.weixin.qq.com/wiki
大家開啟後可以選擇”接入指南”,參考微信提供的一些幫助資訊。
3.搭建本地應用(java/python/php等語言均可)
基本概念都瞭解過後,我們馬上就要開始開發了,因此需要先提供好一個應用,接下來就可以在該應用上新增公眾號相關的功能了。
本文專案使用java語言,SpringMVC+Spring+MyBatis框架
4.URL接入驗證
我們需要先來了解一下接入的過程是怎麼樣的。下圖是微信官方對接入過程的介紹。
由以上介紹可知,當我們填入url與token的值,並提交後,微信會傳送一個get請求到我們填寫的url上,並且攜帶4個引數,而signature引數結合了開發者填寫的token引數和請求中的timestamp引數、nonce引數來做的加密簽名,我們在後臺需要對該簽名進行校驗,看是否合法。實際上,我們發現微信帶過來的4個引數中並沒有帶token引數,僅有signature是和token有關的,所以我們應該在本地應用中也準備一個和填入的token相同的引數,再通過微信傳入的timestamp與nonce做相同演算法的加密操作,若結果與微信傳入的signature相同,即為合法,則原樣返回echostr引數,代表接入成功,否則不做處理,則接入失敗。
詳細流程可參考微信官方提供的邏輯流程圖,我們的應用需要以該流程圖的步驟來實現。
程式碼示例:
@Controller
public class WeChatController {
/**
* 微信URL接入驗證
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
*/
@RequestMapping(value="/weChat",method= RequestMethod.GET)
@ResponseBody
public String validate(String signature,String timestamp,String nonce,String echostr){
//1. 將token、timestamp、nonce三個引數進行字典序排序
String[] arr = {timestamp,nonce,WeChatUtil.TOKEN};
Arrays.sort(arr);
//2. 將三個引數字串拼接成一個字串進行sha1加密
StringBuilder sb = new StringBuilder();
for (String temp : arr) {
sb.append(temp);
}
//3. 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
if(SecurityUtil.SHA1(sb.toString()).equals(signature)){
//接入成功
return echostr;
}
//接入失敗
return null;
}
}
備註:
- 程式碼中WeChatUtil.TOKEN是一個常量,常量值必須要和我們在頁面上填入的token值相同,通常可以抽取到配置檔案中來注入值比較靈活。
2.SecurityUtil是一個工具類,提供了sha1加密的方法。
接入成功後即可根據開發文件實現一些小案例了。文章暫時使用的是測試號來做開發,後續有些高階功能許可權不夠可能會改成正式公眾號來進行開發。
相關文章
- 微信公眾號Java開發記錄(一)接入Java
- 接入微信公眾號登入-驗證token
- 微信公眾號開發
- 微信公眾號開發——伺服器配置及token驗證伺服器
- 微信公眾號開發之坑(一)
- Nodejs微信公眾號開發NodeJS
- .net開發微信公眾號
- 微信公眾號開發-分享
- uni-app微信公眾號web JS-SDK開發之一接入APPWebJS
- 記一次微信公眾號開發
- 微信公眾號開發(一)基礎配置
- 微信公眾號接入月之暗面Kimi
- 微信開發系列之一 - 微信公眾號開發的開發環境搭建開發環境
- Python+Tornado開發微信公眾號Python
- PHP微信公眾號開發——公共方法PHP
- 【Java】微信公眾號開發筆記Java筆記
- Laravel+easywechat 開發微信公眾號Laravel
- 微信公眾號投票活動製作教程 微信公眾號投票怎麼弄?
- 微信公眾號測試號開發小結
- 微信公眾號讚賞功能開通方法 微信公眾號讚賞如何開通
- 微信公眾號開發推送事件排重事件
- 微信公眾號支付開發手記(node)
- 微信公眾號開發Django JSSDK授權DjangoJS
- Spring Boot 開發微信公眾號後臺Spring Boot
- 微信公眾號開發之客服訊息
- 微信公眾號接入線上客服系統的方式
- 微信公眾號開發 —— 微信網頁授權小記網頁
- 教你如何用node.js開發微信公眾號(一)Node.js
- 微信程式開發系列教程(四)使用微信API建立公眾號自定義選單API
- tp5+ionic開發微信公眾號專案實戰教程
- 微信公眾號開發5-自定義選單-微信開發phpPHP
- Node.js + Express 認證微信公眾號Node.jsExpress
- NodeJS介紹以及開發微信公眾號ExampleNodeJS
- Python開發微信公眾號後臺(系列二)Python
- 微信公眾號開發Django 網頁授權Django網頁
- Nodejs開發微信公眾號中控服務NodeJS
- 微信公眾號開發-後端demo(隨錄)後端
- 基於.net5 wtm框架、uni-app微信公眾號開發一、公眾號授權框架APP