发布网友 发布时间:2022-04-22 21:31
共3个回答
懂视网 时间:2022-05-15 04:37
接收消息当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
2.1 接收普通消息数据格式
XML的结构基本固定,不同的消息类型略有不同。
用户发送文本消息时,微信公众账号接收到的XML数据格式如下所示:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>createTime</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>
用户发送图片消息时,微信公众账号接收到的XML数据格式如下所示:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml>
其他消息消息类型的结构请查阅【微信公众平台开发文档】
对于POST请求的处理,koa2没有封装获取参数的方法,需要通过自己解析上下文context中的原生node.js请求对象request。我们将用到row-body这个模块来拿到数据。
2.2 先来优化之前的代码
这一节的代码紧接着上一届实现的代码,在上一届的基础上轻微改动了下。
'use strict' const Koa = require('koa') const app = new Koa() const crypto = require('crypto') // 将配置文件独立到config.js const config = require('./config') app.use(async ctx => { // GET 验证服务器 if (ctx.method === 'GET') { const { signature, timestamp, nonce, echostr } = ctx.query const TOKEN = config.wechat.token let hash = crypto.createHash('sha1') const arr = [TOKEN, timestamp, nonce].sort() hash.update(arr.join('')) const shasum = hash.digest('hex') if (shasum === signature) { return ctx.body = echostr } ctx.status = 401 ctx.body = 'Invalid signature' } else if (ctx.method === 'POST') { // POST接收数据 // TODO } }); app.listen(7001);
这儿我们在只在GET中验证了签名值是否合法,实际上我们在POST中也应该验证签名。
将签名验证写成一个函数
function getSignature (timestamp, nonce, token) { let hash = crypto.createHash('sha1') const arr = [token, timestamp, nonce].sort() hash.update(arr.join('')) return hash.digest('hex') }
优化代码,再POST中也加入验证
... app.use(async ctx => { const { signature, timestamp, nonce, echostr } = ctx.query const TOKEN = config.wechat.token if (ctx.method === 'GET') { if (signature === getSignature(timestamp, nonce, TOKEN)) { return ctx.body = echostr } ctx.status = 401 ctx.body = 'Invalid signature' }else if (ctx.method === 'POST') { if (signature !== getSignature(timestamp, nonce, TOKEN)) { ctx.status = 401 return ctx.body = 'Invalid signature' } // TODO } }); ...
到这儿我们都没有开始实现接受XML数据包的功能,而是在修改之前的代码。这是为了演示在实际开发中的过程,写任何代码都不是一步到位的,好的代码都是改出来的。
2.3 接收公众号普通消息的XML数据包
现在开始进入本节的重点,接受XML数据包并转为JSON
$ npm install raw-body --save
... const getRawBody = require('raw-body') ... // TODO // 取原始数据 const xml = await getRawBody(ctx.req, { length: ctx.request.length, limit: '1mb', encoding: ctx.request.charset || 'utf-8' }); console.log(xml) return ctx.body = 'success' // 直接回复success,微信服务器不会对此作任何处理
给你的测试号发送文本消息,你可以在命令行看见打印出如下数据
<xml> <ToUserName><![CDATA[gh_9d2d49e7e006]]></ToUserName> <FromUserName><![CDATA[oBp2T0wK8lM4vIkmMTJfFpk6Owlo]]></FromUserName> <CreateTime>1516940059</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[JavaScript之禅]]></Content> <MsgId>6515207943908059832</MsgId> </xml>
恭喜,到此你已经可以接收到XML数据了。
热心网友 时间:2022-05-15 01:45
微信公众号登陆管理的方式:
第一种电脑登陆:
1、通过百度搜索微信公众号,点击第一个网站如图;
2、然后输入你的登陆邮箱以及密码就可以进入微信公众平台实现管理了;
3、日常管理主要是处理留言消息,编辑图文消息,以及改善自动回复话术等;
第二种公众号手机助手登陆管理:
1、首先请在个人的手机微信里,搜索并关注微信官方的“公众号安全助手”账号,如图所示;
2、在公众号安全助手账号的功能栏中,随意点击一栏进入,如图所示;
3、接着请输入我们的微信公众号账号与密码,如图所示;
4、当登录成功以后,便可以看到自己微信公众号平台上的内容了,如当前用户总数、查看消息、群发消息等。
5、如下图所示,在这里可以查看用户发来的求助消息,也可以在这里直接回复他们,非常的方便。
6、又比如可以直接在手机上创建图文消息,如下图所示;
热心网友 时间:2022-05-15 03:03
公众*的辅助软件特别多,但是您可以选择一个页面简单,操作便捷的来进行自己的公众*管理,比如我本人使用的公众号管家、。
下载并安装软件,安装软件时注意此软件需要获得你手机的哪些权限,避免安装上垃圾软件,广告、木马等。
完成安装之后,使用的自己的微信公众号登陆。
进入主界面,首先看到的是消息,粉丝成员发送给你公众号的消息。
点击底部:“粉丝”,可以进入粉丝成员管理。如看看有哪些成员,成员信息等。
点击:“发现”,这里是公众号的管理平台功能,在电脑也是经验用到的,在手机几乎都可以实现。
点击“设置”可对这个公众号管理软件本身进行设置。
设置里面有“我的资料”、“通知设置”等,有用的功能就是通知设置了,若你公众号有消息可以在手机上收到并查看。
通知设置中除公众号消息通知,对软件本身设置还有夜间免打扰。在晚上收到消息软件会不出现提示声音。
微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动。进而形成了一种主流的线上线下微信互动营销方式。