当前位置: 首页 > 后端技术 > Node.js

阿里云应用第四个项目~依托阿里云平台,使用Node+express实现微信开发

时间:2023-04-03 16:44:27 Node.js

到此,阿里云服务器已经搭建的差不多了。可以把自己的网站部署到阿里云上,把地址IP转给朋友,大家就可以看到你的作品了。现在企业越来越重视学生的动手能力。如果能独立搭建个人网站,还是很受企业欢迎的。2018年新年来临之际,微信又把小程序推上了风口浪尖。相信大家都玩过跳跃游戏。相信小程序会被越来越多的人使用。本章我们不讲解小程序,只讲解微信的开发公众号。都是微信产品。小程序应该不会太难。1.申请公众号为了开发公众号,您必须申请公众号。地址是:https://mp.weixin.qq.com/。申请成功后登录。看完介绍,我们注册一个订阅号!服务号不允许个人注册,图文不符,请注意。选择类型后,按要求完成信息注册和公众号信息注册。2、申请成为开发者微信只对企业开放高级接口,想学开发却注册不了企业号怎么办?微信采取了一个折衷的方法,让程序员申请一个测试号,熟悉微信的开发公众号。配置服务器我们需要有一个服务器来部署程序。当用户操作公众号时,信息将发送到我们指定的服务器程序。当然,如果你只有这么简单的配置,肯定会报错。提示我们令牌验证失败。查看微信开发文档,发现开发者是通过检查签名来验证请求的(验证方式如下图)。如果确认GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。验证过程:1)将token、timestamp、nonce三个参数按字典顺序排序2)将三个参数字符串拼接成一个字符串进行sha1加密3)开发者得到的加密字符串可以与签名进行比对,表明请求来自微信,也就是说我们上面设置的URL其实就是验证程序的地址。程序需要完成的是接受指定的参数后进行排序,排序后进行加密。如果加密值是签名。返回值。直接上代码。对于此代码,我使用依赖于Node.js的Express框架。#安装express脚手架#npminstall-gexpress-generator@4#创建express项目app,然后安装依赖#expressapp#cdapp#npminstall接下来开发token验证程序(这里我只是贴出一些核心代码)varsha1=require('node-sha1');//验证router.get('/',function(req,res,next){//与服务器设置时设置的Token一致vartoken='helloweixin';//获取客户端发送的三个参数varsignature=req.query.signature;varnonce=req.query.nonce;vartimestamp=req.query.timestamp;varechostr=req.query.echostr;//排序和拼接成字符串varstr=[token,timestamp,nonce].sort().join('');//使用SHA1算法加密varsha=sha1(str);//判断加密值varresult=(sha===signature)?echostr+'':'failed';res.send(result);});3、回复信息验证成功后,就可以正式开始微信开发公众号了!下面是消息回复程序的实现。如果用户向公众号发送消息,我们如何接收用户请求信息并给出响应。没错,当用户发送消息时,微信会将用户的消息封装成XML发送给后台程序。那是哪个后台程序?就是刚才设置的url,不过这次是POST提交的。服务器收到请求后应该如何响应?公众号开发者文档给出说明,后台程序需要返回发送的xml,与请求的XML格式一致。ReceiverSenderCreateTime信息类型content那么express中如何接受xml类型的数据呢?身体解析器?只能接受form类型或者JSON类型,body-parser-xml中间件可以预处理xml格式的数据。#npminstallbody-parser-xml--savevarbodyParser=require('body-parser');require('body-parser-xml')(bodyParser);app.use(bodyParser.xml({limit:'1MB',//拒绝大于1MB的负载xmlParseOptions:{normalize:true,//修剪文本节点内的空白normalizeTags:true,//将标签转换为小写explicitArray:false//如果>1则仅将节点放入数组}}));然后使用req.body.xml获取接收到的xml数据。那么接收到数据后如何返回xml数据呢?可以使用object-to-xml模块。varo2x=require('object-to-xml');//回复消息router.post('/',function(req,res,next){//设置返回对象varobj={'?xmlversion=\"1.0\"encoding=\"utf-8\"?':null,xml:{'#':{ToUserName:req.body.xml.fromusername,FromUserName:req.body.xml.tousername,CreateTime:req.body.xml.createtime,MsgType:req.body.xml.msgtype,Content:'你好...,我是微信服务端程序'}}};res.header("Content-Type","text/xml")//将返回的对象转为xml并返回res.send(o2x(obj));});如果你是Java开发者,可以查看博客http://blog.csdn.net/z6918378...