微信第三方平台的授权过程整理

2023-10-27

最近碰到微信第三方平台这个东西,就研究了下。由于微信官方文档顺序不是很明确,我特别也整理了一下。
官方的概述是
公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认证后的开发者使用。
就是说第三方平台相当与一个中介来管理那些授权的公众号和小程序。

申请的流程可以去微信第三方平台的官方平台
https://open.weixin.qq.com/cgi-bin/frame?t=home/wx_plugin_tmpl&lang=zh_CN

以公众号为例子,公众号授权第三方平台流程是这样子的:
在这里插入图片描述
首先名词梳理下:
component_appid:第三方平台 ID,在申请通过之后可以查看。
component_appsecret:第三方平台密钥,申请之后可以查看,需要自己妥善保存,否则丢失或者忘记之后只能重置获取。
component_verify_ticket:微信后台每10分钟推送到第三方平台的授权接收 URL的 Ticket。
component_access_token:第三放平台的 Token,有效期2小时,需要根据 component_verify_ticket 获取。
pre_auth_code:从名称可以看出是预授权码,由 component_access_token 结合 component_appid 获取,其中用户授权给第三方平台需要通过预授权码才能完成整个授权。
authorization_code:用户授权时微信通过地址栏参数的方式传输给第三方平台,平台需要根据该 code 结合 component_access_token 以及 component_appid 获取授权公众号的信息。
authorizer_appid:授权方 AppID 其实就是公众号的 AppId(也就是下文中消息与事件接收 URL 中的 A)。
authorizer_access_token:公众号的 Access Token。
authorizer_refresh_token:主要用于第三方平台获取和刷新已授权用户的 access_token,只会在授权的时候提供,公众号 Access Token 也是2小时失效,所以需要根据 authorizer_refresh_token 进行刷新。

授权流程(以下所需的参数可参考上面的名词)
1.接收 component_verify_ticket。
该 Ticket 将会以 POST 的方式发送到(授权接收 URL,这是微信第三方平台注册时配置的参数),对消息进行解密,获取 Ticket。
微信的加密解密详见:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&lang=zh_CN

返回结果示例

<xml>
<AppId> </AppId>
<CreateTime>1413192605 </CreateTime>
<InfoType> </InfoType>
<ComponentVerifyTicket> </ComponentVerifyTicket>
</xml>

由于微信数据以 XML 方式进行推送,我们可以将xml转换为json;

2.利用 component_verify_ticket 获取 component_access_token。
该流程比较简单,以 HTTPS 协议并以 POST 方式传输数据即可获取 component_access_token(2小时以内有效,有上限,似乎是2000次)。请第三方平台做好令牌的存储(可以数据库,可以redis),在令牌快过期时(比如1小时50分)再进行刷新。
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_component_token
POST数据示例:
{
“component_appid”:“appid_value” ,
“component_appsecret”: “appsecret_value”,
“component_verify_ticket”: “ticket_value”
}

返回结果示例
{“component_access_token”:“61W3mEpU66027wgNZ_MhGHNQDHnFATkDa92llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA”, “expires_in”:7200}

由于返回的数据格式是 JSON 字符串,也可以转换成json;

3.利用 component_access_token 获取预授权码(pre_auth_code)。
预授权码用于公众号或小程序授权时的第三方平台方安全验证。
同样以 HTTPS 协议并以 POST 方式传输数据即可获取。
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
POST数据示例:
{
“component_appid”:“appid_value”
}

返回结果示例
{“pre_auth_code”:“Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQoa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw”,“expires_in”:600}

由于返回的数据格式是 JSON 字符串,也可以转换成json;
注意 pre_auth_code 有效期只有10分钟,所有没必要保存到数据库,用户授权时根据 component_access_token 生成之后,返回到html或jsp上生成一个拼接后的的授权 URL。

4.引导进入授权页面
在html或者jsp页面上,加一个按钮,地址为拼接的授权 URL。
授权页网址为:
https://mp.weixin.qq.com/cgibin/componentloginpagecomponent_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx
xxxx换成自己所需的参数。
在这里插入图片描述
注意:授权回调 URL,注意授权回调 URL 的域名必须与第一步的授权接收 URL域名保持一致,不然微信会报错

5.用户点击后将会跳转到微信授权页面
在这里插入图片描述
用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程。

6.授权后回调URI,得到授权码(authorization_code)和过期时间
授权流程完成后,授权页会自动跳转进入回调URI,并在URL参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)
我们需要根据这个 auth_code,到微信后台获取用户的授权公众号或者小程序接口调用凭证信息
走到这一步其实用户公众号就已经授权成功了。但是我们去要获取用户公众号的信息还需一下的操作。

7.使用授权码换取公众号或小程序的接口调用凭据和授权信息

该API用于使用授权码换取授权公众号或小程序的授权信息,并换取authorizer_access_token和authorizer_refresh_token。 授权码的获取,需要在用户在第三方平台授权页中完成授权流程后,在回调URI中通过URL参数提供给第三方平台方。请注意,由于现在公众号或小程序可以自定义选择部分权限授权给第三方平台,因此第三方平台开发者需要通过该接口来获取公众号或小程序具体授权了哪些权限,而不是简单地认为自己声明的权限就是公众号或小程序授权的权限。

http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx

POST数据示例:
{
“component_appid”:“appid_value” ,
“authorization_code”: “auth_code_value”
}
authorization_code就是之前获取的auth_code的值。

返回结果示例
{
“authorization_info”: {
“authorizer_appid”: “wxf8b4f85f3a794e77”,
“authorizer_access_token”: “QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM”,
“expires_in”: 7200,
“authorizer_refresh_token”: “dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY”,
“func_info”: [
{
“funcscope_category”: {
“id”: 1
}
},
{
“funcscope_category”: {
“id”: 2
}
},
{
“funcscope_category”: {
“id”: 3
}
}
]
}}
在这里插入图片描述
8.获取(刷新)授权公众号或小程序的接口调用凭据(令牌)
该API用于在授权方令牌(authorizer_access_token)失效时,可用刷新令(authorizer_refresh_token)获取新的令牌。请注意,此处token是2小时刷新一次,开发者需要自行进行token的缓存,避免token的获取次数达到每日的限定额度。

当换取authorizer_refresh_token后建议保存。

接口调用请求说明
http请求方式: POST(请使用https协议)
https:// api.weixin.qq.com /cgi-bin/component/api_authorizer_token?component_access_token=xxxxx

POST数据示例:
{
“component_appid”:“appid_value”,
“authorizer_appid”:“auth_appid_value”,
“authorizer_refresh_token”:“refresh_token_value”,
}

返回结果示例
{
“authorizer_access_token”: “aaUl5s6kAByLwgV0BhXNuIFFUqfrR8vTATsoSHukcIGqJgrc4KmMJJlKoC_-NKCLBvuU1cWPv4vDcLN8Z0pn5I45mpATruU0b51hzeT1f8”,
“expires_in”: 7200,
“authorizer_refresh_token”:
“BstnRqgTJBXb9N2aJq6L5hzfJwP406tpfahQeLNxX0w”
}

在这里插入图片描述
9.获取授权方的帐号基本信息
该API用于获取授权方的基本信息,包括头像、昵称、帐号类型、认证类型、微信号、原始ID和二维码图片URL。

需要特别记录授权方的帐号类型,在消息及事件推送时,对于不具备客服接口的公众号,需要在5秒内立即响应;而若有客服接口,则可以选择暂时不响应,而选择后续通过客服接口来发送消息触达粉丝。

(1)公众号获取方法如下:

接口调用请求说明

http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=xxxx

POST数据示例:
{
“component_appid”:“appid_value” ,
“authorizer_appid”: “auth_appid_value”
}
返回结果示例
{
“authorizer_info”: {
“nick_name”: “微信SDK Demo Special”,
“head_img”: “http://wx.qlogo.cn/mmopen/GPy”,
“service_type_info”: { “id”: 2 },
“verify_type_info”: { “id”: 0 },
“user_name”:“gh_eb5e3a772040”,
“principal_name”:“腾讯计算机系统有限公司”,
“business_info”: {“open_store”: 0, “open_scan”: 0, “open_pay”: 0, “open_card”: 0,
“open_shake”: 0},
“alias”:“paytest01”
“qrcode_url”:“URL”,
},
“authorization_info”: {
“authorization_appid”: “wxf8b4f85f3a794e77”,
“func_info”: [
{ “funcscope_category”: { “id”: 1 } },
{ “funcscope_category”: { “id”: 2 } },
{ “funcscope_category”: { “id”: 3 } }
]
}
}
在这里插入图片描述
(2)小程序获取方法如下

接口调用请求说明

http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=xxxx
POST数据示例:
{
“component_appid”:“appid_value” ,
“authorizer_appid”: “auth_appid_value”
}

返回结果示例:

{
“authorizer_info”: {
“nick_name”: “微信SDK Demo Special”,
“head_img”: “http://wx.qlogo.cn/mmopen/GPy”,
“service_type_info”: { “id”: 2 },
“verify_type_info”: { “id”: 0 },
“user_name”:“gh_eb5e3a772040”,
“principal_name”:“腾讯计算机系统有限公司”,
“business_info”: {“open_store”: 0, “open_scan”: 0, “open_pay”: 0, “open_card”: 0, “open_shake”: 0},
“qrcode_url”:“URL”,
“signature”: “时间的水缓缓流去”,
“MiniProgramInfo”: {
“network”: {
“RequestDomain”:[“https://www.qq.com”,“https://www.qq.com”],
“WsRequestDomain”:[“wss://www.qq.com”,“wss://www.qq.com”],
“UploadDomain”:[“https://www.qq.com”,“https://www.qq.com”],
“DownloadDomain”:[“https://www.qq.com”,“https://www.qq.com”],
},
“categories”:[{“first”:“资讯”,“second”:“文娱”},{“first”:“工具”,“second”:“天气”}],
“visit_status”: 0,
}
},
“authorization_info”: {
“authorization_appid”: “wxf8b4f85f3a794e77”,
“func_info”: [
{ “funcscope_category”: { “id”: 17 } },
{ “funcscope_category”: { “id”: 18 } },
{ “funcscope_category”: { “id”: 19 } }
]
}
}
返回参数说明
在这里插入图片描述

10.设置授权方的选项信息
11.推送授权相关通知
这两个在官方文档已经讲的很详细我就不重复。 官方参考文档地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1453779503&token=&lang=

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信第三方平台的授权过程整理 的相关文章

  • 【新手向】如何在npm上发布属于自己的包

    课程内容来自黑马程序员的网课 供博主自己检索知识和复习用 当然如果能帮助到你就更好了 作为一个程序员 你一定下载过各式各样的包来自己的项目实现更多功能 但是如何自己发布包呢 建立属于自己的包 第一步 你需要建立一个包 建立包很简单 只要满足
  • 数据科学与大数据分析之项目2-聚类

    聚类 项目介绍 项目开始 项目介绍 文件TreeDB csv包含258个树种的描述 数据由XX市议会开放空间和环境服务部管理处提供 已提供数据集作为公共空间最佳树木选择合作项目的一部分 假设你是该项目团队的一员 进一步假设你决定参与聚类分析
  • java image 透明_Java 生成半透明照片

    在许多实际运用中 我们常常需要将一张照片 图片 装换成半透明后再显示或保存 下面我们就来看看如何使用Java来生成 转换一张照片到半透明 1 基本思路 1 打开一张图片 BufferedImage imageOpen ImageIO rea
  • php密码输入密码,php打开页面输入密码的代码

    直接复制以下代码到模板 文件或者PHP文件 当打开页面时就得输入密码 写模板内容页时候也可以试用 把密码部分当做变量对应后台写入即可 更多功能自己想象
  • ubuntu下 jupyter登录上了 新建python3连接失败

    近期在使用anaconda jupyter的时候发现自己在新建jupyter文件的时候一直报连接错误 所以为了解决此问题做了如下两种方法 第一步 pip uninstall tornado pip install tornado 5 1 1

随机推荐

  • (四)Vue和React的编码方式对比----样式处理及样式污染

    经过3篇文章后我们可以编写一些简单的HTML结构并渲染只页面 可是前端重要的是什么 是样式 前端是给用户看的 所以样式处理也是很重要的一件事 如果一个前端静态效果都写不好 那多丢人 所以本篇介绍一下React和Vue的样式处理方式 以及一个
  • JS —— js中的节流与防抖

    文章目录 前言 一 节流 1 什么是节流 2 做节流可解决什么问题 3 如何做节流 二 防抖 1 什么是防抖 2 做防抖可解决什么问题 3 如何做防抖 总结 前言 最近有同学问到节流与防抖的相关知识点 于是乎 四处查资料 找一找 看一看 终
  • vuepress项目部署出现样式丢失,图片加载失败的问题

    之前在尝试部署vuepress项目时 出现了样式丢失 图片加载失败的问题 具体情况请继续往下看 本地测试 完全正常 在本地测试时的样式都是正常显示的 GitHub部署 样式丢失 打包部署到GitHub上时 布局和样式就完全乱了 同时还有一堆
  • 10、docker 安装 tomcat

    一 docker 环境下安装中间件总体步骤 搜索镜像 拉取镜像 查看镜像 启动镜像 服务端口映射 但其实 docker run 的时候 就会帮我们去配置的 registry 拉取镜像了 也就是 搜索镜像 这一步 其实是可有可无的 二 安装
  • Form 表单内有多个元素的使用方式

    产品中常有的一个需求 输入框后面有描述文案或其他组件 我们可能这样写
  • Java进阶:用案例源码解析EventLoopGroup,面试真题解析

    一 前言 有句话 正因为你优秀 所以难以卓越 刚开始听这句话还在上学 既不卓越 也不优秀 甚至可能还有点笨 但突然从某次爬到班级的前几名后 开始喜欢上了这种感觉 原来前面的风景是如此灿烂 优秀和卓越差的不是一个等级 当你感觉自己优秀后 还能
  • 6-机器学习启蒙- 深度学习: 图像搜索

    6 深度学习 图像搜索 github https github com mtianyan graphLabStartedML 深度学习 图像搜索 基于图片的相似度来选购商品 可视化商品推荐 我想买双新鞋 但是 mark 符合我的风格 我又感
  • openssl 1.0.2d安装使用教程

    本文简要介绍CA和证书的基础知识 并演示openssl 1 0 2d的安装 CA证书生成 用户证书申请 使用CA签发用户证书等内容 另外 可以参考本人的其他文章如nginx教程 进行生成证书的验证 By 泪痕之木 实验环境 操作系统 Cen
  • 彻底解决小程序内嵌web-view缓存问题

    前言 项目是通过web view内嵌在小程序里的vue单页应用 然而前几天发现明明发布了代码 在小程序入口进去看到的还是旧页面 尝试了各种操作 手动退出小程序 再次进入 删除 发现 小程序 重新进入 关闭微信 杀掉进程 重新进入 修改 Ng
  • R语言【基本计数原理与技巧——阶乘、组合、排列】

    加法原理定义 做一件事有n种方法 第一类有 m 1 m 1 m1 种方法 第二类有 m 2 m 2
  • AM335X外部看门狗及LINUX系统驱动移植(二)

    看门狗定时器 WDT Watch Dog Timer 是嵌入式系统的的一个组成部分 它实际上是一个计数器 一般给看门狗设置复位时间间隔 程序开始运行后看门狗开始计数 如果程序运行正常 过一段时间CPU应发出指令让看门狗置零 重新开始计数 如
  • python打砖块游戏算法设计分析_Python打砖块

    在家闲来无事用Python写了一个打砖块游戏 目前完成度一般 先来段视频 声音有点大 演示https www zhihu com video 1235510400411369472 游戏主要分那么几个板块 小球Ball 挡板Paddle 砖
  • ECS突发性能T6服务器可以用来做哪些事情?

    能做的事情还是挺多的 一般比如个人建站 WordPress建站 小微企业建站 小程序搭建 web开发部署等各种项目基本都是可以的 不过这类入门的就不太时候大型项目了 比如大型电商网站 比如人工智能 机器学习等就不要用突发型实例了 一般的小网
  • 利用maven-war-plugin实现不同环境下的配置文件

    我这是一个标准的maven的目录结构 配置文件都在src main resources根目录下 因为要改成多环境的配置 所以只有properties的文件改变了 公共配置可以原地不动 1 将配置文件放到不同的文件夹下 2 创建2个不同的pr
  • 默认值约束 [MySQL][数据库]

    默认值约束 DEFAULT 默认值约束的作用 给某个字段 某列指定默认值 一旦我们设置了默认值约束之后 在插入数据时 如果此字段没有显式赋值 则赋值为默认值 如果我们没有给一个字段添加默认值约束 这个时候我们如果没给一个字段显式赋值 那么这
  • Android编译之lunch命令

    google官方给的编译步骤 官方的详细编译步骤见 http source android com source building html 按照google给出的编译步骤如下 source build envsetup sh 加载命令 这
  • 巨头刷脸补贴大战自伊始就没有停止过

    随 着5G时代的到来 互联网 AI智能 云计算 物联网等技术的成熟 中国财政科学研究院应用学博士后盘和林认为 刷脸支付比密码支付更安全更便捷 我国在移动支付领域相较于其他国家来说一直处于领先地位 支付宝和微信支付两家在这一领域的竞争就从来没
  • QT笔记之QSpinBox和QSlider的封装使用

    文章目录 1 创建QT测试工程 2 右键添加 新建项 3 添加新的Qt Widget Class 叫做MySpinBox Slider QSpinBox和QSlider的组合使用 4 添加好QSpinBox和QSlider两个控件 并且调整
  • 牛顿第二定律沿流线流动粒子 Python 分析(流体力学)

    当流体粒子从一个位置移动到另一个位置时 它通常会经历加速或减速 根据牛顿第二运动定律 作用在所考虑的流体粒子上的合力 必须等于其质量乘以其加速度 F m a mathbf F m mathbf a F ma 实际上 不存在无粘
  • 微信第三方平台的授权过程整理

    最近碰到微信第三方平台这个东西 就研究了下 由于微信官方文档顺序不是很明确 我特别也整理了一下 官方的概述是 公众平台第三方平台是为了让公众号或小程序运营者 在面向垂直行业需求时 可以一键授权给第三方平台 并且可以同时授权给多家第三方 通过