准備工作
1.首先注冊自己的微信公眾號。
微信公眾號現在分為訂閱號,服務號,企業號,服務號和企業號不對個人開發者開放,所以我們只能選擇訂閱號。
但是訂閱號也有認證和未認證之分,認證的訂閱號支持的接口更多也更高級,下圖是微信的接口權限圖,只截取了一部分。
如果我們想測試這些接口怎么辦?我們可以申請微信的測試賬號,測試賬號只能用於測試接口,不能用於真實的項目。下面就看看怎么申請測試賬號吧。
1.1進入微信公眾平台首頁 https://mp.weixin.qq.com/
1.2在下方的賬號分類里找到訂閱號,點擊開發文檔,在左側邊欄找到開始開發-接口測試號申請,如下圖所示
點擊進入申請就好了。
2.一個域名和一個服務器,強烈建議在阿里雲上購買,便宜穩定省心。現在.cn的域名29元/年,1核1G的服務器是330元/年。具體怎么申請,以及服務器怎么使用,大家可以網上自行百度,這里就不再贅述了。
准備工作就到這里,下面正式開始微信公眾號的開發。
二、接入微信
第一步、填寫服務器配置信息
進入微信測試號管理頁面,填寫接口配置信息。
1.URL地址,必須以http://或https://開始,分別支持80和443端口,例如:http://www.baidu.com/,這里你應該填寫你自己的域名,這個域名指向的是你買的服務器。
2.Token是必須為英文或者數字,長度為2-32個字符。
第二步、驗證消息的確來自微信服務器
為了驗證消息的確來自微信服務器,微信服務器會向我們的服務器發送GET請求,GET請求攜帶四個參數
1)signature:微信加密簽名,簽名里包含了我們填寫的Token信息,和請求中的timestamp和nonce參數
2)timestamp:時間戳
3)nonce:隨機數
4)echostr:隨機字符串
開發者通過校驗signature對請求進行驗證,下面介紹校驗算法。
1)將Token,timestamp,nonce按字典排序,好在js的sort()方法可以幫我們完成這個工作
2)排序之后,將這三個參數拼成一個字符串,進行sha1加密,這里也不用害怕,npm的有現成的sha1包。
3)然后判斷signature與我們自己用sha1加密后的字符串是否相等,如果相等則說明請求來自於微信,然后我們將echostr原封不動的返回給微信服務器,接入驗證就成功了。
好了,有了這些理論知識,我們就開始編寫代碼吧。
編寫接入微信服務器代碼
新建index.js,並在當當前目錄下安裝koa框架和sha1模塊.
首先我們要安裝koa框架,Koa是繼Express之后的一個新的Web框架,使用Koa框架可以是Web開發,變得更加容易和快速,因為這里只用到koa一些簡單的功能,所以不做詳細的介紹了。
安裝sha1模塊,用於進行將字符串進行sha1加密。
npm install koa
npm install sha1
下面是index.js中的代碼
//嚴格模式 "use strict" //引入koa框架 let Koa=require("koa"); //引入sha1模塊 let sha1=require("sha1"); let koa=new Koa(); //微信訂閱號的配置信息 let config={ wechat:{ appID:"wx2ea795e409b2c674", appsecret:"e4632492abb3de0943fc7ca20c4b27d0",
//這里你得填寫你自己設置的Token值 token:"wechat", } }; koa.use(function(ctx){ //ctx.query獲取請求中攜帶的參數 let token=config.wechat,token; //獲取請求中的signature let signature=ctx.query.signature; //獲取請求中的timestamp let timestamp=ctx.query.timestamp; //獲取請求中的nonce let nonce=ctx.query.nonce; //獲取請求中的echostr let echostr=ctx.query.echostr; //將Token,timestamp,nonce按字典排序,排序后鏈接成一個字符串 let str=[token,timestamp,nonce].sort().join(""); //使用sha1模塊進行sha1加密 let sha1Str=sha1(str); //判斷加密后的字符串與請求中signature是否相等 //如果相等返回echostr if(sha1Str === signature){ //將echostr返回給微信服務器 ctx.body=echostr; } else{ ctx.body="wrong"; } }) //監聽服務器的80端口,這里需要注意一下,如果你監聽的不是80端口,那么你就得修改url,在url最后加上你要監聽的端口號,例如http://www.baidu.com:3000 koa.listen(80); console.log("服務器已經跑起來了.....");
接入服務器的代碼就這么多,最后文件的結構是這樣的
node_modules這個文件夾里存放的就是koa和sha1相關的文件。然后將這個文件夾挪到你的服務器上,
並在這個目錄下,用node把Index.js跑起來,成功的話,應該是下面的效果。
最后就可以提交我們的信息了,其實在提交之后,微信服務器會向我們的服務器發送請求,我們的代碼就是處理這個請求,並把微信服務器需要的信息響應給它。
提交之后,就會顯示配置成功。
以后我們就可以使用我們自己的服務器,向微信服務器發送請求了。
下一期將會講解怎么獲取access_token,並緩存access_token。
這一期的代碼我已經提交到我的github上了,有興趣的大家可以來看看使用Node開發微信訂閱號