跳至主要內容

公众号

Emilia Zhen大约 3 分钟wechat

编辑模式

在微信公众平台提供的后台管理系统中,可以进行以下操作:

  • 设置消息自动回复
  • 自定义菜单的创建
  • 主动推送消息给用户
  • 编辑素材

微信公众号开发模式

基于微信公众平台的接口开发模式

  1. 用户在公众号内向公众号发送消息
  2. 微信服务器在接收到用户发送消息之后,将消息通过开发者提供的接口发送给开发者服务器
  3. 开发者服务器接收到消息之后,进行相关的业务处理,将处理结果返回给微信服务器
  4. 微信服务器再通过消息的形式将开发者服务器返回的内容展示给用户 公众号内页开发
  5. 用户通过公众号内的菜单,或者通过消息中的超链接直接向开发者服务器发送网页请求
  6. 开发者服务器像正常处理普通网页请求一样做出相应

开启公众号开发者模式

开发-基本配置-服务器配置-修改配置
微信服务器给开发者发送的get请求的携带参数信息:signatature微信加密签名,timestamp时间戳,nonce随机数,echostr随机字符串
开发者服务器接收到微信服务器发送来的get请求之后,首先需要对请求是否来源于微信服务器进行校验(签名校验),校验方式:

  1. 获取get请求参数中的timestap,nonce两个参数值,将这两个参数和token(之前在配置页面中的token)放到一个数组中
  2. 对数组元素进行字典排序
  3. 把数组中的三个元素拼接成字符串
  4. 使用 sha1 进行加密,获取加密后的签名
  5. 对比自己获取到的签名和GET请求参数中singnature是否一致,如果一致则证明校验成功;调用wx.config({})
npm i http-server -g
hs -o
hs -o -p 8888

xml2js

由于微信发给服务器的消息是xml格式的,所以需要从中提取出来有用的信息,必须先对xml格式进行解析

npm install xml2js -S
const xml2js = require('xml2js')
//创建一个将js对象转换成xml的工具对象
//创建这个对象的时候可以传递参数,改变一些内容,rootName改变最终生成的xml代码的根节点的名称;cdata这个会在必要的时候为节点加上<![CDATA[]]>;headless这个参数可以去掉doctype
const builder = new xml2js.Builder()
//创建一个将xml字符串转换成js对象的工具对象
//创建这个对象的时候可以传递参数,设置一些功能,explicitArray默认是true,会将所有的内容全部以数组的形式存放,设置为false只会在有多个内容的时候存成数组
const parser = new xml2js.Parse({ explicitArray: false })
//将一个xml字符串转换成js对象
var xmlStr = '<xml><ToUserName><![CDATA[toUser]]></ToUserName>'
parser.parseString(xmlStr, (err, resilt) => {
  console.log(result)
})
//将一个对象转换成xml字符串
var obj = {
  name: 'zs',
  age: 18,
}
var xml = builder.buildObject(obj)