Node.js 微信公衆號開發

  先貼參考連接html

http://www.cnblogs.com/constantince/p/5207365.html
http://www.cnblogs.com/xuange306/p/4971702.htmlnode

一、準備工做
ngrok用來作內網映射,Node.js用來搭建後臺服務,微信測試賬號用來和服務器交互
這裏直接用我的PC作服務器開發測試比較方便(也能夠去阿里雲,騰訊雲買服務器,還須要買域名,域名備案也比較麻煩須要公司資質)
微信公衆號當前分爲訂閱號、服務號、企業號(如今叫企業微信)具體區別見http://kf.qq.com/faq/120911VrYVrA130805byM32u.html(公衆平臺服務號、訂閱號、企業號的相關說明),
簡單來講訂閱號更適合作信息羣發,服務號則能夠跟用戶交互,功能更多(好比微信支付功能),企業號用來公司內部通信用
訂閱號支持組織和我的,服務號和企業號須要公司資質,並且高級接口和微信支付功能都須要微信認證(須要公司資質和300元認證費用,開通微信支付還須要300)
直接作開發測試弄個微信測試賬號就好了,真正上線才須要雲服務器,域名備案和微信認證這些東西
相關資源連接
ngrok下載
https://ngrok.com/download
Node.js英文官網
https://nodejs.org/en/
Node.js中文官網
http://nodejs.cn/download/
公衆平臺測試賬號,微信掃碼登錄後會獲得
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/loginweb

二、開發環境配置
安裝Node.js
  安裝下載的Node.js安裝包後,確認下是否成功安裝
  win+R,輸入cmd後回車,進入dos界面,輸入命令 node -v
  獲得版本信息說明安裝成功express

  

npm安裝express(Node.js的一個web開發框架,封裝了不少底層接口用起來比較方便,並且遵循mvc開發規範)
  一樣dos命令npm install -g express進行全局安裝(這個命令是連接官方的npm網站下載通常不會出現連接失敗的問題,若是連接失敗的話能夠切淘寶源,也就是國內的npm包鏡像,10分鐘同步一次。方式是執行npm install -g cnpm --  registry=https://registry.npm.taobao.org,之後的命令就變成了cnpm install -g express,參數和npm同樣)npm

  

  還須要輸入下一個命令,這樣就能夠在任何目錄執行express命令,不執行的話得去express安裝目錄執行cmd(路徑npm安裝的時候會顯示)
  npm install -g express-generatorjson

  

建立express項目,cmd進入你想建立項目的目錄下執行express porjectName,我這裏直接在E盤根目錄下建了一個weixin-test項目gulp

  

  他這裏也給提示了install dependencies:> cd weixin-test && npm install,當前目錄執行cd weixin-test && npm install來安裝依賴模塊api

  還有啓動命令run the app:> SET DEBUG=weixin-test:* & npm start,直接進weixin-test執行npm start就行,他會直接找bin下的www配置文件啓動瀏覽器

  項目目錄執行npm Install 會將package.json(項目配置文件)裏配置的依賴包都下載下來,express建的項目package.json裏是express須要的一些基礎服務模塊安全

  

啓動項目瀏覽器訪問測試

  7個npm包下載完後就能夠啓動服務器了,express4.x建立的服務器默認端口爲3000;配置文件在項目目錄下的bin/www

  啓動命令直接在項目目錄下執行npm start,用webstrom的話能夠配置後直接在webstrom啓動,webstrom配置以下

  

  dos啓動

  

  瀏覽器訪問

  

 

ngrok內網映射,測試域名連接
  解壓下載的ngrok進入目錄執行cmd調起dos,執行ngrok.exe http 3000(這個3000是express項目bin下面的www配置文件裏面的端口),鏈接成功後會返回映射的http和https域名

  

  返回映射域名

  

  測試映射是否成功http和https鏈接均可以(美國的服務器連接會比較慢)

  

實現微信接入交互代碼(參考微信官方文檔https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319)

  主要要實現的邏輯以下

  

  首先須要安裝crypto模塊,項目目錄執行npm install crypto --save(--save參數會將模塊加入到package.json裏的dependencies屬性裏,這個屬性裏存的是當前項目的依賴模塊,上線的時候用。還有一個參數是--save-dev區別是加入到package.json裏的devDependencies屬性,這個屬性用來存放開發用的模塊,好比gulp自動構建用的方便開發,上線的時候不用這些模塊)---更新下(這裏不用下crypto模塊了,直接require就行,Crypto庫是隨Nodejs內核一塊兒打包發佈的,主要提供了加密、解密、簽名、驗證等功能。)

  

  修改app.js增長路由配置,這裏require的api文件須要在routes下建用來實現具體的驗證邏輯

 1 var express = require('express');
 2 var path = require('path');
 3 var favicon = require('serve-favicon');
 4 var logger = require('morgan');
 5 var cookieParser = require('cookie-parser');
 6 var bodyParser = require('body-parser');
 7 
 8 var index = require('./routes/index');
 9 var users = require('./routes/users');
10 var api = require('./routes/api');//引入js文件,先要在routes下新建api.js
11 
12 var app = express();
13 
14 // view engine setup
15 app.set('views', path.join(__dirname, 'views'));
16 app.set('view engine', 'jade');
17 
18 // uncomment after placing your favicon in /public
19 //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
20 app.use(logger('dev'));
21 app.use(bodyParser.json());
22 app.use(bodyParser.urlencoded({ extended: false }));
23 app.use(cookieParser());
24 app.use(express.static(path.join(__dirname, 'public')));
25 
26 app.use('/', index);
27 app.use('/users', users);
28 app.use('/api', api);//增長路由
29 
30 // catch 404 and forward to error handler
31 app.use(function(req, res, next) {
32   var err = new Error('Not Found');
33   err.status = 404;
34   next(err);
35 });
36 
37 // error handler
38 app.use(function(err, req, res, next) {
39   // set locals, only providing error in development
40   res.locals.message = err.message;
41   res.locals.error = req.app.get('env') === 'development' ? err : {};
42 
43   // render the error page
44   res.status(err.status || 500);
45   res.render('error');
46 });
47 
48 module.exports = app;

  routes下新建api.js

 1 var express = require('express');
 2 var crypto = require('crypto');
 3 var router = express.Router();
 4 
 5 var token = "xxxxx"; //此處須要你本身修改!微信公衆測試號裏設置的token須要和這裏同樣
 6 
 7 router.get('/getToken', function(req, res, next) {
 8     var signature = req.query.signature;
 9     var timestamp = req.query.timestamp;
10     var nonce = req.query.nonce;
11     var echostr = req.query.echostr;
12 
13     /*  加密/校驗流程以下: */
14     //1. 將token、timestamp、nonce三個參數進行字典序排序
15     var array = new Array(token,timestamp,nonce);
16     array.sort();
17     var str = array.toString().replace(/,/g,"");
18 
19     //2. 將三個參數字符串拼接成一個字符串進行sha1加密
20     var sha1Code = crypto.createHash("sha1");
21     var code = sha1Code.update(str,'utf-8').digest("hex");
22     
23     //3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
24     if(code===signature){
25         res.send(echostr)
26     }else{
27         res.send("error");
28     }
29 });
30 
31 module.exports = router;

  重啓項目,ctrl + c 而後y回車 或者直接兩次ctrl +c 而後npm start

  

  

登陸微信測試公衆號填寫相關信息

  訪問https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login掃碼進入會出現以下頁面

    

  

  appID和appsecret是自動分配的信息,用來後臺實現公衆號自定義菜單或者微信網頁受權等功能用
  接口配置信息就是微信接入的接口,微信服務器會用GET請求訪問這個接口並匹配返回的信息,一致的話則認證成功(這裏的路徑http://xxxx.ngrok.io/api/getToken是根據你app.js裏的路由和api.js裏的get配置路徑定義的,由於加密校驗代碼在api.js裏,固然也能夠配置http://xxxx.ngrok.io或者http://xxxx.ngrok.io/api或者別的http://xxxx.ngrok.io下的接口可是相應的api.js裏的代碼也要對應上,具體能夠百度下express路由)
  Token要跟你api.js裏面的Token一致用來作加密校驗,不一致的話固然校驗也不會經過
  JS接口安全域名是之後網頁使用微信JSSDK時用,不加http https協議內容

  填寫接口配置信息而後點提交

  

  頁面返回結果失敗的話重試,可能會碰到網絡問題

  

  返回成功則接入成功了,能夠進行進一步開發了

  

相關文章
相關標籤/搜索