node.js连接微信企业号

来源:互联网 发布:nlpir java 编辑:程序博客网 时间:2024/06/04 17:56

1、首先,你需要拥有一个认证通过的企业号
2、在应用中心的自建应用中创建新应用
这里写图片描述
3、在创建的应用中填写可信域名,并启用回调模式。
这里写图片描述
4、在回调模式中需要填写你反馈信息的url,token与encodingAESKey都是随机生成的,当然也可以自己定义。
这里写图片描述
5、进入设置的权限管理,新建管理员组,把开发者拉进去,并分配应用权限和通讯录的相应权限。在这里我们可以得到 Corpid和secret。
这里写图片描述
6、首先在package.json中装几个包,装包命令:npm install xxxx –save 。–save代表装最新版本。

    "wechat": "^2.0.3",    "wechat-api": "^1.28.0",    "wechat-crypto": "0.0.2",    "wechat-oauth": "^1.1.1",

7、在routes下,新建一个weixin的js文件写回调模式的验证。

var wechat   = require('./weixin.js');module.exports = function(app) {   wechat(app);});

8、微信的token和encodingAESKey认证,这里需要三个参数, token, Corpid,encodingAESKey。还需要填写对应的url。之所以get的路由是/wechat,是因为微信里写的url为xxxxxxxx/wechat。

var wechat       = require('wechat');var crypto       = require('crypto');var WXBizMsgCrypt = require('wechat-crypto');var url = require('url');module.exports = function (app) {  app.get('/wechat',function (req,res){  var reqObj = url.parse(req.url, true);  var params = reqObj['query'];  var msg_signature = params['msg_signature'];  var timestamp = params['timestamp'];  var nonce = params['nonce'];  var verifyEchostr = params['echostr'];  var cryptor = new WXBizMsgCrypt( token,encodingAESKey, Corpid);  var result = cryptor.decrypt(verifyEchostr);  console.log(result.message);  res.send(result.message);});//微信公众号认证结束}

9、这一步完成之后上传到服务器,运行之后,在企业号点击测试,测试成功,成为开发者。
10、成为开发者之后,调用所有接口都需要accesstoken。这里顺便加上获取登陆企业号的用户的信息。企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect员工点击后,页面将跳转至 redirect_uri?code=CODE&state=STATE,企业可根据code参数获得员工的userid。

var weChatConfig = {    token: '',    Corpid: '',    corpsecret: '',    encodingAESKey: '',};var wechat   = require('./weixin.js');var express = require('express');var https = require('https');var http = require('http');var OAuth  = require('wechat-oauth');var client  = new OAuth(weChatConfig.Corpid, weChatConfig.corpsecret); app.get('/user/oauth', function (req, res){ //重定向的路由为redirectUrl 的值。      var redirectUrl = 'http://cardwechat.tyust.edu.cn';      var state = 'STATE';      var scope = 'snsapi_userinfo'      var url = client.getAuthorizeURL(redirectUrl, state, scope);      res.redirect(url);    });     app.get('/', function (req, res) {   // 重定向之后可以通过 req.query.code获取code。           var code  = req.query.code;           req.session.code = code;           var state = req.query.state;           req.session.state = state;           //如果code有值,再去获取accesstoken,获取accesstoken通过https协议。           if(!req.session.code){              //没有code。           }else{           https.get('https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='+weChatConfig.Corpid+'&corpsecret='+weChatConfig.corpsecret,function(_res){           _res.on('data', function(result) {                var json = JSON.parse(result);//将josn文件转化为对象                var accesstoken = json.access_token;                req.session.accesstoken = accesstoken;                //获取到accesstoken。加上code获取用户信息               https.get('https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token='+ req.session.accesstoken+'&code='+req.session.code,function(_res){                   _res.on('data', function(data) {                        var jsondata = JSON.parse(data);                        //获取到用户userid                        req.session.UserId = jsondata.UserId;                        req.session.DeviceId = jsondata.DeviceId;                        res.redirect('/name');                     });                     }).on('error', function(e) {                                                                          return callback(err);                     });             });             }).on('error', function(e) {                 console.log('--------------err'+err);                 return callback(err);             });           }      });    app.get('/name',function (req,res){    //用accesstoken与userid获取用户的其他信息。        https.get('https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token='+req.session.accesstoken+'&userid='+req.session.UserId,function(_res){                 _res.on('data', function(data) {                      var jsondata = JSON.parse(data);                      req.session.name = jsondata.name;                      if(!req.session.name){                       //没获取到报错                      }else{                      res.redirect('/home/' + req.session.state);                    }                   });                   }).on('error', function(e) {                       return callback(err);                   });    })
2 0
原创粉丝点击