开发流程

公众号基本配置(首先得有公众平台账号)

  1. 在开发菜单的基本配置中填写好基本配置项

    • 首先配置服务器地址、Token、和消息加密密钥(地址为开发者为微信验证留的接口、token可以随便填写,只要在验证的时候填写一致即可、消息加密三种模式,为了方便开发环境下可使用明文模式。加密项的加密方式可查看微信开发文档消息加说明
  2. 在配置完后这是提交肯定会出现token验证错误(坑),因为你还没有写验证代码,这是你在自己的服务端开始写验证代码。

    *微信会发送一个get请求携带四个参数,根据微信给出的规则进行加密然后验证,验证成功直接返回echostr。详情可查看微信文档验证消息的确来自微信服务器
  3. 这些都完成之后皆可以进行开发了。当然如果要调用微信的一些接口是需要用到access_token的。具体回去access_token的方式微信文档也讲得很清楚获取access_token。这次开发的功能是用户消息的接收和被动回复。不需要用到access_token,也不是特别复杂得多功能。主要记录一下这次开发中踩得各种坑

爬坑心路

首先是接收用户发送给供公众号,微信服务器再转发给开发者的
  1. 微信给开发者填写的url发送请求,除了公众号基本配置是使用的是get请求,发送用户消息使用的是post请求。所以使用开发的话,需要接收两种方式的请求getpost.
  2. 微信发送的post请求会携带用户发送的消息。但是发送的是xml格式的数据包,所以这对于node开发者来说是不太友好的。一般nodejs开发接收post请求会使用到body-parser这个包,但是他不支持接收xml格式的数据,所以直接在reqbody中是找不到微信发送的数据的,这就必须要自己进行转化了。
  3.  //使用req的事件来读取发送的请求信息
    req.rawBody = ''// 给req添加一个rawBody属性
    req.on('data', (chunk) => {
    req.rawBody += chunk;// 将数据保存到req.rawBody中
    }) req.on('end', () => { })
  4. 在请求结束后,使用xml2js这个包对xml数据进行处理,将xml数据转换成json数据
  5.  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>

比如!和<之间的空格和两个] ]中间的空格一定要去掉。

还有在回复的时候会有ToUserNameFromUserName两个参数,分别代表要将消息发送给谁(用户的openID),和消息的发送者(开发者公众号微信号).由于接受的微信的xml数据包这两个参数代表是反的ToUserNameFromUserName分别是使用户openID和开发者微信。所以一定不要弄反了。

集智robot微信公众号开发笔记的更多相关文章

  1. 微信公众号开发笔记(C#)

    这篇文章还不错,使用  .net , 对微信用户的想公众号发送的文字进行回复.比较简单,自己可以修改更复杂的回复. 微信公众号开发笔记(C#) 原文地址 需求分析 根据用户在微信上发送至价值中国公众号 ...

  2. 微信公众号开发笔记1(nodejs开发的)

    本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...

  3. 微信公众号开发笔记1(nodejs开发)

    本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有 ...

  4. 微信公众号开发笔记-验证token

    开发 话不多说我们直接进入主题 我们先去微信公众号申请一个公众号: 申请完成之后我们找到开发下的基本配置 然后找到进行基本配置,我们需要一个url地址来验证,这里的地址必需要是外网,Token是我们任 ...

  5. 微信公众号开发笔记2(nodejs)

    本篇主要记录调用微信各种api和功能实现 一.始于access_token 无论调用微信的什么api,都需要一个查询参数,就是我们每隔1小时或者2小时获取的access_token,笔记1中已经保证了 ...

  6. 微信公众号开发笔记3-sdk接入(nodejs)

    另一个2小时 access_token是需要2小时更新一次,在这里,又引入了一个2小时获取一次的字段,这个字段是: jsapi_ticket,这个字段是接入sdk的前提.与access_token类似 ...

  7. 微信公众号开发笔记1-获取Access Token

    获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...

  8. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  9. 微信公众号开发C#系列-9、多公众号集中管理

    1.概述 通过前面8篇关于微信开发相关文章的学习,我们已经对微信常用开发有了一个比较深入的了解.前面的文章都是基于某一特定公众号的,在现实业务中同一单位个体运营着不至一个公众号,此时就需要对多个公众号 ...

随机推荐

  1. 引用第三方dll引发的问题解决

    引用的程序集错误  如果引用第三方dll,调试出现引用的程序集出现错误,可以下载dependency,查看这个dll的依赖dll,如果本地电脑没有依赖dll或依赖dll出现问题,则下载或取代依赖dll ...

  2. 网站转变风格的css变化

    网站换肤,是一个比较老的话题了,理论很清晰,就是要根据js 来变换文件加载的css文件,根据需求来加载不同的css文件,有了这个基础就很明确要怎么做了,但是实际上还要记录当前用户的cookie  保证 ...

  3. 什么是IPFS?(二)

    IPFS的的"宏伟"目标是取代HTTP, 那么先来看看IPFS是如何工作的? IPFS为每一个文件分配一个独一无二的哈希值(文件指纹: 根据文件的内容进行创建), 即使是两个文件内 ...

  4. JavaScript之实例

    <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content=" ...

  5. 移动端常用的meta标签,媒体查询以及一些样式设置《转载收藏》

    <meta name="screen-orientation" content="portrait"> <meta name="fu ...

  6. java中一个引人深思的匿名内部类

    前两天去面试javaweb问到一个问题,在你的项目中有没有用到线程,我特么的一想,这东西不是在c层面的吗,所以说我不了解线程..... 后来回去想啊想啊,我操这特么的不是再问我事物的控制,消息队列的回 ...

  7. 01-Python的介绍_Python编程之路

    首先用一句业内非常出名的话来介绍Python "人生哭短,我用Python" 这也是Python宣传时经常说的一句话 从这句话中,可以非常清楚Python他到底优点在哪里,为什么要 ...

  8. 基于hi-nginx的web开发(python篇)——使用jinja2模板引擎

    模板引擎的使用在web开发中是不可避免和必要的.hi.py框架使用jinja2作为模板引擎. 为了使用hi.py提供的jinja2引擎,首先需要引入它: from hi import hi,templ ...

  9. 制作Linux登录欢迎界面

    1.登录提示语: 将提示语写入/etc/motd 文件 _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ ...

  10. JQuery代码实现上拉加载(不使用插件)

    <script type="text/javascript"> $(window).scroll(function() { //已经滚动到上面的页面高度 var sl_ ...