引入
由于微信的龐大基數(shù),微信公眾號成為我們更為輕量便捷綜合的平臺入口。我們可以與訂閱的公眾平臺查詢信息,訂購服務(wù),購買商品,掌握微信公眾號平臺的開發(fā),也是一個開發(fā)者的基本經(jīng)歷。寫下這篇文章希望能與感興趣的人一起探索。
公眾平臺的分類
進入平臺官方地址:微信公眾平臺
主要分為以下四類:
| 功能 | 舉例 | |
|---|---|---|
| 服務(wù)號 | 為企業(yè)和組織提供更強大的業(yè)務(wù)服務(wù)與用戶管理能力,主要偏向服務(wù)類交互 | 12315,114,銀行,提供綁定信息,服務(wù)交互的 |
| 訂閱號 | 為媒體和個人提供一種新的信息傳播方式,主要功能是在微信側(cè)給用戶傳達資訊 | 報紙雜志,提供新聞信息或娛樂趣事 |
| 小程序 | 小程序可以在微信內(nèi)被便捷地獲取和傳播,同時具有出色的使用體驗。 | 微信聊天記錄頁下拉的小程序,如摩拜,騰訊乘車碼 |
| 企業(yè)微信 | 為企業(yè),政府,事業(yè)單位,實現(xiàn)生產(chǎn)管理和協(xié)作運營的移動化,主要用于公司內(nèi)部通訊使用,旨在為用戶提供移動辦公 | 如微信通訊錄中的“我的企業(yè)” |
詳細介紹可產(chǎn)看對應(yīng)開發(fā)文檔
入手
訂閱號的注冊與配置
-
作為個人開發(fā),建議先從訂閱號入手,避免不必要的審核和認(rèn)證流程,因此:
微信公眾平臺進入首頁后點擊立即注冊并選擇訂閱號即可
image 首頁點擊登錄,隨后手機掃碼驗證
進入該模式后,通過側(cè)邊欄配置菜單,可以直接對公眾號賬戶進行管理設(shè)置。包括自動消息回復(fù),讀者可自行體驗。
- 對于開發(fā)人員,功能設(shè)置并不靈活。側(cè)邊欄點擊開發(fā),即可進入開發(fā)者工具,這里就是我們所需要的文檔和工具。
公眾號平臺測試賬號
微信的沙盒測試環(huán)境的url都帶有sandbox
開發(fā)工具中點擊進入,或者想快速體驗無需注冊,直接單擊鏈接公眾平臺測試賬號,掃碼登錄即可。
參數(shù)介紹
測試號信息
手機微信登錄后由微信自動分配,不可修改,建議保密
- appId:當(dāng)前公眾號開發(fā)的唯一識別碼
- appsecret:校驗該公眾號開發(fā)者身份的密鑰
接口配置信息修改
- URL:即服務(wù)器地址,且必須為公網(wǎng)地址,該URL是開發(fā)者用來接收和響應(yīng)微信消息和事件的接口URL ,(必須以http://或https://開頭,分別支持80端口和443端口)
- Token:用作生成簽名(必須為英文或數(shù)字,長度為3-32字符),用于后面連接時的校驗。
此項配置配置生效還要與后端運行校驗
補充說明
開發(fā)人員可以在阿里云注冊服務(wù)器地址,若為了快速實現(xiàn)開發(fā)或是體驗功能,可以使用內(nèi)網(wǎng)穿透工具,即將本地地址映射到公網(wǎng)。
我這里用的是natapp,快速配置可查看鏈接NATAPP1分鐘快速新手圖文教程,按照圖文教程即可申請到一個免費的隧道。但是建議開發(fā)者購買一個收費的隧道(只針對natapp),兩個原因:
- 避免每次重啟應(yīng)用生成隨機域名又要修改配置,
- 由于微信部分功能的安全考慮,需要對應(yīng)一個https的域名,需注冊一個二級域名,二級域名僅支持綁定付費隧道(購買的二級域名要可用于微信開發(fā),且有ssl證書)。
當(dāng)開發(fā)著配置url和token后,發(fā)現(xiàn)提交后依然提示配置失敗。這是微信處于安全考慮,保證微信接入的是當(dāng)前開發(fā)著,需要同時與后臺進行校驗,具體可參考接入指南。
其中關(guān)鍵信息:
- 直接原樣返回echostr參數(shù)內(nèi)容,就算不錯校驗,也算接入成功;
- GET請求方式,請求參數(shù)有signature,timestamp,nonce,echostr;
- 將token、timestamp、nonce三個參數(shù)進行字典序排序后進行sha1加密,然后與請求中的signature對比
公眾號接入流程
1運行natapp
2驗證簽名的方法(token與接口配置信息中的一致)
public static boolean checkSignature(String signature,String timestamp,String nonce){
// 1 將token、timestamp、nonce三個參數(shù)進行字典序排序
String[] arr = {"123qwe", timestamp, nonce};
Arrays.sort(arr);
// 2 將三個參數(shù)字符串拼接成一個字符串進行sha1加密
StringBuilder sb = new StringBuilder();
for (String s : arr) sb.append(s);
// SHA1加密
String mySignature = SecurityUtil.SHA1(sb.toString());
// 3 開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信
return mySignature.equals(signature);
}
3編寫驗證微信接入的控制器代碼
@Controller
@RequestMapping("/api/v1/wechat1")
public class WeChatController {
private static Logger logger = LoggerFactory.getLogger(WeChatController.class);
@GetMapping("/gzh")
@ResponseBody
public String validate(String signature,String timestamp,String nonce,String echostr){
// 簽名校驗
if (!WeChatUtil.checkSignature(signature, timestamp, nonce)) {
logger.info("WeChatController.validate -- 公眾號接入失敗");
return null;
}
logger.info("WeChatController.validate -- 公眾號接入成功,echostr:{}"+echostr);
// 原樣返回
return echostr;
}
}
4后端代碼運行run
5接口配置信息填寫對應(yīng)的URL和token后,點擊提交按鈕
6配置成功
至此,驗證URL有效性成功后即接入生效,成為開發(fā)者,你可以在公眾平臺網(wǎng)站中申請微信認(rèn)證,認(rèn)證成功后,將獲得更多接口權(quán)限,滿足更多業(yè)務(wù)需求。
成為開發(fā)者后,用戶每次向公眾號發(fā)送消息、或者產(chǎn)生自定義菜單、或產(chǎn)生微信支付訂單等情況時,開發(fā)者填寫的服務(wù)器配置URL將得到微信服務(wù)器推送過來的消息和事件,開發(fā)者可以依據(jù)自身業(yè)務(wù)邏輯進行響應(yīng),如回復(fù)消息。
注:測試號管理中的其他參數(shù)在后續(xù)功能開發(fā)中介紹
細過程,可參考源代碼(持續(xù)更新):https://github.com/chetwhy/cloud-flow