Skip to content

持续更新-----微信公众号开发学习记录

Notifications You must be signed in to change notification settings

gittig11/Wechat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

第一章 前期准备

简介

第一章主要内容:

  1. 了解微信号的种类特点
  2. 本地代理环境的搭建以及最入门的加密认证

学习建议:

  1. 域名服务器环境配置与利用QQ浏览器代理调试端口结合看
  2. 加密认证逻辑容易出错,耐心多看几遍

微信号分类和功能

基本分类

  • 企业号:为企业或组织提供移动应用入口,帮助企业建立与员工、上下游供应链及企业应用建的联系
  • 订阅号:比较适合于个人、小团队,主要是用于信息传播,帮助管理用户以及和用户互动,比如:撰写文章、咨询传播、消息定制等等

服务号:为企业和组织提供更强大的业务服务于用户管理能力,比如:支付、智能接口等

认证与非认证

公众号分为认证与非认证,认证的比非认证的能做更多事情
认证一般需要你有一个开户过的企业
订阅号认证与非认证的区别就是,认证账号别人可以直接在添加好友里搜索关键词找到你 订阅号与服务号的三点不同:

  1. 出现位置不同
  2. 单月发送消息数量不同,订阅号可以一天1篇,服务号一个月最多4篇
  3. 订阅号没有9大接口和支付功能

服务号9大接口

  1. 语音识别:识别语音,并翻译成文本
  2. 客服接口:公众号可以在你发送过消息的24小时内,向你回复消息
  3. OAuth 2.0网页授权:可以通过授权接口,请求用户授权,从而拿到更多用户的信息
  4. 生成带参数的二维码:公众号可以获得一系列携带不同参数的二维码,在用户扫描关注公众号后,公众号可以根据参数分析各二维码的效果,这些参数可以定制,从而可以实现更多分析结果,比如用户从哪来的
  5. 获取用户地理位置:公众号能够获得用户进入公众号会话时的地理位置,可以做微信导航
  6. 获取用户基本信息:公众号可以根据加密后的用户OpenID,通过一系列的参数交互,最终拿到用户基础信息,包括头像、名称、性别、地区
  7. 获取关注着列表:可以拿到所有关注者的OpenID,知道多少人关注你,或者是谁在关注你
  8. 用户分组接口:在后台为用户移动、创建、修改分组
  9. 上传下载多媒体文件:需要时在微信服务器上上传下载多媒体文件

订阅号接口

  1. 会话界面的自定义菜单
  2. 多客服接口,提供贴心快捷的客服服务
  3. 获取用户地理位置,精确提供服务
  4. 高级群发接口,实现更灵活的群发能力
  5. 用户分组接口,方便管理用户

域名、服务器及ngrok环境配置

把内网端口暴露到公网 http://www.ultrahook.com/faq gem install ultrahook ultrahook --k hl8sQ1i24bQEIGrhDqexBbQ7lUtVtPO7 localhost 1234

npm install -g localtunnel lt --port 1234 lt --port 3100 --subdomain yowangbinwecaht

配置、接入微信公众号

申请微信公众号

配置微信公众号后台

验证公众号

配置完成微信公众号后,点击提交微信服务器会发送GET请求将token,timestamp,nonce三个参数传至本地服务器

{ signature: 'df737dc55a7bc612a114b5e4a6052134c8060a3f',
  echostr: '4469749067976388605',
  timestamp: '1465461613',
  nonce: '82235853' }
  1. 将token、timestamp、nonce三个参数进行字典序排序 [token,timestamp,nonce].sort().join('');
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 将加密后的字符串与signature对比,如果相同,表示这个请求来自微信,我们直接原样返回echostr参数内容,接入验证就成功了

写段代码实现加密认证逻辑

为什么使用koa框架?

代码可以更精简、更易懂、对于反反复复的异步交互更适用这个框架实现

app.use(function*(next) {
    var signature = this.query.signature,
        echostr = this.query.echostr,
        timestamp = this.query.timestamp,
        nonce = this.query.nonce,
        token = config.wechat.token;
    var str = [token, timestamp, nonce].sort().join('');
    if (sha1(str) === signature)
        return this.body = echostr + '';
    else
        return this.body = 'error';
})

利用koa实现一个回声服务器

第二章 实战入门

简介

第一章主要内容:

  1. 了解微信中消息和回复的种类
  2. 完成一个简单的回复机器人小例子
  3. 使用QQ浏览器代理调试端口

学习建议:

对于有经验的可按需学习,新人新手应该稳扎稳打,需要注意票据这一节

利用QQ浏览器代理调试端口

简述7种消息6种回复

无论接收消息或回复消息均为POST请求,格式均为xml,意味着我们需要在后端对POST请求进行路由匹配以及xml数据结构的解析,从而判断消息的数据类型,回复消息的时候依然需要将数据包装成xml格式返回给微信服务器

7种消息

文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息、链接消息

6种回复

文本消息、图片消息、语音消息、视频消息、音乐消息、图文消息

注意事项总结

  1. 微信公众号接口只支持80端口
  2. 微信后台配置的URL是唯一能接收到消息、事件的入口,我们在公众号中的所有操作都是基于这个URL进行交互。
  3. 调用所有微信接口时几乎全部使用https协议
  4. 用户向公众号发送消息时,会传过来OpenID,这个OpenID是用户微信号加密后的值,每个用户在每个公众号中的OPenID是唯一的
  5. 在开发阶段,要留意报错信息,比如全局返回码这个非常非常重要,依靠全局返回码就是可定位错误的类型和大概位置,开发出了问题最终依然要靠自己动手解决
  6. 在和微信服务器交互的时候,需要满足各个接口的规范限制、调用频率限制,也要特别注意模板消息、用户数据等敏感信息的使用规范

从封装和抽象开始

koa要求中间件是一个generator函数,需要将中间件return回去

票据access_token打开新世界大门

access_token需要注意的两点

  1. access_token每2小时(7200秒)自动失效,需要重新获取
  2. 只要更新了access_token,之前的那个就不能使用了

解决办法

  1. 让系统每隔2个小时启动去刷新一个票据,这样无论何时我们内部调用接口,这个票据始终是最新的
  2. 为了方便频繁调用,我们需要把票据存储在一个地方,并且是唯一的一个地方

先撸一个自动回复出来

与微信服务器交互的五个步骤:

  1. 处理POST类型的控制逻辑,接受这个XML的数据包
  2. 解析这个数据包,获取数据包的消息类型或者事件类型
  3. 拼装定义好的消息
  4. 包装成XML的格式
  5. 在5秒内返回回去

第二章作业:实现一个统计访问次数的koa中间件

第三章

简介

第一章主要内容:

  1. 微信交互流程
  2. Promise如何使用
  3. Generator生成器
  4. Koa和Express中间件

学习建议:

没有疑问的直接进入第四章学习,新手新人加强对技术环节的印象,复习前面的学习内容

微信交互路程

Promise如何使用

Generator生成器

Koa和Express中间件

把第二章的Koa改造成Express项目

第四章

简介

第四章主要内容:

将微信提供的重要接口一个一个串下来,尤其是实现素材接口的调用

  1. 上传临时素材之图片和视频
  2. 永久素材接口
  3. 用户分组
  4. 获取用户私密信息
  5. 地理位置和用户资料

封装消息响应模块

自动回复各种消息

上传临时素材之图片和视频

永久素材接口——上传

永久素材接口——下载、删除、更新

永久素材接口——查询永久素材数量接口、获取永久素材列表接口

用户分组

获取用户私密信息(设置备注名、获取用户基本信息)

获取用户私密信息(获取用户列表)

地理位置和用户资料

About

持续更新-----微信公众号开发学习记录

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published