惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
SecWiki News
SecWiki News
Help Net Security
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 最新话题
H
Heimdal Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
A
Arctic Wolf
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
T
Threatpost
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
PCI Perspectives
PCI Perspectives
AWS News Blog
AWS News Blog
IT之家
IT之家
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
V
Visual Studio Blog
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
小众软件
小众软件
Google Online Security Blog
Google Online Security Blog
N
News | PayPal Newsroom
博客园_首页
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Secure Thoughts
I
Intezer

博客园 - 稻草人.Net

Python多环境管理神器pyenv+poetry python包管理利器poetry和conda使用简介 Spring REST 接口自定义404不能捕获NoHandlerFoundException问题 MacOS 安装Podman 替代Docker Prettier + ESLint + TS常用配置项 React Native V0.64.4版本 开发环境搭建及问题 Nodejs环境Eggjs加签验签示例 Mac安装compass失败相关问题 MySQL手动安装方法 Docker+Jenkins更换国内插件源 Chrome91版本 SameSite cookies 被移除后的解决方法 推荐几个文档中心搭建工具 前端开发Docker快速入门(二)制作镜像并创建容器 微信开放平台-第三方平台代小程序实现业务 Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王 尝试使用Nestjs搭建GraphQL服务 Mac安装Arduino搭建ESP8266 NodeMCU开发环境 用vscode进行jest单元测试并调试代码 vscode配置typescript和eslint的环境
微信开放平台-第三方平台授权流程及接口概述
稻草人.Net · 2020-10-27 · via 博客园 - 稻草人.Net

近期需要使用第三方平台做相应的代小程序业务的开发,本篇主要针对微信开放平台的第三方平台授权流程做简要总结。我们可以简单理解为代管小程序或公众号没有开发资源,需要将自己的小程序托管给第三方公司现实业务功能,微信开放平台针对这种场景开放了第三方开发能力,本篇要讲的授权也就是托管给第三方公司的第一步,授管后小程序的服务器配置、域名配置等都将修改为第三方公司提供的服务配置,如此第三方公司利用微信开发平台能力完成代管小程序需求业务功能,详细说明见官方文档

小程序运营者通过授权后,第三方平台就可以代小程序完成相应的开发任务实现业务需求,我在另一篇“第三方平台代小程序实现业务”中介绍了在授权后,第三方平台如何使用微信开放平台的能力完成相关业务的开发步骤。

授权流程说明

作为第三方开发平台,在为其他微信公众号或小程序开发、调用其接口之前,需要先得到代管小程序属主的授权,授权方式分为二维码和跳转链接二种。

1.接收验证票据(component_verify_ticket)

出于安全考虑,在第三方平台创建审核通过后,微信服务器会每隔 10 分钟会向第三方的消息接收地址推送一次 component_verify_ticket,用于获取第三方平台接口调用凭据。

第三方的程序被动接收,建议每次都将新值放入Redis中,供其他请求获取值(获取令牌时使用)。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/component_verify_ticket.html

推送内容解密后的示例:

1 <xml>
2 <AppId>some_appid</AppId>
3 <CreateTime>1413192605</CreateTime>
4 <InfoType>component_verify_ticket</InfoType>
5 <ComponentVerifyTicket>some_verify_ticket</ComponentVerifyTicket>
6 </xml>

2.获取令牌(component_access_token)

第三方平台通过component_appid和 component_appsecret,以及 component_verify_ticket(每 10 分钟推送一次的安全 ticket)来获取自己的接口调用凭据(component_access_token)

(微信开放平台管理中心的第三方平台详情页中可以查看的 AppID 和 AppSecret)。 

在需要授权时,第三方平台程序主动发送POST请求获取,单个令牌有效期为2个小时(7200s),在令牌快过期时(比如1小时50分),重新调用接口获取,可以将其存储在Redis中。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/component_access_token.html

POST数据示例

{
  "component_appid":  "appid_value" ,
  "component_appsecret":  "appsecret_value",
  "component_verify_ticket": "ticket_value"
}

返回数据示例

{
  "component_access_token": "61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
  "expires_in": 7200
}

3.获取预授权码(pre_auth_code)

通过第二步获取的接口调用凭据(component_access_token)来获取用于授权流程准备的预授权码(pre_auth_code)。

每个预授权码有效期为10分钟(600s)需将其存储在Redis中,生成授权页会使用。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html

请求参数说明

返回数据示例:

{
  "pre_auth_code": "Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw",
  "expires_in": 600
}

4.引入用户进入授权页

第三方平台方可以在自己的网站中放置“微信公众号授权”或者“小程序授权”的入口,或生成授权链接放置在移动网页中,引导公众号和小程序管理员进入授权页。

用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程,授权方式分为以下两种,详细介绍

方式一:授权注册页面扫码授权

授权页网址为:

https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx。

方式二:点击移动端链接快速授权 第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。

授权链接地址:

https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect

5.获取授权码(pre_auth_code

当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码。

回调URI中会接收授权码信息和过期时间(redirect_url?auth_code=xxx&expires_in=600)(获取接口调用凭据时使用)

6.获取接口调用凭据(authorizer_access_token)

通过授权码和自已接口的调用凭据(component_access_token)换取公众号或小程序的接口调用凭据(authorizer_access_token 和用于前者快过期时用来刷新它的 authorizer_refresh_token)和授权信息(授权了哪些权限等信息)建议保存授权信息中的刷新令牌(authorizer_refresh_token)。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/authorization_info.html

7.获取/刷新授权公众号或小程序的接口调用凭据

authorizer_refresh_token刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于第三方平台获取和刷新已授权用户的 authorizer_access_token。

一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌。用户重新授权后,之前的刷新令牌会失效,所以建议来刷新公众号或小程序的接口调用凭据。

接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/api_authorizer_token.html

8、第三方平台接口使用

通过以上授权流程,获取到微信小程序的接口调用凭据authorizer_access_token后即可完成相应的业务开发了。

如小程序基本信息接口,以下可以获取小程序的基本信息:

 GET https://api.weixin.qq.com/cgi-bin/account/getaccountbasicinfo?access_token=ACCESS_TOKEN

 接口文档:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Mini_Program_Information_Settings.html

详细授权流程说明:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Authorization_Process_Technical_Description.html

相关接口文档说明:

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/api/pre_auth_code.html