微信公众号第三方平台-公众号扫码授权接入代运营

文章目录

    • 接入目的
    • 效果展示
    • 技术积累
      • 如何成为服务商
      • 如何搭建第三方后端服务
      • 传统模式V云服务模式
      • 如何完成商家授权
      • 授权逻辑介绍
    • 环境准备
      • 注册开发者平台-个人类型
    • 传统模式后端代码
      • 接收公众号个人三方平台的票据
      • 根据票据获取三方平台访问令牌
      • 根据访问令牌获取预授权码
      • 通过预授权码发起授权
      • 获取刷新令牌
      • 获取授权账号调用令牌
      • 根据授权码获取公众号菜单
    • 踩坑记录

接入目的

根据公众号第三方平台开发流程可开发出一套可管理公众号/小程序的服务,服务可以直接部署在微信生态作为服务商。只要公众号/小程序理员用个人微信扫码进行授权,我们则可以拿到相关的业务接口权限,从而帮助商家实现代运营。

效果展示

通过接入公众号授权我们拿到了authorizer_access_token,用这个token调用微信公众号获取菜单的接口 https://api.weixin.qq.com/cgi-bin/component/api_query_auth
在这里插入图片描述

如图所示,已经拿到我本人公众号的菜单。

技术积累

如何成为服务商

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/getting_started/how_to_be.html
在这里插入图片描述
在这里插入图片描述

1.1 注册开放平台并通过开发者纸质认证
https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/operation/open/create.html

1.2 创建第三方平台与个人测试账号一致

如何搭建第三方后端服务

在完成第三方平台账号创建后,需完成“开发资料”配置。而开发资料配置主要会涉及配置用于接收微信官方推送的消息以及授权链接域名。
除了搭建要与第三方平台对接的后端服务以外,服务商仍需开发业务系统(该系统主要是面向商家的),例如xxxx微商城。
而为了满足服务商业务多样性,也为了降低服务商搭建服务的成本,平台支持“传统模式”和“云服务模式”进行搭建。可点击查看关于云服务模式的详细介绍。
在这里插入图片描述

传统模式V云服务模式

传统模式下,第三方平台-开发资料的“授权事件接收配置”、“消息与事件接收配置”、“授权发起页域名”、“第三方授权页”均需要服务商按照文档进行开发、部署。如果使用云服务模式,可一键部署官方服务并一键完成配置。
一键部署官方云服务后可通过“服务商微管家”管理工具获取授权页链接,实现0代码完成第三方平台后端服务搭建。
此外,服务商的业务系统亦可部署到微信云托管,帮助服务商减少开发和运维成本。
在这里插入图片描述

如何完成商家授权

在完成服务商账号的创建后,接下来则是进行业务系统与第三方平台的开发对接,在联调测试完成之后即可进行第三方平台的全网发布。在完成全网发布之后,该第三方平台已经具备为商家提供服务的基础条件了。大概的步骤如下:
在这里插入图片描述

授权逻辑介绍

服务商为商家提供服务的基础是【服务商】获得【商家】的授权。
换句话说就是,商家需要将其公众号或者小程序授权给第三方平台,服务商才可以代商家进行相关操作。
完成一次完整的授权,需要服务商与商家的配合,相关流程如下,操作截图可查看授权与解除授权。
服务商获得商家授权后再使用authorizer_access_token调用接口即可。(注意,别用错了token。)
在这里插入图片描述

环境准备

注册开发者平台-个人类型

1.1 进入微信开发平台注册页面
https://open.weixin.qq.com/wxaopen/regist/index?token=f4668ecb8d5397d42967cfeb1d3b69033134ec11
在这里插入图片描述

1.2 主体选择个人,如果是企事业单位需要提供营业执照注册号
在这里插入图片描述

1.3 使用账号密码登录微信开放平台,进入管理中心-第三方平台
在这里插入图片描述

1.4 创建一个第三平台,个人测试号只能创建一个。注意绑定管理员微信号,增加事件回调地址以及权限集的配置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

传统模式后端代码

接收公众号个人三方平台的票据

1、wx-java-open依赖引入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-open</artifactId><version>4.6.0</version>
</dependency>
<!-- 整合thymeleaf前端页面 授权页面使用 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2、yaml配置thymeleaf

spring:thymeleaf:mode: HTMLencoding: UTF-8content-type: text/htmlcache: falseprefix: classpath:/templates/

4、微信票据回调接口逻辑

@RequestMapping("/receive_ticket")
public Object receiveTicket(@RequestBody(required = false) String requestBody, @RequestParam("timestamp") String timestamp,@RequestParam("nonce") String nonce, @RequestParam("signature") String signature,@RequestParam(name = "encrypt_type", required = false) String encType,@RequestParam(name = "msg_signature", required = false) String msgSignature) {log.info("\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",signature, encType, msgSignature, timestamp, nonce, requestBody);if (!StringUtils.equalsIgnoreCase("aes", encType)|| !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");}// aes加密的消息WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody,wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);log.debug("\n消息解密后内容为:\n{} ", inMessage.toString());try {String out = wxOpenService.getWxOpenComponentService().route(inMessage);log.debug("\n组装回复信息:{}", out);} catch (WxErrorException e) {log.error("receive_ticket", e);}return "success";
}

当我们在个人的第三平台配置了票据接收地址后,这里每10分钟就会收到票据:
在这里插入图片描述

根据票据获取三方平台访问令牌

POST https://api.weixin.qq.com/cgi-bin/component/api_component_token
令牌的获取是有限制的,每个令牌的有效期为 2 小时,请自行做好令牌的管理,在令牌快过期时(比如1小时50分),重新调用接口获取。
生成component_access_token需要依赖component_verify_ticket。

调用示例
示例说明: HTTPS请求
请求数据示例

{
“component_appid”: “appid_value” , #第三方平台appid
“component_appsecret”: “appsecret_value”, #第三方平台appsecret
“component_verify_ticket”: “ticket_value” #第三方平台推送的票据
}

返回数据示例

{
“component_access_token”: “61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA”, #第三方平台访问令牌
“expires_in”: 7200
}

在这里插入图片描述

根据访问令牌获取预授权码

POST https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?access_token=ACCESS_TOKEN
ACCESS_TOKEN #第三方平台访问令牌

该接口用于获取预授权码(pre_auth_code)是第三方平台方实现授权托管的必备信息,每个预授权码有效期为 1800秒。

调用示例
示例说明: HTTPS请求
请求数据示例

{
“component_appid”: “appid_value” #第三方平台appid
}

返回数据示例

{
“pre_auth_code”: “Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw”,
“expires_in”: 600
}
在这里插入图片描述

通过预授权码发起授权

1、后端增加接口

@GetMapping("/authCodePage")
public ModelAndView index(ModelAndView model){model.addObject("message", "Hello, Thymeleaf!");model.setViewName("authCodePage");return model;
}

2、提供thymeleaf html文件

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>公众号授权~</title><style>body {font-family: Arial, sans-serif;text-align: center;margin: 20px;}h1 {color: #007bff;}p {font-size: 18px;color: #6c757d;}</style>
</head>
<body>
<h1>欢迎使用Thymeleaf模板</h1>
<p th:text="${message?:'is null'}">默认文本信息演示~~</p>
<button onclick="auth()">公众号授权</button>
</body>
<script>function auth() {console.log("auth");const url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=**&pre_auth_code=**&redirect_uri=**&auth_type=1";location.href= url}
</script>
</html>

3、启动项目访问页面用测试公众号管理员个人微信扫码
在这里插入图片描述

4、授权
在这里插入图片描述
在这里插入图片描述

5、授权成功后回调,回调路径中包含auth_code
http://zqeu9v.natappfree.cc/notify/authCode/callback?auth_code=queryauthcode@@@aCuSQBx6O0aV4SiMcEncY9orjevT6wZs7bFy0sg6LGXqX9wJ8sO1XuNvFGMmJe9MZecwdOuN5_1CmAoTJWsAZg&expires_in=3600

获取刷新令牌

POST https://api.weixin.qq.com/cgi-bin/component/api_query_auth?access_token=ACCESS_TOKEN
ACCESS_TOKEN #第三方平台访问令牌

当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码(authorization_code)。然后使用该接口可以换取公众号/小程序的刷新令牌(authorizer_refresh_token)。
建议保存授权信息中的刷新令牌(authorizer_refresh_token)
调用示例
示例说明: HTTPS请求
请求数据示例

{
“component_appid”:“appid_value” , #第三方平台appid
“authorization_code”: “auth_code_value” #扫码回调返回的授权码
}

返回数据示例

{
“authorization_info”: {
“authorizer_appid”: “wxf8b4f85f3a794e77”, #被授权公众号appid
“authorizer_access_token”: “QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM”, #被授权公众号授权码
“expires_in”: 7200,
“authorizer_refresh_token”: “dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY”,#刷新token
“func_info”: [ #授权个功能
{
“funcscope_category”: {
“id”: 1
}
},
{
“funcscope_category”: {
“id”: 2
}
},
{
“funcscope_category”: {
“id”: 3
}
}
]
}
}

在这里插入图片描述

获取授权账号调用令牌

POST https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=ACCESS_TOKEN
ACCESS_TOKEN #第三方平台访问令牌

该接口用于获取授权账号的authorizer_access_token。authorizer_access_token 有效期为 2 小时,authorizer_access_token 失效时,可以使用 authorizer_refresh_token 获取新的 authorizer_access_token

调用示例
示例说明: HTTPS请求
请求数据示例

{
“component_appid”: “appid_value”, #第三方平台aopid
“authorizer_appid”: “auth_appid_value”, #被授权公众号appid
“authorizer_refresh_token”: “refresh_token_value” #刷新token
}

返回数据示例

{
“authorizer_access_token”: “some-access-token”,
“expires_in”: 7200,
“authorizer_refresh_token”: “refresh_token_value”
}

在这里插入图片描述

根据授权码获取公众号菜单

https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN
ACCESS_TOKEN #授权账号调用令牌( 授权码)
在这里插入图片描述

至此,我们已经根据授权码拿到了需要运营的公众号的菜单。此时此刻,只要是权限内的接口你都可任意调用。

踩坑记录

1、授权发起页面与事件接收域名一致
2、域名的根目录下必须下载放置官方校验文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文&#xff1a; "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母&#xff01;因此这句话广泛地用于字体效果的展示。更短的还有&#xff1a; "The five boxing wizards…

网络——初识网络

在现如今&#xff0c;网络已经成了一种基础设施&#xff0c;大到国家&#xff0c;小到个人&#xff0c;网络已经充斥在我们每个人的身 边&#xff0c;如果一个人突然失去了网络&#xff0c;那么它的生活或多或少会出现一些不方便的地方&#xff0c;网络现在已 经伴随着我们的吃…

Solana主网使用自定义的RPC进行转账

1、引言 如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or supportrpcpool.com. 错误&#xff0c;因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。 要解決这…

N 皇后 - 蓝桥杯?-Lua 中文代码解题第6题

n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#xff1a;n 4 输出&#xff1a;2 解释&#xff1a;如上图所示&…

吴恩达2022机器学习专项课程(一) 5.2 向量化(1) 5.3 向量化(2)

问题预览/关键词 什么是向量化&#xff1f;向量化的好处是&#xff1f;如何向量化多元线性回归函数的参数&#xff1f;如何在Python中向量化参数&#xff1f;计算机底层是如何计算向量化的&#xff1f;向量化示例 笔记 1.向量化 一种在数学和计算中广泛使用的概念&#xff…

[Mac]安装App后“XX已损坏,无法打开“

问题&#xff1a; “xx.app”已损坏&#xff0c;无法打开。你应该将它移到废纸篓。 解决&#xff1a; 终端输入sudo xattr -r -d com.apple.quarantine 后将Applications中对应的问题app拖入生成路径&#xff0c;然后执行。 $ sudo xattr -r -d com.apple.quarantine /Appli…

备战蓝桥杯(日益更新)(刷题)

备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09; 文章目录 备战蓝桥杯&#xff08;日益更新&#xff09;&#xff08;刷题&#xff09;前言&#xff1a;一、二分&#xff1a;1. acwing503 借教室&#xff1a;&#xff08;二分 差分&#xff09;2. ac…

Socks5代理IP如何使用?详细教程解析

当我们在互联网上浏览网页、下载文件或者进行在线活动时&#xff0c;隐私和安全问题常常被提及。在这样的环境下&#xff0c;一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法&#xff0c;帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

Mybatis-Plus使用入门

Mybatis-Plus 一、Mybatis-plus的简介 官方文档的地址&#xff1a; MyBatis-Plus &#xff08;一&#xff09;什么是Mybatis-Plus Mybatis-Plus是一个Mybatis&#xff08;opens new window&#xff09;的增强工具&#xff0c;在Mybatis的基础上只做增强不做改变&#xff0c…

ChatGPT在日常生活与工作中的应用,以及Hulu AI 的探索之旅

ChatGPT在日常生活与工作中的应用&#xff0c;以及Hulu AI 的探索之旅 &#x1f4ac;ChatGPT 的多面应用&#x1f4ac;Hulu AI&#xff1a;一个AI工具聚合平台的探索平台优势为何选择Hulu AI&#xff1f;珍稀优惠 &#x1f4ac;结束语 在数字化快速发展的当下&#xff0c;人工智…

冯喜运:4.11外汇黄金原油晚间行情分析及独家作家操作建议

【 黄金消息面分析】&#xff1a;周四(4月11日)亚市早盘&#xff0c;现货黄金窄幅震荡&#xff0c;周三金价从纪录高位下滑&#xff0c;盘中一度失守2320关口至2319.一线&#xff0c;收报2333附近&#xff0c;因此前强于预期的通胀数据削弱了美国提前降息的预期&#xff0c;美元…

Python初级第二次作业

一、 def reverse(num):anumt0b0cnumwhile a//10>0:if a%10>0:t1aa//10print(t)for i in range(t,-1,-1):if c%100:b0else:b(c%10)*(10**i)c//10print(b) if bnum:return Trueelse:return Falsedef isPalind(num):kreverse(num)if kTrue:print(f"{num}是回文&…

uniapp 轮播列表一排展示3个,左右滑动,滑动到中间放大

一、效果展示 二、代码实现 1.html代码&#xff1a; <!-- 轮播 --><view class"heade"><swiper class"swiper" display-multiple-items3 circulartrue previous-margin1rpx next-margin1rpxcurrent0 change"swiperChange">&l…

书生·浦语2.0(InternLM2)大模型实战--Day02 茴香豆 | 搭建RAG智能助理

视频地址&#xff1a;https://www.bilibili.com/video/BV1QA4m1F7t4/文档地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md作业地址&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/homework.md RAG 概述 R…

汇舟问卷:海外问卷怎么做?

最近美元升值了&#xff0c;但是想在国内赚取美金的途径很少&#xff0c;大多数人接触不到赚取美金的机会。目前汇舟问卷做的国外问卷调查就是一个赚取美金的机会。 操作步骤也比较简单&#xff0c;只需要先搭建好国外的ip环境&#xff0c;然后创建对应国家的人设&#xff0c;…

C语言 知识点 + 笔记(2w6千字 持续更新...)

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,2万6千多字,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行! 形而上学者谓之道,形而下学者谓之器 第 1 章 C语言的流程 (1) C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemb…

Prometheus实现自定义脚本监控

#Prometheus# 监控路漫漫其修远兮&#xff0c;吾将上下而求索&#xff01; 一、前言 在监控工作过程中经常会收到大量的定制化的监控需求&#xff0c;Prometheus就提供了一个很强大的组件 --> Pushgateway&#xff0c;他不仅是网关的用途接收exporter的数据&#xff0c;还…

Docker 安装MySql并操作日志

一、在Linux系统里新建这几个文件夹 1.1 在conf.d文件夹下新建一个my.cnf文件 1.2 用vscode 打开&#xff08;防止乱码&#xff09;&#xff0c;复制以下内容 [mysqld] log_timestampsSYSTEM default-time-zone8:00server-id1log-binmysql-binbinlog-do-db mall # 要监听的库…

Freemarker 的配置

Freemarker是一种用于生成动态模板的Java模板引擎。它可以将数据与模板文件结合&#xff0c;生成最终的输出内容。以下是使用Freemarker的实现和配置步骤&#xff1a; 引入Freemarker库&#xff1a;首先需要将Freemarker库添加到项目的依赖中。可以通过在Maven或Gradle中添加相…