微信公众号与开放平台第三方平台开发

概述

第三方平台通过获得公众号或小程序的接口能力的授权,代公众平台帐号调用各业务接口来实现业务。

  • 定制化型
    通过获取商家提供小程序或者公众号的appidsecret进行开发
  • 平台型
    通过获取authorizer_access_token代商家调用相关接口能力进行开发

流程

  1. 注册微信开放平台账号 进行企业实名认证
  2. 新建第三方平台,填写信息,设置权限集、接口地址、测试公众号/小程序白名单
  3. 写接口并通过步骤2中的白名单进行测试,并进行全网发布接入测试
  4. 申请全网发布并上线,上线后其他公众号即可进行授权
  • 关于接口地址配置
    授权接收地址、消息事件接收地址为服务器入口地址
    授权发起域名是前端页面所在域名,注意因referrer policy导致的授权入口页域名为空的报错
    公众号开发域名是前端页面所在域名
    白名单IP地址为出口地址(最好带端口号和不带端口号的都写上)

网站应用授权流程

适用于PC网站上用户微信扫码登录的场景


移动应用授权流程

  1. 验证票据 component_verify_ticket

    • 在第三方平台创建审核通过后,微信服务器会向其 ”授权事件接收URL” 每隔 10 分钟以 POST 的方式推送请求,通过对query的字符串和body中的二进制流进行解析最终可以转化为一个包含component_verify_ticket的xml
    • 有效时间为 12 小时
  2. 令牌 component_access_token

    • 通过验证票据component_verify_ticket调接口获取
    • 有效时间为 2 小时,在令牌快过期时(比如1小时50分),应重新获取。
  3. 预授权码 pre_auth_code
    通过令牌 component_access_token调接口获取,有效期为 10 分钟
    3.1. 引导用户进入授权网页(必须在第三方平台配置的url)进行扫码授权
    https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx
    或直接在手机打开网址进行授权
    https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect
    3.2. 用户完成授权后会进入授权网址中的redirect_uri,并在 URL 参数中返回授权码authorization_code和过期时间(redirect_url?auth_code=xxx&expires_in=600)

  4. 通过上一步中获得的授权码auth_code调用https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx,换取授权公众号或小程序的appidauthorizer_access_tokenauthorizer_refresh_token

  5. authorizer_access_token有效期2小时,如果过期可通过authorizer_refresh_token重新获取

  6. 获取授权公众号或小程序的详细信息

  7. 当公众号/小程序对第三方平台进行授权、取消授权、更新授权后也会向步骤1中接口推送消息,通过解析可以拿到授权的变更情况

  8. 拉取所有已授权的帐号信息 该文档目前已经迁移 暂时找不到


代公众号处理业务

通过authorizer_access_tokenappid可以代公众号处理业务

代公众号调用接口

需要公众号本身有该接口权限且授权了第三方平台该权限,此时本来需要公众号access_token的地方传入authorizer_access_token即可。
错误码:45009为调用次数超限,61007为未获取公众号对应授权,48001为公众号自身缺少该权限

  • 生成带参数(场景值)二维码(关注码)
    临时码无数量限制,但最多30天。永久码无时间限制,但最多10W个。
    场景值类型可以为scene_idscene_str之一,其值会回传在用户事件的event_key
  • 发送模板消息
    仅服务号可用,需先按照所属行业申请模板
    只能发给关注了公众号的用户
  • 发送订阅通知
    仅服务号可用,需先按照所属行业申请模板
    对已关注服务号的用户,通知下发到号内,未关注的下发到服务通知。
    需用户在网页等场景中订阅后,服务号可不限时间地下发一次对应的通知。(仅政务民生、医疗等特殊行业可多次下发)
  • 获取用户信息 /cgi-bin/user/info
    同一用户,对每个公众号的OpenID是唯一的。
    同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
    通过本接口可以根据OpenID获取用户unionid(如存在)和是否关注公众号,如已关注则还有关注时间、关注的渠道、关注时的场景码。(2021年12月起此接口不再能获得用户头像、昵称)。
代公众号处理消息和事件
  • 接收用户消息接收用户事件
    微信服务器会将粉丝发给公众号的消息,以及微信服务器发给公众号的事件推送(如菜单点击、关注通知等),发给该公众号所有已授权的第三方平台开发者服务器。

  • 被动回复用户消息/事件
    开发者在接收到上述消息和部分事件后,需要在 5 秒内响应,否则微信会重试三次。依然无响应或响应错误,则向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”。
    返回内容可以通过XML配置为文本、图片、语音、视频、音乐、图文。为如多个第三方平台都做出响应,则依照响应顺序依次生效

  • 主动发送客服消息
    在用户主动触发上述行为后的一段时间内,可以主动向用户发送客服消息

代公众号发起网页授权
  1. 令用户访问授权地址https://open.weixin.qq.com/connect/oauth2/authorize,同意后带着code跳转到符合【第三方平台 - 公众号开发域名】的自定义回调地址。其中scope的值可以为:
    • snsapi_base:静默授权,仅能用于获取openid
    • snsapi_userinfo:需要用户手动同意,可用于获取openid、unionid、头像、昵称等。可能触发网页快照机制,详见文末。
  2. 在回调地址中,通过code换取公众号access_token,并调用接口获取scope对应的用户信息
    注:使用第三方平台和直接微信公众号开发,接口相同但参数不同。且公众号的返回值里还会多一个is_snapshotuser用于判断是否进入了快照模式
  3. 在回调地址中做二次跳转,前往用户最终需要的前端页面
代公众号使用JSSDK

用户信息获取概况

  • 用户关注、向公众号发消息、扫描带参数二维码等操作后,收到的事件推送XML中含有openid
  • 通过openid可进一步调用/cgi-bin/user/info获取unionid及用户关注情况(是否关注、关注时间、关注的途径及场景码)
  • snsapi_base 模式的网页授权为静默授权,回调获取code可兑换openid
  • snsapi_userinfo 模式的网页授权,回调获取code可兑换openidunionid、头像、昵称等
    1. 从本公众号的会话或菜单中直接访问该授权地址,静默授权
    2. 通过扫码、和其他用户的会话链接等场景,直接访问该授权地址
      • 最近刚关注,或通过其他方式完成过本公众号授权,则静默授权
      • 以前关注过公众号,但长期未授权,则进入授权页面。此时如果拒绝授权,重定向不带code参数
      • 未关注公众号,总是触发网页快照机制
    3. 通过其他页面跳转到该授权地址(微信官方推荐的做法)
      即先告知用户授权的目的,然后用户主动交互跳转到授权地址。
      若最近完成过本公众号授权,则静默授权。否则会在原页面底部自动弹出授权弹窗,若拒绝则无事发生。若同意则完成重定向并带有code。
      暂不清楚该模式下是否会触发网页快照机制
网页快照机制

2022 年 7 月起,使用snsapi_userinfo权限时必须符合授权规范,否则强制变为网页快照模式(你不体面,微信就帮你体面)。
快照的授权流程看似静默授权,不会出现授权弹窗,且重定向后正常返回code,但实际上通过该code只能兑换假的用户信息(包括openid也是假的。且其昵称似乎固定为“微信用户”)。
最终跳转的页面会变为快照页面,是实际网页的静态预览,无法交互。仅点击底部同意授权后,会再次走正常的code流程,并抵达真正的最终页面。

  • 虽然官方文档没有明确说明,但已关注公众号的用户似乎不会触发网页快照机制
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容