微信公众号第三方平台开发,零基础入门。想学我教你啊

2023-11-15

在学习微信第三方平台开发之前你应该会的:

1,常用接口测试工具的使用:postman

2,学会看第三方平台文档。(这个很关键,不过很多还是喜欢百度,白嫖别人的操作文档)

3,学习排查问题,分析问题。

4,第三方平台的限制,和公众号,订阅号这些关系要了解。测试订阅号没有认证,没有认证的订阅号区别都是很大的。

5,善于使用缓存解决项目当中业务性能瓶颈。

微信开放文档:微信公众平台开发概述 | 微信开放文档

开盘:

上一个流程图:

 第三方平台相当于代理我们微信公众号的配置,通过第三方平台的配置发起事件监听,包含回调信息处理,我们通过:授权事件接收配置--》开启推送Ticket--》授权后实现业务--》消息校验Token--》消息与事件接收配置--》微信公众号业务

流程就是这么简单,但是接口比较多,操作起来比较麻烦,还得管理token实效。我们最终要获取微信公众号的权限token才能实现业务扭转,要不然其他都是扯淡。

我们来看看第三方平台的页面配置和权限:

 我这是自己的映射域名,正式上线后换成正式域名。

权限配置:

 需要调试的接口:

接口比较多我们nacos配置:

wechat:
  config:
    #appid
   component_appid: *************
   #aeskey
   component_encodingaeskey: ****************
   #验证token
   component_token: ****************
   #加密正式
   component_appsecret: ***********
   #授权域名
   redirect_url: http://d1989091s1.51mypc.cn/wechat/preauth/callback
   #获取component_token url地址
   api_component_url: https://api.weixin.qq.com/cgi-bin/component/api_component_token
   #创建预授权 url地址
   api_create_preauth_url: https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=
   #权限查询api 授权平台地址
   api_query_auth_url: https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=
   #验证token 刷新地址
   api_authorizer_token_url: https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=
   #媒体文件下载地址
   api_media_download_url: https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
   #客服回复用户文本信息
   api_message_custom_send_url: https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=    
   #获取刷新token接口地址
   api_refresh_url: https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=
   #openid获取 unionid地址 
   api_unionid_batchget_url: https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=
   #获取用户信息
   api_unionid_get_url: https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

代码:

1,获取第三方平台授权component_token

2,获取预授权api_create_preauthcode

3,微信授权平台后获取权限接口根据预授权token+扫码授权code  (api_query_auth)

4,扫码成功获取queryauthcode

5,通过queryauthcode获取公众号authorizer_token

6,通过authorizer_token操作公众号业务。

一,获取component_token

请求地址:https://api.weixin.qq.com/cgi-bin/component/api_component_token

请求参数:

{
    "component_appid":"********",
    "component_appsecret":"****",
    "component_verify_ticket":"ticket@@@lKkaZ1rc4AL43879Kq7g4vmz8DrLdjWNtpnBoUl5tEJtcLhuSGTdayh4rZHxmRv12YB7CU_s7yQ"
    }

     "errmsg": "access clientip is not registered requestIP: 58.246.190.94 rid: 62b67820-316cbaee-50f9473e"

需要配置ip白名单:

 

 二,获取微信预授权pre_auth_code

请求地址:https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=58_D1yfTmJSO97Ak6JL3n_2qav_GhxAUJTS7FANyFFzeZmgD5M-nn3XqvahgJkzd-5T1NhMKnRL7_gmTBAmAYrDfwz8o6pbw4yMJ_MBtTLCcMC-ZJf-zZXedMCjlAivbQ1iZ0JF6YITBDLo43jNWEHjAIACKN

请求参数:

{

"component_appid":"wx6ec5488b62c" 

}

 三,需要把预授权的token 和 component_appid 和重定向回调地址返回到html页面进行授权处理

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">


</head>
<body>
<div class="" style="text-align:center;padding-top:10%;font-size:10em;">
    <a href=https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=wx6ec5e8cec&pre_auth_code=preauthcode@@@YWPYsD65xHdHMkKkSoXTx8W5sXhg3j0l_QfGx_r5lADHryjDH9nEn80ILQb-TBp0pq8Gn5&redirect_uri=http://d1989091s1.51mypc.cn/wechat/preauth/callback id="url">点击授权</a>
</div>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" >
  $(function () {
      $.ajax({
          url: "/wechat/auth/cache",
          type: "post",
          success: function (r) {
              if (r.code == 0) {
                  var component_access_token = r.data.component_access_token;
                  var  component_appid = r.data.component_appid;
                  var  pre_auth_code = r.data.pre_auth_code;
                  var  redirect_uri = r.data.redirect_uri;

                var url = 'https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid='+component_appid
                    +'&pre_auth_code='+pre_auth_code+'&redirect_uri='+redirect_uri;
                  $('#url').attr('href',url);
              } else {
                  alert(r.msg)
              }
          }
      });
  })




</script>


</body>
</html>

授权的页面:这里是需要管理员,谁认证的订阅号,就谁扫码,如果你没有公众号订阅号没有绑定,那就授权不了。

 

 

 

这里的权限是我们第三方平台开启的权限集需要什么功能就开放什么权限功能。

四 更新授权回调。 

    <a href=https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=wx6ec5e8cec&pre_auth_code=preauthcode@@@YWPYsD65xHdHMkKkSoXTx8W5sXhg3j0l_QfGx_r5lADHryjDH9nEn80ILQb-TBp0pq8Gn5&redirect_uri=http://d1989091s1.51mypc.cn/wechat/preauth/callback id="url">点击授权</a>

## 回调地址

redirect_uri=http://d1989091s1.51mypc.cn/wechat/preauth/callback 

 回调地址会返回一个auth_code默认一个小时过期,为了防止重复扫码,你必须获取到刷新token,定时刷缓存,保证token不用过期。

http://d1989091s1.51mypc.cn/wechat/preauth/callback?auth_code=queryauthcode@@@*****&expires_in=3600

 五,第三方平台获取公众号权限token

请求地址:https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=58_7iK29cSWOffcFGCruvhgy7DkLSSnrABbm7bTho5TMBSpkh5Y0NOyZ023ZvgyS5TVx-aywadpgI05WP5A3jwTGZET2QHcgUhn3Eh73SmybB2y2ROC6fKQNlQEGJFdNsoMMs-1Mm2NIZLYFY-ZNBWbAGAHVQ

 参数:

{

"component_appid":"********" ,

"authorization_code": "queryauthcode@@@KEm1qXN8KFuVWO05a3FhXhMtAGQp8RFA4dAEaldQ_ffdvsKIUtDWpVXtzu8dDH8D1DCMhAS61RmonKgPBjecUw"

}

响应: 

{
    "authorization_info": {
        "authorizer_appid": "*********",
        "authorizer_access_token": "58_PZeVA66EDTONWgd-8X9Miuu2dqFQ9FzFar4JTLahB5QmCIdSE1gY9BCYQVnJ8peVGm-1231L3oyIDZ92xlbpSbESN0aIlGW-6XfJXvDIWP6b_b-WW2yEM20AZkkHnECQHDMPiD0Uzqh6sCoHrVDjRPCcAFDVTG",
        "expires_in": 7200,
        "authorizer_refresh_token": "refreshtoken@@@UFuvwOxnZ0eXBGEghR9CD12DVTQnaZEwIQYBBGc6Oh89npg",
        "func_info": [
            {
                "funcscope_category": {
                    "id": 1
                },
                "confirm_info": {
                    "need_confirm": 1,
                    "already_confirm": 0,
                    "can_confirm": 1
                }
            },
            {
                "funcscope_category": {
                    "id": 2
                },
                "confirm_info": {
                    "need_confirm": 1,
                    "already_confirm": 0,
                    "can_confirm": 1
                }
            },
            {
                "funcscope_category": {
                    "id": 4
                }
            },
            {
                "funcscope_category": {
                    "id": 6
                }
            },
            {
                "funcscope_category": {
                    "id": 7
                }
            },
            {
                "funcscope_category": {
                    "id": 9
                }
            },
            {
                "funcscope_category": {
                    "id": 15
                }
            }
        ]
    }
}

这个权限token默认2个小时过期,所以这里需要定时刷新获取权限token

authorizer_refresh_token 代表我们定时刷新权限token,这个可以帮我们解决重复扫码的问题,管理员只需要扫码一次就好了。

六。公众号权限token的刷新

请求地址:

https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=58_9oS6xgfaJoMRlLNAJkGllIzMmgcHhR1l3C3wVdnJbO8I_oWYJZ42Bmhtlbyr_Far_plANKQzU4andVsFlSGnMnDPl8vPMtvPa9T_ju6TOwBoaG_2FQFURf3O7ZP2wyeO8qURPM2cXenWyInMPXFaAAAJRZ

请求参数:

authorizer_appid 需要授权的第三方订阅号appid

component_appid 第三方平台appid

{
    "component_appid":"wx6ec5e8ceb4882c",
    "authorizer_appid":"wx3605b881a5f30b22"
}

 

 七,通过刷新token定时去更换权限缓存

请求地址:https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=58_qNdrBSy8hDuuD7Ecyq4X-d-4aVUxAjoqxVYjGkstVgV9UYMdmc-H9uJPLbim89pluPrKbWnLuQQUIMjmgj81YdyBSVOVL4hIoUjBno-uAuB7cp6jkK81MMSmQexM_IolkeUNeS7l6XyF3H1PTMXgADAKDO

请求参数:

 

{

    "component_appid":"*******",

    "authorizer_appid":"wxbe11fb37fd31d2cb",

    "authorizer_refresh_token":"refreshtoken@@@UFuvwOxnZ0eXBGEghR9DVTQnaZEwIQYBBGc6Oh89npg"

}

     

 authorizer_access_token 验证成功的token就是我们公众号需要获取的凭证。

到这里我们就可以根据公众号的业务进行接口直接的调用了。整体的流程和实现已经完成了。

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

微信公众号第三方平台开发,零基础入门。想学我教你啊 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 如何将json字符串写入table表格中

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 可以方便的将后台复杂的数据带回到前台进行展示 那么如何把json字符串写入到table表格之中呢 json简单说就是javascript中的对象和数
  • 美通企业日报

    今日看点 2019时尚育儿
  • java 常见错误合集

    java lang NullPointerException 这个异常都是因为调用null对象的方法 就是一个对象还没有没有正常初始化 就先调用它的方法比如 Object obj null obj toString 这就会抛出 这个异常
  • java中strictfp么意思_java中的strictfp的作用

    自Java2以来 Java语言增加了一个关键字strictfp 虽然这个关键字在大多数场合比较少用 但是还是有必要了解一下 strictfp 的意思是FP strict 也就是说精确浮点的意思 在Java虚拟机进行浮点运算时 如果没有指定s
  • 基于STM32控制的数字BUCK电路及程序编写

    本文芯片采用STM32G474CBT6 采用STM32cubeMX进行程序生成 BUCK电路拓扑结构 如图所示 BUCK变换器主要由电源VDC 场效应管MOSFET 续流二极管VD 电感L以及滤波电容C和负载RES组成 当MOSFET开通时
  • linux pxe安装视频,Linux利用PXE安装虚拟机的方法

    之前和友人聊天 知道可以利用PXE安装虚拟机 相信很多用户都和小编一样还不是很清楚 在这小编就把学习到的方法分享给大家 方法如下 1 1 dnsmasq apt get install dnsmasq vim etc dnsmasq con
  • elasticsearch sort script实现字段值等于某值排名靠前

    什么是script语言 script语言是es提供的一种支持自定义编程的用于复杂查询的脚本语言 主要类型有painless expressions等 需求描述 实际业务场景需要将某字段等于某值的排在前面 其他数据靠后 比如 雇员属性 nam
  • 阿里跟腾讯又㕛叒打起来了,这次是在东南亚

    腾讯与阿里的先头部队 已经在东南亚开始新的战争 在这之中 电商的争夺尤其激烈 神经浪游者 作者威廉 吉布森说 未来已来 只是分布得不太均匀 互联网的分布尤其如此 先是欧美 之后中国 如今 投资人和从业者纷纷押注 昔日的好时光将在东南亚将重现
  • sqlite3 提示 not found

    在android开发中使用adb shell下的sqlite3命令来查看SQLite数据库时 出现了 sqlite3 not found 错误 在网上搜索了一下问题的原因 原来是模拟器或真机中的 system xbin 目录下少了sqlit
  • 华为OD机试 - 工作安排 - 动态规划(Java 2023Q1 100分)

    目录 一 题目描述 二 输入描述 三 输出描述 四 动态规划 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 小明每周上班都会拿着自己的工作
  • vue设置全局过滤器

    src目录下新建文件夹filters 新建文件index js内容为 const timefilters getdate data console log data getdatetime data console log data exp
  • 十大Web网站漏洞扫描工具

    1 Nikto 这是一个开源的Web服务器扫描程序 它可以对Web服务器的多种项目 包括3500个潜在的危险文件 CGI 以及超过900个服务器版本 还有250 多个服务器上的版本特定问题 进行全面的测试 其扫描项目和插件经常更新并且可以自
  • 信号槽的返回值(QMetaObject::invokeMethod的用法)——Qt

    前言 之前从未想过信号槽是可以有返回值的 因为虽然信号发出去了 但是它在事件循环中 什么时候执行还不一定 这个想法固然是对的 但是这也不是不能实现的 我查了网上的一些资料 发现差不多有一下三种方法 1 信号槽里加指针或引用 这个不推荐 隐患
  • 并发处理

    1 并发活动 进程的引入 操作系统的特性之一是并发与共享 即在系统中 内存 同时存在几个相互独立的程序 这些程序在系统中既交叉地运行 又要共享系统中的资源 这就会引起一系列的问题 包括 对资源的竞争 运行程序之间的通信 程序之间的合作与协同
  • 分布式锁的实现

    目录 分布式锁 分布式锁的引出 单体锁存在的问题 共享数据不安全 超卖现象 锁的理解 拓展 分流 拓展 分流Nginx简单理解 分布式锁的引出 分布式锁的设计思路 分布式锁的常见应用场景 分布式锁方案 数据库的分布式锁如何实现 Redis分
  • 《手把手教你》系列练习篇之4-python+ selenium自动化测试(详细教程)

    1 简介 今天我们继续前边的练习 学习和练习一下 如何使用webdriver方法获取当前测试页面的URL 如何获取当前页面的title 如何打开浏览器的一个新建页面 如何操作单选按钮等等 这些小练习 来巩固基础 2 webdriver方法获
  • WebGL 实践篇(二)—— 屏幕坐标与裁剪坐标,片段着色器中的颜色定义

    一 裁剪坐标系 canvas坐标系以及屏幕坐标系 裁剪坐标 WebGL坐标系 的范围 1 1 原点在中间 x正值向右 y正值向上 屏幕坐标 原点在左上角 x正值向右 y正值向下 canvas坐标 与屏幕坐标相比 原点向右向下偏移 x y正值
  • 如何安装Jenkins并配置插件(清华源)

    Linux启动jenkins 将 jenkins war 放在 usr local jenkins 目录下 执行命令启动 Jenkins 1 nohup java jar jenkins war httpPort 8000 安装Jenkin
  • Gateway服务的搭建

    1 Gateway的作用 网关的核心功能特性 请求路由 权限控制 限流 架构图 权限控制 网关作为微服务入口 需要校验用户是是否有请求资格 如果没有则进行拦截 路由和负载均衡 一切请求都必须先经过gateway 但网关不处理业务 而是根据某
  • 微信公众号第三方平台开发,零基础入门。想学我教你啊

    在学习微信第三方平台开发之前你应该会的 1 常用接口测试工具的使用 postman 2 学会看第三方平台文档 这个很关键 不过很多还是喜欢百度 白嫖别人的操作文档 3 学习排查问题 分析问题 4 第三方平台的限制 和公众号 订阅号这些关系要