原因:
1、由于公司的微信公眾號已經在阿里云上運營,如果有任何bug不可能去停掉服務器去調試,這就需要在本地搭建測試環境了。
2、公眾號開發涉及到微信的回調,所以你本地搭建的服務器需要外網能夠訪問,這個時候就需要把運行在內網的服務器映射到外網去給微信訪問。
方法:
1、搭建內網穿透環境:
如果喜歡自己搭建的話可以多找些關于內網穿透的資料看看,我是由于時間的關系,當時就選擇了一個工具來把自己的電腦穿透到外網,(主要是收費不是很貴)。
在這里可以推薦一下:,,網絡感覺還不錯,雖然不快,但是基本能滿足我的微信開發就足夠了,我使用的是付費5/月的套餐微信源碼本地測試,因為這樣就能固定的外網地址。
2、映射好后,要試著訪問以下映射的地址,看看是否能訪問到你的服務器微信源碼本地測試,可以的話就說明你的映射是成功的。如圖:
3、配置公眾號的測試賬號:
1)、進入到微信公眾號首頁左側導航欄下有個開發者工具,點擊進去:
2)、在右邊能看到如下的測試賬號,點擊進入
3)、用個人微信掃一掃進去即可登錄個人的測試賬號,此時會有如下的東西,這個是公眾號開發的時候需要用到的參數。
注:這些最好用配置文件的形式保存,方便以后修改為正式環境的參數!
4)、這個url是微信那邊需要發個驗證請求過來的,需要你配置一個你服務器的外網地址,即第一步我們將公眾號服務器映射到外網的地址,(注意端口號哦)。token的話自己隨機設置,并保存到配置文件中。
5)、當你點擊提交的時候,微信會立刻試著發個請求到這個地址上去,如果請求成功的話,可以看到如下圖;
url尾部的,是因為我本地用了nginx路由轉向,這個轉向就是轉到我的本地公眾號服務器。(如果還沒有接觸nginx的話,可以先試著直接把映射的端口直接跟你公眾號服務器端口設置成一樣,就是如下圖的本地端口。不過一般還是建議搭配nginx使用,這樣就不用總是去改端口,只需要配置好你的nginx代理服務器就可以了。
6)、微信發送認證請求到你本地服務器的代碼如下,這個是node的代碼,這個代碼只在微信認證的時候使用,平時注釋掉即可:
// 微信url 驗證token代碼
.get('/', (req,res) {
// body...
var state = req.query.state;
//.log(req);
var Isign = sign.(req.query);
.log('sign',Isign);
if(!Isign){
//如果簽名不對,結束請求并返回
res.end(' fail');
}
if (req. == "GET") {
//如果請求是GET,返回用于通過服務器有效校驗
res.end(req.query.);
}
});
sign文件的檢查簽名
var = ('');
= (query) {
var = query.;
var = query.;
var nonce = query.nonce;
var = .('sha1');
var arr = [.token, , nonce].sort();
.(arr.join(''));
.('hex') === ;
};
7)、當你到這一步的時候,相信你微信掃一掃關注的測試賬號就可以給你測試使用了,真機測試如下圖: