微信公众号模板消息推送

Python011

微信公众号模板消息推送,第1张

接口参数强调:

access_token:根据获取access_token接口使用appid和secret作为参数获取,而不能用授权时返回的access_token,授权时返回的是授权access_token,注意其与普通access_token的区别

获取普通access_token的接口

模板id需要在微信官方申请自己企业的推送模板,成功会获得一个模板id

1、模板消息实体类

2、access_token实体类

1、获取access_token方法

2、消息推送方法

目前websocket技术已经很成熟,选型Go语言,当然是为了节省成本以及它强大的高并发性能。我使用的是第三方开源的websocket库即gorilla/websocket。

由于我们线上推送的量不小,推送后端需要部署多节点保持高可用,所以需要自己做集群,具体架构方案如图:

Auth Service:鉴权服务,根据Token验证用户权限。

Collect Service:消息采集服务,负责收集业务系统消息,存入MongoDB后,发送给消息分发服务。

Dispatch Service:消息分发服务,根据路由规则分发至对应消息推送服务节点上。

Push Service:消息推送服务,通过websocket将消息推送给用户。

集群推送的关键点在于,web端与服务端建立长连接之后,具体跟哪个推送节点保持长连接的,如果我们能够找到对应的连接节点,那么我们就可以将消息推送出去。下面讲解一下集群的大致流程:

1>. web端用户登录之后,带上token与后端推送服务(Push Service)保持长连接。

2>. 推送服务收到连接请求之后,携带token去鉴权服务(Auth Service)验证此token权限,并返回用户ID。

3>. 把返回的用户ID与长连接存入本地缓存,保持用户ID与长连接绑定关系。

4>. 再将用户ID与本推送节点IP存入redis,建立用户(即长连接)与节点绑定关系,并设置失效时间。

5>. 采集服务(Collect Service)收集业务消息,首先存入mongodb,然后将消息透传给分发服务(Dispatch Service)。

6>. 分发服务收到消息之后,根据消息体中的用户ID,从redis中获取对应的推送服务节点IP,然后转发给对应的推送节点。

7>. 推送服务节点收到消息之后,根据用户ID,从本地缓存中取出对应的长连接,将消息推送给客户端。

其他注意事项:

具体步骤如下:

1、登陆微信,打开聊天页面,点击模板消息。

2、选择对应的模板,填写红色框框内的内容,点击“确定”即可。

3、填写完成后,点击发送,就可以了。

4、发送成功后在聊天信息中会显示如下。