8.5.1 公众账号托管平台原理
微信公众账号托管平台是一套程序服务多个公众账号的典型案例:有些企业没有开发能力,但编辑模式又不能满足要求,这时可以选择使用第三方建设的公众账号托管平台,例如微盟、微俱聚、微小信等。在托管平台上,每个企业可以选择自己需要的功能(也就是用户能够在公众账号上使用的功能,如天气预报、智能客服、抽奖等),还能够设置关注提示语、交互用语、自定义菜单等。
托管平台最终会为每个企业分配一个URL和Token,企业将分配到的URL和Token填写在公众平台开发模式的接口配置信息中,这样企业的公众账号就拥有了在托管平台上选择、设置的功能。托管平台的原理示意图如图8-7所示。
图8-7 微信公众账号托管平台原理示意图
从图8-7可以看出,微信服务器和托管平台都维护着一张配置表,微信服务器配置表主要记录了各企业公众账号配置的URL和Token,而托管平台的配置表主要记录了各企业公众账号与功能的对应关系。当用户向公众账号A(企业A的公众账号)发送消息时,消息的处理流程如下:
1)用户向公众账号A发送消息,消息从微信手机客户端传递到微信服务器;
2)微信服务器根据配置表将消息POST到公众账号A的URL上(由托管平台分配给企业A的);
3)托管平台接收到消息,根据URL能够判断出请求来自公众账号A的用户,再结合配置表能够判断出用户在使用公众账号A的哪个功能;
4)托管平台调用对应功能的处理方法对用户的请求进行处理、响应;
5)微信服务器接收到响应后,将消息通过公众账号A回复给用户。
上述流程中最关键的是步骤3),托管平台能够根据URL判断出是哪个公众账号的请求,这就意味着托管平台给每个公众账号分配的URL不一样。我们知道,每个URL都指向托管平台中的一个能够处理微信服务器HTTP请求的Servlet,那么托管平台是用同一个Servlet处理所有公众账号的请求,还是为每个公众账号单独开发一个Servlet,答案显然是前者。如果要做到多个不同的URL指向的是同一个Servlet,就需要在Servlet的访问地址后面带上参数,每个公众账号的参数值不一样,这正是一套程序服务多个账号的核心所在。