本文适合想接入第三方平台开发的同学,通过真实经验大致讲解一下相关业务,建议收藏以备不时之需。

一、什么是微信开放平台

微信开放平台地址

微信开发平台实际上就是给微信外部人员提供微信能力的平台,我们可以在这个平台创建相关的应用,管理对应的认证、授权信息,然后通过开放接口对接微信提供的种种能力。

其中,账号的申请需要公司主体的相关信息。

二、如何接入微信第三方平台的开发

2.1 注册开放平台账号

注册账号需要邮箱(这个邮箱贼恶心,不能是微信绑定过的,也不能是公众号平台绑定的,小程序平台绑定的也不行),然后需要提供公司主体等相关的信息

2.2 通过开发者资质认证

2.3 创建第三方平台

2.4 完善开发者信息

主要是权限集以及开发资料

  • 授权事件接收URL

    • 用于接收授权事件相关通知,也用于接收ticket (ticket的作用后面会说)
  • 消息与事件接收URL

    • 接收公众号或小程序消息和事件推送,比如说关注事件,扫码事件等
  • 消息校验Token 和 消息加解密Key

    • 主要是对消息的鉴权和解密作用
  • 授权发起页域名

    • 必须是这个域名内的网页才可以跳转到授权登陆页面,否则会报错
  • 公众号开发域名

    • 当你要做H5 页面需要使用 JS-SDK 去做一些和微信接口交互的功能时,你的发起域名必须时配置在公众号的开发域名上
  • 授权测试公众号/小程序列表

    • 未全网发布(测试阶段)可以使用授权能力的公众号或者小程序
  • 白名单IP地址列表

    • IP 通讯白名单,一般是服务器的出口IP,这个主要做安全通讯用的

三、接入流程

3.1 相关概念

为了更好理解接入的流程,我们需要先明白几个概念

3.1.1 微信开放平台

微信提供给开发者们使用的系统

3.1.2 微信开发者账号

微信开放平台的一个账号

3.1.3 第三方平台

属于开放平台的一种类型的应用,一个开放平台可以建五个定制化开发服务商和五个平台型服务商,一般sass模式的都是基于平台型的,像我们,我们会给开发环境,测试环境,予发布环境,生产环境各建一个第三方平台,实现资源隔离。

3.1.4 公众号

就是我们平常看到的公众号,本身公众号是可以自己开发能力的,但是有些企业不想重复造轮子,就会授权给其他的第三方平台来管理自己的公众号

3.1.5 第三方平台APPID (component_app_id)

第三方平台的唯一标识

3.1.6 公众号app-id

公众号的唯一标识

3.1.7 第三方平台ticket (component_verify_ticket)

每十分钟会向配置的授权事件接收URL推送aes 加密后的 ticket,作为第三方平台通讯的临时票据,服务器直接 return success 即可。

3.1.8 用户的 open_id

每个微信用户关注一个公众号后都会生成open-id, 它由公众号+用户微信作为唯一性,也就是同个微信号在不同的公众号open-id 是不一样的, 不同的微信号在同个公众号open-id 也是不同的

3.1.9 union_id

微信生态中,用户的平台级的唯一标识,当公众号和小程序都绑定在了同一个开发者账号中,那么这些公众号和小程序对同一个微信用户就会生成一个唯一的 union-id , 从而可以在公众号和小程序中识别到同一个微信用户

3.2 业务流程

图示是我总结的整个授权体系的流程图

简单来说,微信开放平台会定时的推送 ticket给你,这个ticket可以用来获取第三方平台的 component_access_token 作为调用第三方平台接口的凭证。通过调用第三方平台的接口获得预授权码,你可以可以组装链接给用户去访问扫码,组装的链接实际上是微信的域名,用户扫描并且确认授权后,微信就会给你一个属于该公众号的授权码,你通过该授权码就可以拿到公众号的授权信息(包括权限集,access_token,access_refresh_token , 过期时间等),其中 refresh_token 是用来刷新 access_token 的,这些凭证都是有有效期的,需要在过期前进行刷新。

因此,需要有定时任务可以手动帮我们去定时的刷新这些token,主要是第三方平台 component_access_token 的 公众号的 access_token 的刷新。

其中,相对比较麻烦的是,在获取ticket的时候,微信采用了 AES 加密算法,需要进行解密才能拿到译文,目前微信提供了 c++, php, java, python, c# 5 种语言的示例代码 ,你可以很方便的进行接入,但是没有提供 go 的 SDK ,下面我结合了GitHub 已有的案例,简单梳理一下对应的解密过程。

四、AES 解密(Go版本)

微信消息加解密技术介绍

大家可以先看看微信的介绍,再回头看看这边文章。

4.1 算法相关参数

这时候就要用到我们之前配置的开发者配置了。

  • token

    • 微信开放平台上,服务方设置的接收消息的消息校验 token,比如我上面设置的 mclinkstudywx
  • timestamp
    • 时间戳,回调的URL会附带该参数
  • nonce
    • URL 上原有参数,随机数
  • msg_signature
    • URL 上的参数,用来鉴权
  • msg_encrypt
    • body的xml 里面的参数,前文描述密文消息体
  • encodingAesKey
    • 即消息加解密 Key,长度固定为 43 个字符,从 a-z,A-Z,0-9 共 62 个字符中选取。由开发者在创建公众号插件时填写,后也可申请修改

4.2 处理流程

开发者先验证消息体签名的正确性,验证通过后,再对消息体进行解密。

1. 开发者计算签名,dev_msg_signature=sha1(sort(Token、timestamp、nonce, msg_encrypt))
2. 比较dev_msg_signature和URL上带的msg_signature是否相等,相等则表示验证通过。
3. Aes 解密
4. xml 格式解析
...e, err := wxencrypter.NewEncrypter(token, encodingAesKey, appId)if err != nil {return err}b, err := e.Decrypt(msgSignature, timestamp, nonce, deCodeInfo)if err != nil {return err}// 解析xmlvar verifyTicketReq http_service_model.ComponentVerifyTicketReqif err := xml.Unmarshal(b, &verifyTicketReq); err != nil {return err}
...type ComponentVerifyTicketReq struct {AppId                 string `xml:"AppId"`CreateTime            string `xml:"CreateTime"`InfoType              string `xml:"InfoType"`ComponentVerifyTicket string `xml:"ComponentVerifyTicket"`AuthorizationCode     string `xml:"AuthorizationCode"`
}

本着不重复造轮子的原则,在GitHub上找到了一个兄弟好几年前写的sdk,大家可以将其引入作为拓展包使用。

https://github.com/gomydodo/wxencrypter

由于这个仓库代码作者已经不维护了,建议大家拷贝一下自己改改嵌入到项目中,后续有需要可能会出一个开源的 sdk 给大家参考使用。

其中,需要注意的是

EncodingAESKey: 即消息加解密 Key,长度固定为 43 个字符,从 a-z,A-Z,0-9 共 62 个字符中选取。由开发者在创建公众号插件时填写,后也可申请修改。

AESKey: AESKey=Base64_Decode(EncodingAESKey + “=”),EncodingAESKey 尾部填充一个字符的 “=”, 用 Base64_Decode 生成 32 个字节的 AESKey;

因此实际上用到的AESKE 是上面的算法来生成的,如下图所示。

五、相关的微信接口汇总

  • 启动票据推送服务
  • 获取验证票据
  • 获取第三方component_access_token
  • 获取预授权码
  • 使用授权码获取授权信息
  • 获取/刷新接口调用令牌

六、关于微信用户唯一性的研究

如图,我们前面说到,一个开放平台账号是可以建多个第三方平台的。例如开放平台账号1有着A第三方平台和B第三方平台。
一个公众号可以授权给多个第三方平台(不过权限集有些是互斥的,比如一些权限集只能给其中一个),如公众号A 分别授权给了 开放平台账号1的 A第三方平台和B第三方平台,又同时授权给了开发平台账号3的C第三方平台。

这时候,你可能会有疑问,为啥有虚框和非虚框的绑定的公众号功能。

在后台系统,是有绑定公众号的功能的,你可以将旗下的公众号都绑定进去,那么这些公众号就会打通账号体系了,同一个微信号在这些公众号拿到的union_id 是一致的,而 open_id 是和公众号有关系,因此open_id 会不一致。

如果你是做的对外使用的第三方平台,目前我们是让客户自己去申请属于自己的开放平台账号,让客户自己在他的账号里绑定他们公司的公众号以及小程序等(毕竟每个客户的主体都不同,这是比较好的做法)。

七、总结

本文主要讲解了开放平台的一些操作指引,第三方平台的业务流程说明,常见业务概念的解释,以及微信打通账号体系的原理。算是一篇比较干货的内容,建议收藏,说不定后面你也需要搞类似的业务。

手把手教你微信第三方平台开发相关推荐

  1. 微信第三方平台开发错误码集合,各种 code

    微信第三方平台开发错误码集合 PHP static $codes = array("-1" => "系统繁忙","0" => & ...

  2. 微信第三方平台开发流程和总结

    微信第三方平台开发流程和总结 创建第三方平台 1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号.创建第三方平台 2).选择"平台型服务商类型"创建第三方平台.填写第三 ...

  3. 微信第三方平台开发接入

    微信第三方平台开发接入 授权流程接入步骤如下:( 微信https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=res ...

  4. 【除夕夜特辑】手把手教你微信公众号开发

    文章目录 文章主题 开发环境的搭建 接入微信公众平台 填写服务器配置 验证消息的确来自微信服务器 接收消息 回复消息 聊天机器人 回复图文消息 自定义菜单 菜单响应 模板消息 设置所属行业 发送模板消 ...

  5. 微信第三方平台开发流程

    一个微信公众号菜鸟的摸索之路 准备工作 注册申请开发者账号 开发者资质认证 附上地址:https://open.weixin.qq.com 创建第三方平台 进入管理中心->创建第三方平台 这里解 ...

  6. 微信端php 开发技术要求,微信第三方平台开发详解——PHP版

    申请第三方平台,这个很简单直接按照提示填写,下面的授权事件接收URL中获取的component_verify_ticket是会过期的,所以不要只获取一次,缓存起来每10分钟会发送一次,每1小时会更新一 ...

  7. 微信第三方平台开发,component_verify_ticket的接收

    首先是接收component_verify_ticket  大家在创建完成第三方平台之后,微信服务器就会以10分钟左右的时间通过当时填写的授权事件接收URL.发送ticket.但是在接收之后,需要进行 ...

  8. 微信第三方平台开发(二)---内网穿透

    开发第一步: 创建第三方平台,但是有个前提就是需要存放服务的服务器域名. 有个方法:修改后打包部署到服务器上,但是这很麻烦,的确. 那怎么可以做到本地开发呢? 这个时候就需要内网穿透这个神器了,找了很 ...

  9. 微信第三方平台开发 - 常见问题汇总

    最近在做有关微信第三方相关内容,但是并没有想象中的那么顺利,出现种种的问题,记录在这里 1.微信的消息推送问题 矛盾点: 用户通过页面授权成功之后,通过返回的页面时候的授权码code就可以拉取到用户的 ...

  10. 微信第三方平台开发三(消息加解密)

    代码根本不需要自己写,微信提供示例代码,参数需要"公众号消息校验Token","公众号消息加解密Key" 我是用java写的,出现了下列问题 1.报错:java ...

最新文章

  1. tfs连不上团队资源管理器问题
  2. 【机器视觉】 dev_set_color算子
  3. Thymeleaf的Spring数据
  4. 曙光服务器优势,5大核心优势 探秘曙光Cloudview三大平台
  5. sqlyog如何设置.时提示字段名_Spring boot 中使用 Tomcat时 用户名 密码如何设置呢?...
  6. linux查看ip访问日志文件,linux分析apache日志获取最多访问的前10个IP
  7. 前端开发发展简史-个人经验分享
  8. GPS模拟器与Windows Mobile模拟器
  9. 数字电压表设计程序用c语言at89c51 adc0808,51单片机的ADC0808数字电压表设计
  10. hdb3编码程序设计c语言,已知代码10000000001011,利用c语言程序编写AMI码跟HDB3码
  11. 关于ISIS协议TLV TAG标签的研究与简单实验
  12. 300字总结计算机flash,flash实训报告心得(共10篇).docx
  13. 安卓音频开发(四)使用lame把wav转mp3
  14. 一发入魂!15分钟让你快速入门Python
  15. hdu 1116 并查集和欧拉路径
  16. 物联网平台搭建的全过程介绍(三)阿里云物联网设备接入订阅发布之Android studio例程
  17. Windows 10 第七个大版本更新来了,10个全新功能安排得明明白白~
  18. 动漫Q版人物头部怎么画?
  19. 【刘二大人 - PyTorch深度学习实践】学习随手记(一)
  20. 李子的猜数游戏!(β版)

热门文章

  1. matlab算方差std,MATLAB 方差函数 var std
  2. Dell 电脑的重装系统以及关键散热驱动建议
  3. 2021-10-11 全国大学生软件测试大赛赛前学习参考资料
  4. 新版Namecheap域名转出注册商方法解锁及获取转移
  5. 解决win10+Ubuntu20.0.4双系统,win10时间错误问题
  6. android 动态表情包,动态表情包下载免费
  7. python如何取消上一步操作的快捷键_ai返回上一步的快捷键是什么
  8. python 组合优化_python中的多周期投资组合优化
  9. [C#][原创]Magick.NET使用时一些弱点简介
  10. android dns 设置,安卓手机怎么设置DNS Android手机修改DNS图文教程