问题描述
我们目前帮很多医院做公众号菜单,菜单跳转到我们的H5去预约挂号,预约挂号后我们需要把取号,停诊,等通知推送给用户。
开发过的公众号
- 健康青岛:服务号
- 番禺民生卡:服务号
- 阜阳健康在线:服务号
- 南阳市第一人民医院:订阅号
公众号接入步骤概述
接入微信公众平台开发,开发者需要按照如下步骤完成:
- 填写服务器配置:公众号后台填写
- 验证服务器地址的有效性
- 依据接口文档实现业务逻辑
- 文档链接
微信用户机制概述
微信给开发者提供了两套机制:
OpenID
每个用户对应每个公众号有一个唯一的 用户标识符
UnionID
每个用户对应每个微信开放平台账号的下的唯一的 用户标识符!弊端是一个开放平台只能绑定10个公众号。
使用场景是
- 开发者拥有多个公众账号,需要把用户体系进行打通时候
- 开发者需要进行,非微信环境下登入,网站的微信登入,app的微信登入等
OpenID 获取流程
文档入口:公众号开发文档 --> 微信网页开发 --> 微信网页授权
准备
在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头
具体流程
- 引导用户进入授权页面同意授权,获取code
- 引导用户点击一个链接,https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
- 参数说明:
- appid 是 公众号的唯一标识
- redirect_uri 是 授权后重定向的回调链接地址,请使用urlEncode对链接进行处理
- response_type 是 返回类型,请填写code
- scope 是 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
- state 否 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
- #wechat_redirect 是 无论直接打开还是做页面302重定向时候,必须带此参数
- 成功后,重定向到 redirect_uri/?code=CODE&state=STATE
- 通过code换取网页授权 access_token(与基础支持中的access_token不同)和 OpenId
- 调用接口:https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN 来请求 access_token 和 openId
- 尤其注意:由于获取到的access_token安全级别非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起
公众号推送机制概述
文档入口:公众号开发文档 --> 消息管理 --> 发送消息-模版消息接口
推送类型分类
- 模版消息
- 客服消息
- 被动推送
推送条件
- 模版消息:
- 限定 认证的服务号
- 每日每个账号限值 10w 次
- 每个号可以选择 25 种模版
- 样式:见附录
- 客服消息:
- 在用户与公众号产生交互行为之后 48 h 之内
- 交互行为类型:
- 用户发送信息
- 点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
- 关注公众号
- 扫描二维码
- 支付成功
- 用户维权
- 被动推送
- 发生在用户与公众号发生交互行为之后的立即消息回复
推送说明
模版消息推送的时候需要准备
- appId(公众号Id)
- openId(用户在这个公众号上的Id)
- 基础的 access_token(获取方式见附录)
所以,需要在用户使用我们 h5 应用的时候保存的信息有:appId、openId
推送方案选择
根据需求,可得出我们推送要求:
- 消息推送为异步:用户在 h5 页面进行预约,在公众号得到消息
- 消息内容,不适合为单一文本,不适合为图文消息,不合适为图片
由以上可得出模版消息较于适合于此类型推送!但是我们开发的医院当中有订阅号类型,所有如果选择模版消息作为我们的推送方案,则会导致我们需要开发两套标准!
而如果选择客服消息作为我们的推送方案的话,又会有两个问题限制:
- 48h 内的时间限制
- 样式限制
所以,我觉得为了用户体验服务号选择模版消息
实现
根据推送说明,我们可知现在我们的应用用户信息是不足以进行推送的。就此我们就需要新增两个表进行对应:
- 公众号表:
- appId: 公众号开发者 ID
- appSecret: 开发者密码
- WechartPublicId: 我们设定的公众号标识,可使用公众号的微信号(可用于获取公众号二维码)
- WechartPublicName: 公众号名称
- WechartPublic: 公众号类型,订阅号、服务号!用户查看是否有推送权限
- 用户登入过的公众号表:(一个用户可在多个公众号登入)
- appId
- openId:每个公众号的每个用户的唯一标识
- userId:我们之前定义的用户 ID,用于用户对应
在预约记录里需要添加一个字断 origin(appId) 用于推送时在何公众号发起推送。
在整个微信环境下,url 需要一直带一个参数 WechartPublicId,公众号标识。
整体流程
![](https://img.haomeiwen.com/i604678/0dd03fbf8d25e988.png)
查看大图
附录
模版消息样式
公众号获取二维码链接
普通二维码
链接:http://open.weixin.qq.com/qr/code/?username=csweigou
其中,参数 username 是公众号的微信号
带参二维码
为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。
基础接口调用凭证获取
文档入口:公众号开发文档 --> 开始开发 --> 获取 access_token
基础 access_token 是为唯一的全局调用凭据 需要 512B 大小,有效期为 2h (用于自定义菜单、群发消息接口验证凭证)
- 建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;
- 目前Access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡;
获取 access_token 接口:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明
- grant_type 是 获取access_token填写client_credential
- appid 是 第三方用户唯一凭证
- secret 是 第三方用户唯一凭证密钥,即appsecret
成功后返回;
{"access_token":"ACCESS_TOKEN","expires_in":7200}
网友评论