首页 >> 大全

nodejs微信公众号开发

2023-12-24 大全 28 作者:考证青年

本文主要介绍使用开发微信公众号

公众号注册

开发公众号第一步我们当然是先注册一个公众号啦!

到微信公众平台注册一个微信公众号,个人只能注册订阅号。企业或者组织等可以注册服务号等,个人订阅号调用接口权限少。按官网说明完成注册即可。微信公众平台

公众号配置

完成了注册之后我们需要进行公众号配置,公众号的运行流程大致为用户发送消息到微信服务器->转发消息到开发者服务器->开发者服务器处理消息->返回消息到微信服务器->用户

所以呢,我们需要配置下才能让公众号收到的消息转发到我们的服务器。微信开发可参考微信公众平台技术文档

这里写图片描述

微信开发者工具开发公众号网页_node.js开发微信小程序_

如图所示,登录微信公众平台,在开发模块的基本配置中,主要配置的就是服务器配置。

服务器地址:配置微信服务器要转发啊消息的地址(也就是我们要处理微信消息的服务器地址,该地址只能为域名)

令牌:开发者手动填写的一个令牌,认证时会用到。

消息可以选加密和不加密,加密时我们需要实现消息解密吧。

公众号配置完成之后我们就要来实现我们的服务器代码了。

服务器实现

本文主要介绍使用提供服务、当然服务还可以由java,php等来提供,全凭个人喜好。

//server.js
var 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.js
var 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.js
var 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 = 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 `<xml><ToUserName>CDATA[${this.fromUserName}]]>ToUserName><FromUserName>CDATA[${this.toUserName}]]>FromUserName><CreateTime>${new Date().getTime()}CreateTime><MsgType>CDATA[${this.msgType}]]>MsgType><Content>CDATA[${this.content}]]>Content>xml>`;}
}
module.exports = Wx;

我们使用来处理xml消息,写好程序打印下req.body.xml就知道这个将xml转化成便于我们使用的json对象了。然后用简单的()方法通过公众号像用户发送消息。至此,我们就完成了简单的微信公众号开发入门。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了