微信第三方开放平台研发实战

课程介绍

微信开放平台之第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台,让其帮助完成业务开发,且是基于微信 CRM 的必要组成模块之一。

对于刚开始接触第三方平台开发的人员来说,微信开发平台的文档相对比较复杂,现阶段网上博客文章较为杂乱零散,无法提供有效的指导。

通过本达人课的学习,读者将熟悉第三方平台中的授权流程、Token管理、相关功能的开发等以及通过全网发布的测试,最终上线。让您真正能够从0到1完成第三方平台的搭建。

为此本达人课主要分为三大部分,逐步介绍环境搭建到正式全网发布:

第一部分:准备阶段,让你了解第三方平台。主要包括平台的申请以及开发环境的搭建,为后面实战阶段做准备。

第二部分:实战阶段,针对业务场景进行具体的开发。主要包括平台授权流程以及利用基于第三方平台进行开发,包括场景二维码、分组以及自定义回复等功能。

第三部分:上线阶段。详细介绍如何满足微信端的测试进行上线发布。

作者介绍

李杨,高级研发工程师。OCP 与 PMP 资格认证,曾任某培训机构 Hadoop 讲师;擅长 Java 开发、数据库设计以及开发等。现就职于一家初创公司,有同名公众号“LeeYond”。

课程内容

导读:浅谈微信开放平台之第三方平台

导读

如果你针对微信公众号进行过开发,那么你肯定曾在微信公众号后台,配置过自己的域名服务器以及**等信息。之后,基于这个配置,对该公众号进行定制化开发,例如自动登录、个人中心、自定义二维码等,乃至当你针对第二个微信公众号进行开发时,可能仍需要进行重复的步骤,并配置不同的域名以及**等。于此同时,每次开发,你还要保存公众号的账号密码,并需要获取公众号所有者的授权,过程不安全且繁琐。

随着要维护的公众号数量逐步增加,需要投入的资源以及成本也随之增加(不同公众号需要不同的域名以及服务器资源)。此时你可能需要一个平台,能够同时管理这些公众号。无论具体的业务是什么场景,基于微信的开发必然是基于微信底层提供的各种接口,根据不同业务形态展开。为此我们可以通过抽象出功能层以及业务层来解构每个微信公众号的开发,其中功能层即微信提供的基础功能(回复消息/微信菜单管理/分组管理等),业务层即不同的业务场景。那么功能层就变成了第三方平台,一次开发供 N 个公众号使用,提供标准化的接口服务来满足业务的基础需求,业务层基于第三方平台进行其他更深的业务拓展,例如搭建 CRM 系统。

那么如何使用第三方平台呢?对于第三方平台来说,可以通过扫描二维码授权给平台,帮助 N 多个公众号代实现业务,不再需要理解繁琐参数设置,并且密码不提供给开发者,保证安全。根据微信官方介绍,第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力。

第三方平台其本质是对于微信公众号开发底层功能层的抽象,不同公众号通过其授权将自身业务嵌入平台当中。

第三方平台

业务特点

从业务特征上来说,第三方平台特点必须如图所示:

第三方平台业务特征

从具体的业务场景上说,第三方平台包括以下场景:

  1. 提供行业解决方案,如针对电商行业的解决方案,或针对旅游行业的解决方案等;
  2. 对公众平台功能的优化,如专门优化图文消息视觉样式和排版的工具,或专门定制的 CRM 用户管理功能,或功能强大的客服系统。

数据安全

在技术上,第三方平台是通过获得公众号或小程序的接口授权,然后代公众平台帐号调用各业务接口来实现业务的,例如其可以代公众号调用接口、代公众号处理消息和事件、代公众号发起网页授权等(其实部分功能与公众号开发重合)。所以第三方平台本质是针对单个公众号开发的升级。因此,第三方平台在调用各接口时,同样必须遵循公众平台运营规范。

理论上当用户将公众号授权给第三方平台之后,第三方平台从某种程度上已经接手公众号,可以利用公众号的 Token 进行各种操作,例如修改菜单、自定义回复、创建分组等等。

由于公众号授权给第三方平台,用户与公众号进行交互的信息将会传送到第三方平台的服务器上。微信为了保证数据的安全性,进行了较为复杂的授权流程,如下图所示:

image_1c9rsoma7m711opu1ts41tt9ap39.png-26.5kB

在后面的课程中,我会针对该流程进行详细讲解、分析,以及如何通过代码实现完整的授权。

同时要求用户与公众号交互的信息加密传输(单独的公众号开发的时候是可以选择明文传输),并且有一套相对较为负责的加解密流程进行数据传输。官方描述为:首先请注意,开发者在接收消息和事件时,都需要进行消息加解密(某些事件可能需要回复,回复时也需要先进行加密)。但是,通过 API 主动调用接口(包括调用客服消息接口发消息)时,不需要进行加密。

权限集合

微信为第三方公众平台提供的服务包括公众号以及小程序,其中前者提供了20多种、后者近10种不同的权限类型。由于不同行业具有不同的特征,所以这些权限集合是可以根据自己需求进行个性化选择的,例如客户系统,CRM 系统所需要的权限集合是不一样的。

并且当第三方平台进行全网发布时,根据选择不同的权限集合会进行相关的测试,只有当平台通过测试之后,其他公众号才能授权给该平台,利用该平台代实现业务。

所以综合来看第三方平台开发是一个相对复杂的工程,对于一个刚接触第三方平台开发的同学来说,想要快速上手是一个相对来说比较困难的事情。同时由于现阶段网络上关于第三方平台介绍的文章残次不齐,进行信息筛选将花费较多的时间成本。

达人课目标

第三方平台开发流程及问题

第三方平台从申请到全网发布主要经历如下几个步骤:

  1. 授权流程
  2. 公众号相关接口开发
  3. 小程序相关接口开发(不在此次课程范围)
  4. 测试以及发布。

对于步骤1来说,微信每10分钟会向服务器推送一个 Verfiy Ticket,平台需要利用该 Ticket 获取 Component Access Token,利用该 Token 结合用户授权码才可能完成整个授权过程。这里涉及到 Token 保存问题、Token 失效刷新问题、用户授权信息保存问题、用户授权的公众号 Token 刷新问题等。功能性的实现相对比较简单,但是作为系统来说,必须总体的设计才能稳定提供的服务。

对于步骤2来说,微信针对公众号提供大约20+权限集合,每一种权限集合可能对应不同的应用场景,并且每种权限集合需要的参数以及接口都不相同。如何合理的设计我们的类,使我们相对优雅的进行开发,这都是我们需要考虑的问题

对于步骤4来说,微信为了保障平台的稳定性,发布时需要进行测试,然而这是基于步骤1、2较好的完成的基础上,如何快速的通过测试,以及不同的测试报错如何快速定位,都是摆在我们面前的问题。

达人课特点

笔者当初开发时,进行相关信息检索发现文章质量较差,无法提供合理的指导,所以比较了解刚接触平台开发时可能遇到的具体问题。

为此本达人课将从第三方平台申请开始到发布结束,系统的介绍每个步骤可能遇到的问题,以及提供相对合理的解决方案。同时针对关键的一些功能进行单独的讲解,例如:个性二维码、自定义分组以及自定义回复等。

同时本达人课并不是单纯的讲接口的功能实现,而是结合具体的业务场景规划我们的数据库、相应类的设计以及具体的功能设计。并且会在课程中放上具体的步骤或者代码,有兴趣的同学可以按照具体的步骤进行开发,逐步搭建属于自己的平台。

结束语

本次开发主要使用的语言为 Java,采用 SSM(Spring+SpringMVC+Mybaits)框架,同时数据库表结构设计部分可能采用维度建模的思想。

如果有什么问题或者在课程中想要着重了解的地方,可以在我的读者圈或者关注我同名公众号“LeeYond”(微信号:Mist_L)与我联系,此外有意向换工作的 Java 小伙伴,也可以与我联系。

备注: 为了更好的学习本达人课,读者可能需要对 Java 有一定的了解,并对操作系统有一定的了解,熟悉 JDK 安装/Tomcat 安装以及相关环境变量配置等。为了更好的学习本课程,可能需要对 Maven 有一定的了解。

其次由于后面可能会涉及到数据库表结构的设计,所以需要对数据库也要有一定的了解。由于第三方平台开发相对比较复杂,读者最好首先熟悉一下官方文档以及相关流程。

第01课:准备阶段——开发环境准备以及第三方平台申请

本文的重点主要介绍第三方平台开发环境的信息,现列出相关的配置信息。

环境准备

硬件环境

  • 开发环境:普通 PC 机器(我的配置是 I5/8G/256G SSD);
  • 生产环境:根据具体的业务场景配置硬件需求。

软件环境

(1)开发环境:

  • 操作系统:Windows、Linux、Mac OS 都可以进行开发;
  • 软件要求:JDK1.7+,Tomcat8.X,MariaDB10.X(其他数据库也可以,但本文讲解后开发都使用 MariaDB),IntelliJ IDEA,开发框架选用的 SSM(Spring+SpringMVC+Mybatis);
  • 其他要求:由于申请第三方平台需要域名,可能需要内网穿透工具,例如花生壳或者其他类似工具,Maven环境,需要将 JAVA_PATH 等添加到环境变量中

(2)生产环境:

  • 操作系统:Linux(建议非必须)
  • 软件要求::JDK1.7+ ,Tomcat8.X, MariaDB10.X
  • 其他要求:服务器需要绑定域名(当然继续使用内网穿透工具也OK,但是1.专业性问题2.带宽问题),需要配置环境变量

(3)部分软件下载地址:

申请平台

申请平台之前必须有一个正在运行的 Web 环境,否则无法通过后面的申请,为此我们需要先创建一个项目之后才能进行申请。

创建项目

(1)主要利用 Maven 创建开发项目,以 IntelliJ IDEA 为例,大致过程是选择 “File” -> “New” -> “Project” -> “Maven” -> “Create From archetype”。

选择 webapp 之后点击 “Next”:

image_1c9rogkoa94074fqbs12cg1nqim.png-400.2kB

根据具体情况填写相关信息之后点击“Next”:

image_1c9rolua3mt3ck71e9n1svlil813.png-26.6kB

为了加快项目创建,我一般会配置 archetypeCatalog 如下图所示:

image_1c9rp1mlq1m035rahnq1oes13jr20.png-113.3kB

保存之后点击“Next”配置项目保存路径:

image_1c9rp43tm1qpsc1b16n5u1me82d.png-29.2kB

点击“Finish”完成创建。

(2)配置 Spring+SpringMVC+Mybatis 环境。网上有太多的文章,大家可以直接搜索,进行配置。

(3)设置域名(如果有域名的话,可以跳过)。利用内网穿透工具绑定二级域名,并且启动服务。

(4)启动 Tomcat。此部分大家可以上网查相关资料,在此略过。

申请平台

1.点击微信开发平台信息填写页面,注册账号。

2.开发者资质认证。

登录之后到 “账号中心” -> “开发者资质认证”,其中该资质认证必须是企业,不能是个人,并且还要300元,审核还是很快的,似乎一天不到。

3.申请平台。

申请主要分为四步,包括输入基本信息、选择权限、填写开发资料、等待审核,进入“管理中心”-> “第三方平台” -> “创建第三方平台”进入申请页面。

(1)输入基本信息

根据实际情况填写输入基本信息并上传 ICON,点击“下一步”:

image_1c9rq2fge1esdq7p1ao41to6fge2q.png-235kB

(2)选择权限

本课程主要针对公众号,在公众号下面选择权限集合如下图所示:

image_1c9rq6unr1tk4qttf8811oj14r1m.png-172.5kB

其中“开放平台账户管理”是实现基于微信 CRM 中的必须选择的选项(当然选择的每一个都很重要)。

(3)填写开发资料(重要)

1)授权流程相关。

image_1c9rqbto21oi8d1v1qqi1ng87kr13.png-63.8kB

  • 授权发起域名:就是你本机的域名,前面不需要加 http,例如 “http://www.baidu.com”,请填写 “www.baidu.com”。
  • 授权测试公众号列表:由于还没全网发布,所以需要添加你需要用来测试开发公众号的原始 id。
  • 授权事件接收 URL:以上面创建 project 为例,“www.baidu.com/gitchat/component/event” 其中粗体根据实际情况填写,申请过程中不会验证该 URL 有效性。这个 URL 主要接收微信的一些参数,相当重要。

2)授权后实现业务。

image_1c9rqqbls7ck1757i2i1s621mde13.png-114.9kB

  • 消息校验 Token:**,根据自己喜好按照要求填写;
  • 消息加解密 Key:长度43的字符串,随意发挥;
  • 消息与事件接收 URL:此 URL 是每个公众号授权之后发消息到你服务器上的 URL,以截图为例,A、B 公众号授权之后,A 的消息会发送到 “www.baidu.com/gitchat/wechat/A/callback”,B 的消息会发送到 “www.baidu.com/gitchat/wechat/B/callback”,其中 “/gitchat/wechat/\$APPID\$/callback” 根据实际情况填写,但是主要域名必须授权流程中授权发起页域名一致。
  • 公众号开发域名:与授权流程中授权发起页域名一致。并且需要下载 txt 文件,并保存到 Tomcat 下面的 webapps/ROOT。不需要重启服务。

3)其他。

根据实际情况填写你的本机 IP,不然后期无法刷新相关 Token。

image_1c9rr9bp01c7m187dqni14lgh8b1g.png-19.3kB

点击提交,等待审核。

(4)等待审核

基本上,这个审核还是很快的,1-2天基本上都能审核完成。

当审核通过之后,点击详情查看平台的 AppID 以及 AppSecret(妥善保存),后面需要根据这两个 ID 进行平台 Token 的刷新等。

附录: 由于后面加解密可能会出现异常:“java.security.InvalidKeyException:illegal Key Size”,请在官方网站下载 JCE 无限制权限策略文件(JDK7 的下载地址,JDK8 也可以用该文件)。

下载后解压,可以看到 localpolicy.jar 和 USexport_policy.jar 以及 readme.txt,如果安装了 JRE,将两个 Jar 文件放到 %JRE_HOME%\lib\security 目录下覆盖原来的文件;如果安装了JDK,将两个 Jar 文件放到 %JDK_HOME%\jre\lib\security 目录下覆盖原来文件。

第02课:实战阶段——公众号授权流程解析
第03课:实战阶段——平台以及用户 Token 存取方案设计及开发
第04课:实战阶段——场景二维码开发
第05课:实战阶段——分组功能开发
第06课:实战阶段——自定义回复功能开发
第07课:上线阶段——全网发布以及上线

阅读全文: http://gitbook.cn/gitchat/column/5acf5c1ff8164454a349ed6f