准备工作
- 建立web工程,搭建服务器。 ---- 这里使用springBoot搭建
- 注册微信公众号(开发时用测试号即可)。
- 使用内网穿透软件(ngrok),使外网能访问你本地的应用,省去部署。
微信公众平台接入流程
微信公众平台的接入流程在官网中已经有较为详细的接入流程:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
主要步骤为:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
接入成功后,用户向公众号发送信息或点击菜单等操作时,微信服务器将推送相关的消息和事件到开发者配置好的服务器URL,开发者根据自身逻辑进行响应。
当用户向微信公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。
这里需要注意的是,如果开发者需要在多个平台(小程序、网站、公众号)中使用同一个用户体系,应接入微信开放平台,这里可通过获取用户基本信息中的UnionID来区分用户的唯一性。
接收微信服务器的消息
当开发者服务器与微信服务器对接时,需要注意的是我们应该要定义两个入口,分别作用在验证微信服务器消息以及接收微信服务器下发的消息。而这两个入口的api都是在配置服务器的URL时定义的,也就是说这两个api是同一个URL。但为什么又需要两个入口呢。
原因在于验证微信服务器请求和接收微信服务器下发数据的请求一个为get请求,一个为post请求。我们在对微信服务器下发的消息进行解析处理时,就是在post请求中的方法进行的。
验证微信服务器的api:
接收微信服务器下发数据的api:
需要注意的是,微信服务器下发的数据及开发者服务器处理返回后的数据格式都为xml,故在返回数据时需在@PostMapping中添加produces = “application/xml”,以保证返回xml格式数据。同时,在接收和返回处理中都应对xml进行解析或组装,以方便程序处理。
备注
- 在微信开发中使用了微信java开发工具包:https://github.com/Wechat-Group/weixin-java-tools
- 使用该工具时的一个特点是,开发者可以将消息管理、菜单事件、关注事件/取关事件、扫码事件、门店审核事件等事件分为不同的handler(处理器),再通过该工具提供的WxMpMessageRouter(消息路由)进行不同的事件路由处理。这样就有效地将每个事件处理分开,方便了开发者的开发思路。
- 在微信开发时需要使用公众号提供的access_token来对公众号各接口的调用,也是公众号的唯一接口调用凭证。这里需要注意的是,这个access_token与网页授权中的access_token是不一样的,前者是调用公众号各接口的唯一凭证,后者是通过OAuth2.0机制获得的access_token,用于网页授权时获取用户信息等功能。而且网页授权获取用户信息的接口与用户管理中获取用户基本信息的接口是不一样的,这点需要在开发时注意一下。