美文网首页web 杂谈Web前端之路Web 前端开发
微信体制内,多公众号推送设计(兼容网站老用户系统)

微信体制内,多公众号推送设计(兼容网站老用户系统)

作者: 高少辉_骚辉 | 来源:发表于2017-06-19 08:51 被阅读202次

    问题描述

    我们目前帮很多医院做公众号菜单,菜单跳转到我们的H5去预约挂号,预约挂号后我们需要把取号,停诊,等通知推送给用户。

    开发过的公众号

    • 健康青岛:服务号
    • 番禺民生卡:服务号
    • 阜阳健康在线:服务号
    • 南阳市第一人民医院:订阅号

    公众号接入步骤概述

    接入微信公众平台开发,开发者需要按照如下步骤完成:

    1. 填写服务器配置:公众号后台填写
    2. 验证服务器地址的有效性
    3. 依据接口文档实现业务逻辑
    4. 文档链接

    微信用户机制概述

    微信给开发者提供了两套机制:

    OpenID

    每个用户对应每个公众号有一个唯一的 用户标识符

    UnionID

    每个用户对应每个微信开放平台账号的下的唯一的 用户标识符!弊端是一个开放平台只能绑定10个公众号。

    使用场景是

    • 开发者拥有多个公众账号,需要把用户体系进行打通时候
    • 开发者需要进行,非微信环境下登入,网站的微信登入,app的微信登入等

    OpenID 获取流程

    文档入口:公众号开发文档 --> 微信网页开发 --> 微信网页授权

    准备

    在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头

    具体流程

    1. 引导用户进入授权页面同意授权,获取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
    2. 通过code换取网页授权 access_token(与基础支持中的access_token不同)和 OpenId

    公众号推送机制概述

    文档入口:公众号开发文档 --> 消息管理 --> 发送消息-模版消息接口

    推送类型分类

    • 模版消息
    • 客服消息
    • 被动推送

    推送条件

    • 模版消息:
      • 限定 认证的服务号
      • 每日每个账号限值 10w 次
      • 每个号可以选择 25 种模版
      • 样式:见附录
    • 客服消息:
      • 在用户与公众号产生交互行为之后 48 h 之内
      • 交互行为类型:
        1. 用户发送信息
        2. 点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
        3. 关注公众号
        4. 扫描二维码
        5. 支付成功
        6. 用户维权
    • 被动推送
      • 发生在用户与公众号发生交互行为之后的立即消息回复

    推送说明

    模版消息推送的时候需要准备

    • appId(公众号Id)
    • openId(用户在这个公众号上的Id)
    • 基础的 access_token(获取方式见附录)

    所以,需要在用户使用我们 h5 应用的时候保存的信息有:appId、openId

    推送方案选择

    根据需求,可得出我们推送要求:

    • 消息推送为异步:用户在 h5 页面进行预约,在公众号得到消息
    • 消息内容,不适合为单一文本,不适合为图文消息,不合适为图片

    由以上可得出模版消息较于适合于此类型推送!但是我们开发的医院当中有订阅号类型,所有如果选择模版消息作为我们的推送方案,则会导致我们需要开发两套标准!

    而如果选择客服消息作为我们的推送方案的话,又会有两个问题限制:

    1. 48h 内的时间限制
    2. 样式限制

    所以,我觉得为了用户体验服务号选择模版消息

    实现

    根据推送说明,我们可知现在我们的应用用户信息是不足以进行推送的。就此我们就需要新增两个表进行对应:

    • 公众号表:
      • appId: 公众号开发者 ID
      • appSecret: 开发者密码
      • WechartPublicId: 我们设定的公众号标识,可使用公众号的微信号(可用于获取公众号二维码)
      • WechartPublicName: 公众号名称
      • WechartPublic: 公众号类型,订阅号、服务号!用户查看是否有推送权限
    • 用户登入过的公众号表:(一个用户可在多个公众号登入)
      • appId
      • openId:每个公众号的每个用户的唯一标识
      • userId:我们之前定义的用户 ID,用于用户对应

    在预约记录里需要添加一个字断 origin(appId) 用于推送时在何公众号发起推送。

    在整个微信环境下,url 需要一直带一个参数 WechartPublicId,公众号标识。

    整体流程


    查看大图

    附录

    模版消息样式

    公众号获取二维码链接

    普通二维码

    链接:http://open.weixin.qq.com/qr/code/?username=csweigou

    其中,参数 username 是公众号的微信号

    带参二维码

    为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

    目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。

    文档链接

    基础接口调用凭证获取

    文档入口:公众号开发文档 --> 开始开发 --> 获取 access_token

    基础 access_token 是为唯一的全局调用凭据 需要 512B 大小,有效期为 2h (用于自定义菜单、群发消息接口验证凭证)

    1. 建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;
    2. 目前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}

    相关文章

      网友评论

        本文标题:微信体制内,多公众号推送设计(兼容网站老用户系统)

        本文链接:https://www.haomeiwen.com/subject/ztqgqxtx.html