nodejs微信公众号开发

本文主要介绍使用开发微信公众号
公众号注册
开发公众号第一步我们当然是先注册一个公众号啦!
到微信公众平台注册一个微信公众号,个人只能注册订阅号 。企业或者组织等可以注册服务号等,个人订阅号调用接口权限少 。按官网说明完成注册即可 。微信公众平台
公众号配置
完成了注册之后我们需要进行公众号配置,公众号的运行流程大致为用户发送消息到微信服务器->转发消息到开发者服务器->开发者服务器处理消息->返回消息到微信服务器->用户
所以呢,我们需要配置下才能让公众号收到的消息转发到我们的服务器 。微信开发可参考微信公众平台技术文档

nodejs微信公众号开发

文章插图

nodejs微信公众号开发

文章插图
如图所示,登录微信公众平台 , 在开发模块的基本配置中 , 主要配置的就是服务器配置 。
服务器地址:配置微信服务器要转发啊消息的地址(也就是我们要处理微信消息的服务器地址,该地址只能为域名)
令牌:开发者手动填写的一个令牌,认证时会用到 。
消息可以选加密和不加密 , 加密时我们需要实现消息解密吧 。
公众号配置完成之后我们就要来实现我们的服务器代码了 。
服务器实现
本文主要介绍使用提供服务、当然服务还可以由java,php等来提供 , 全凭个人喜好 。
//server.jsvar express = require('express');var app = express();var crypto = require('crypto');var bodyParser = require('body-parser');var wxRouter = require('./router/wxrouter')app.use(bodyParser.urlencoded({ extended: true }))/*app.get('/weixin', function(req, res){res.send('hello world');});*/app.use('/weixin',wxRouter) //weixin 下的所有请求交给wxRouter处理app.listen(3000);
以上主要是利用启动web服务 。使用请参考官网 。在这里可能有人会奇怪,我配置的服务器地址不是在3000端口上为啥会转发到这里呢 。答案是利用nginx做一个请求转发
//wxrouter.jsvar router = require('express').Router();var crypto = require('crypto');var wxService = require('../api/wxapi');function sha1(str) {var md5sum = crypto.createHash("sha1");md5sum.update(str);str = md5sum.digest("hex");return str;}router.get('/validateToken', function(req, res, next) {var signature = req.query.signature;var timestamp = req.query.timestamp;var nonce = req.query.nonce;var echostr = req.query.echostr;var oriArray = [];oriArray[0] = nonce;oriArray[1] = timestamp;oriArray[2] = "SDS232JK32KLDSscx";oriArray.sort();console.log(req.query)if(signature == sha1(oriArray.join(''))){console.log(echostr)res.send(echostr); }else{res.send("false");console.log("validateToken failed!");}next();});router.post('/validateToken',function(req, res,next){wxService.parseMsg(req,res);next();})module.exports = router;
路由我们需要实现2个请求的处理 。一个是的get请求,用于微信服务器向我们服务器的消息转发认证 , 只有通过该认证,微信服务器才会把消息转发到我们的服务器 。
然后最重要是的的post请求处理了,该路由是处理微信服务器消息的 。
微信服务器与我们服务器消息交互是基于xml的发送-回复消息
//wxapi.jsvar xml2js = require('xml2js');var Wx = {data: '',msgType: 'text',fromUserName: '',toUserName: '',content:'暂不支持处理该类型消息',parseMsg(req, res) {var buf = '';req.on('data', function(chunk) {buf += chunk;})req.on('end', () => {xml2js.parseString(buf, function(err, result) {if (err) {err.status = 400;} else {req.body = result;}});this.data = http://www.kingceram.com/post/req.body.xml;this.fromUserName = this.data.FromUserName[0];this.toUserName = this.data.ToUserName[0];switch (this.data.MsgType[0]) {case 'text':this.content = this.data.Content[0];this.handleTextMsg();break;default:// statements_defbreak;}var responseTxt = this.getXmlMsg();console.log(responseTxt)res.type('xml');res.send(responseTxt)})},handleTextMsg() {},getXmlMsg() {return `${new Date().getTime()}`;}}module.exports = Wx;
【nodejs微信公众号开发】我们使用来处理xml消息,写好程序打印下req.body.xml就知道这个将xml转化成便于我们使用的json对象了 。然后用简单的()方法通过公众号像用户发送消息 。至此 , 我们就完成了简单的微信公众号开发入门 。