集智robot微信公众号开发笔记
开发流程
公众号基本配置(首先得有公众平台账号)
- 在开发菜单的基本配置中填写好基本配置项
- 首先配置服务器地址、Token、和消息加密密钥(地址为开发者为微信验证留的接口、token可以随便填写,只要在验证的时候填写一致即可、消息加密三种模式,为了方便开发环境下可使用明文模式。加密项的加密方式可查看微信开发文档消息加说明
- 在配置完后这是提交肯定会出现token验证错误(坑),因为你还没有写验证代码,这是你在自己的服务端开始写验证代码。
*微信会发送一个get请求携带四个参数,根据微信给出的规则进行加密然后验证,验证成功直接返回echostr。详情可查看微信文档验证消息的确来自微信服务器 - 这些都完成之后皆可以进行开发了。当然如果要调用微信的一些接口是需要用到
access_token的。具体回去access_token的方式微信文档也讲得很清楚获取access_token。这次开发的功能是用户消息的接收和被动回复。不需要用到access_token,也不是特别复杂得多功能。主要记录一下这次开发中踩得各种坑
爬坑心路
首先是接收用户发送给供公众号,微信服务器再转发给开发者的
- 微信给开发者填写的
url发送请求,除了公众号基本配置是使用的是get请求,发送用户消息使用的是post请求。所以使用开发的话,需要接收两种方式的请求get和post. - 微信发送的
post请求会携带用户发送的消息。但是发送的是xml格式的数据包,所以这对于node开发者来说是不太友好的。一般nodejs开发接收post请求会使用到body-parser这个包,但是他不支持接收xml格式的数据,所以直接在req的body中是找不到微信发送的数据的,这就必须要自己进行转化了。 //使用req的事件来读取发送的请求信息
req.rawBody = ''// 给req添加一个rawBody属性
req.on('data', (chunk) => {
req.rawBody += chunk;// 将数据保存到req.rawBody中
}) req.on('end', () => { })
- 在请求结束后,使用
xml2js这个包对xml数据进行处理,将xml数据转换成json数据 req.on('end', () => {
//在这里使用xml2js对xml数据进行处理,获取用户发送的信息,然后回复用户信息
})
进行用户信息回复
微信服务器在请求五秒之内没有回复的话,回发起第二次第三次请求。三次都没有响应回给用户报错,所以如果无法再五秒之内回复的话,可以直接回复成功,或者一个空的字符串''.
消息回复最重要的就是回复消息的格式,一定要按微信给出的消息回复的格式来进行回复,不然也会报错,可以参考被动回复用户消息.
注意:如果复制微信给出的消息模板一定要去掉其中的空格,因为不符合xml数据的格式,所以也会报错
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
比如!和<之间的空格和两个] ]中间的空格一定要去掉。
还有在回复的时候会有
ToUserName和FromUserName两个参数,分别代表要将消息发送给谁(用户的openID),和消息的发送者(开发者公众号微信号).由于接受的微信的xml数据包这两个参数代表是反的ToUserName和FromUserName分别是使用户openID和开发者微信。所以一定不要弄反了。
集智robot微信公众号开发笔记的更多相关文章
- 微信公众号开发笔记(C#)
这篇文章还不错,使用 .net , 对微信用户的想公众号发送的文字进行回复.比较简单,自己可以修改更复杂的回复. 微信公众号开发笔记(C#) 原文地址 需求分析 根据用户在微信上发送至价值中国公众号 ...
- 微信公众号开发笔记1(nodejs开发的)
本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...
- 微信公众号开发笔记1(nodejs开发)
本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...
- 微信公众号开发笔记-验证token
开发 话不多说我们直接进入主题 我们先去微信公众号申请一个公众号: 申请完成之后我们找到开发下的基本配置 然后找到进行基本配置,我们需要一个url地址来验证,这里的地址必需要是外网,Token是我们任 ...
- 微信公众号开发笔记2(nodejs)
本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...
- 微信公众号开发笔记3-sdk接入(nodejs)
另一个2小时 access_token是需要2小时更新一次,在这里,又引入了一个2小时获取一次的字段,这个字段是: jsapi_ticket,这个字段是接入sdk的前提.与access_token类似 ...
- 微信公众号开发笔记1-获取Access Token
获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...
- 微信公众号开发C#系列-11、生成带参数二维码应用场景
1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...
- 微信公众号开发C#系列-9、多公众号集中管理
1.概述 通过前面8篇关于微信开发相关文章的学习,我们已经对微信常用开发有了一个比较深入的了解.前面的文章都是基于某一特定公众号的,在现实业务中同一单位个体运营着不至一个公众号,此时就需要对多个公众号 ...
随机推荐
- View滑动的常见方式
今天头条的面试官问起了实现View滑动的方式,其实前几天刚刚看过,但还是没能答上来,这里再来总结一遍. 1.使用scrollTo/scrollBy 为了实现View滑动,Android专门提供了这两个 ...
- 发个2012年用java写的一个控制台小游戏
时间是把杀狗刀 突然发现了12年用java写的控制台玩的一个文字游戏,有兴趣的可以下载试试哈汪~ 里面难点当时确实遇到过,在计算倒计时的时候用了多线程,当时还写了好久才搞定.很怀念那个时间虽然不会做游 ...
- smoking的安装和配置
yum install -y perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-IO-Socket-SSL perl- ...
- 关于 BigDecimal处理float、double数据
Big Decimal 在java中,对于float与double中的数据,总会因为精度问题而丢失数据的准确性,也就是说对于两者所处理的得到的值是无限接近于那个数,而并非一个精确数字,而对于电商中所涉 ...
- cmd 命令大全
1.windows 系统定时关机 定时关机:shutdown -s -t 300 at 18:30 shutdown -s 取消定时:shutdown -a 注意:300为秒数,在windows co ...
- 使用 win10 的正确姿势
17年9月初,写了第一篇<使用 win10 的正确姿势>,而现在半年多过去,觉得文章得更新一些了,索性直接来个第二版吧. -----2018.3.24 写 一. 重新定义桌面 我的桌面: ...
- X509证书认证流程介绍
X509证书介绍X.509 是由国际电信联盟(ITU-T)制定的数字证书标准,相信这是人尽皆知的了,目前X.509证书据我所知有三个版本,.net中使用的是x.509-2,X.509-2 版引入了主体 ...
- 笔记:I/O流-ZIP文档
ZIP文档以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含诸如每个文件名字和所使用的压缩方法等信息,在 Java 中可以使用 ZipInputStream 来读入ZIP 文档,getNe ...
- mysql limit 接收变量
参考文章:https://blog.csdn.net/ljz2009y/article/details/7887743 PREPARE s1 FROM 'SELECT * FROM t LIMIT ? ...
- Redis sentinel & cluster 原理分析
1. Redis集群实现分析 1.1 sentinel 1. 功能 Sentinel实现如下功能: (1)monitoring--redis实例是否正常运行. (2)notification-- ...