微信开发工具——进行网页授权

微信开发工具——进行网页授权

微信公众平台设置

1.在首页创建好自己的订阅号

网站:https://mp.weixin.qq.com/

在这里插入图片描述

点击立即注册,在选择订阅号(个人创建使用)
在这里插入图片描述
之后按流程填写后,点击设置与开发-------->基本配置,这里可以通过点击成为开发人员(我显示的是已经点击后的页面)
在这里插入图片描述
之后会出现开发者工具,点击后出现该页面,选择公众平台测试账号
在这里插入图片描述

  1. 在该页面当中,填写域名(ps:作者的80端口被占用,使用的是90端口,如果用80默认可以不写)
    在这里插入图片描述
  2. 同时修改页面授权的域名,两者保持一致

在这里插入图片描述

在这里插入图片描述
3. 修改本机中C:\Windows\System32\drivers\etc\hosts文件,以管理员身份打开修改,加入本机地址以及刚刚设置的域名

在这里插入图片描述

  1. 要扫描测试号二维码,加入自己的微信账号,否则后面无法进行测试授权

在这里插入图片描述

前端部分

1.前端页面中的设置

我设置的是90端口,注意写自己域名时写的端口

在这里插入图片描述

2.设计前端页面,授权可以通过超链接进行设置

<template>
  <van-row>
    <van-col span="24">
      <div class="header">
      <--头像-->
        <van-image round width="5rem" height="5rem" :src="headimgurl" />
        <--点击授权的超链接,默认显示的是pinia中的微信登录-->
        <a
          class="login"
          href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx11222333334444d&redirect_uri=http%3A%2F%2Fshimmer.com%3A90%2Fmy&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
          >
          {{ pinia.nickname }}</a
        >
      </div>
    </van-col>
  </van-row>
</template>

注意:其中的appid要写成自己测试号中的,其中的redirect_uri为授权后返回的页面,其url格式需要进行加密。

页面展示(使用微信开发者工具展示)
在这里插入图片描述
前后端联系:在点击微信登录,同意授权后,回调页面会跳转至 redirect_uri/?code=CODE&state=STATE之后通过调用对应后端传送的接口同时将code传到后台,后台通过code发送对应请求获取access_token,再发送对应请求可以获得网页授权的用户信息,后端将用户信息返回给前端。

结果:前端我将回调页面还写的是本页面,授权之后,会将我微信对应的头像和名称显示 在当前页面。

实现

  1. 在onMounted中,先对code进行判断,如果为空说明是第一次进入该页面,尚未进行授权,则不进行调用接口;如果存在,则说明已经授权了,进行调用。

由于code是进行授权后,回调的url中携带的参数,所以用路由来接收参数并进行判断

import { ref, onMounted } from "vue";
import { usePinia } from "@/store/pinia";
import { weixinApi } from "@/api";
import { useRoute } from "vue-router";
const pinia = usePinia();
const route = useRoute();
const headimgurl = ref(pinia.headimgurl);
onMounted(() => {
  const code = route.query.code;
  if (code != undefined) {
    weixinCallApi(code);
  }
});
const weixinCallApi = (code: any) => {
  weixinApi.getAccessToken.call({ code: code }).then((res: any) => {
    console.log(res);
    pinia.nickname = res.data.nickname;
    pinia.headimgurl = res.data.headimgurl;
  });
};
  1. 进行调用接口后,将返回的响应数据进行赋值给pinia,用于显示或后期使用。

结果展示
在这里插入图片描述
注意: 在练习的过程中,进行授权后不要携带同一个code进行多次刷新,否则后端请求返回的access_token会为空,报错40163(好像是)
原因:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

后端部分

第一步:通过前端给的code换取网页授权access_token

通过发送请求https://api.weixin.qq.com/sns/oauth2/access_tokenappid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,加粗的三个值都需要根据自己的进行传递

请求发送返回对应的json内容

{
“access_token”:“ACCESS_TOKEN”,
“expires_in”:7200,
“refresh_token”:“REFRESH_TOKEN”,
“openid”:“OPENID”,
“scope”:“SCOPE”,
“is_snapshotuser”: 1,
“unionid”: “UNIONID”
}

利用hutool工具,将返回的json转换为自己创建的modle对象
AccessTokenInfo

@Data
public class AccessTokenInfo {
    String access_token;
    int expires_in;
    String refresh_token;
    String openid;
    String scope;
    String unionid;
    int is_snapshotuser;
}

第二步:拉取用户信息(需scope为 snsapi_userinfo)

获取的access_token是网页授权接口调用凭证,以及openid 是用户的唯一标识,在这一步调用获取用户信息时需要这两个参数。

发送请求:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

返回的就是用户信息的json

{
“openid”: “OPENID”,
“nickname”: NICKNAME,
“sex”: 1,
“province”:“PROVINCE”,
“city”:“CITY”,
“country”:“COUNTRY”,
“headimgurl”:“https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46”,
“privilege”:[ “PRIVILEGE1” “PRIVILEGE2” ],
“unionid”: “o6_bmasdasdsad6_2sgVt7hMZOPfL”
}

同理,利用hutool工具,将返回的json转换为自己创建的modle对象,最终把用户信息对象返回给前端
WeiXinUserInfo

@Data
public class WeiXinUserInfo {
    String openid;
    String nickname;
    int sex;
    String province;
    String city;
    String country;
    String headimgurl;
    String privilege;
    String unionid;
}

Controller完整代码

@RestController
@RequestMapping("/api/weixin")
public class H5WeiXinController {

    @Value("${wx.appid}")
    private String appId;
    @Value("${wx.secret}")
    private String secret;
    /**
     * 获取access_token
     * @param code 前端通过授权后会跳转的页面中携带的参数
     * @return
     */
    @GetMapping("/getAccessToken")
    public WeiXinUserInfo getAccessToken(String code) {
        String url = StrFormatter.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type=authorization_code", appId, secret, code);
        //请求返回的内容,一个json对象
        String body = HttpUtil.get(url);
        //将接收的json对象转换为对象
        AccessTokenInfo accessTokenInfo = JSONUtil.toBean(body, AccessTokenInfo.class);
        //获取用户信息
        url = StrFormatter.format("https://api.weixin.qq.com/sns/userinfo?access_token={}&openid={}&lang=zh_CN",accessTokenInfo.getAccess_token(),accessTokenInfo.getOpenid());
        //请求返回的内容,一个json对象
        body = HttpUtil.get(url);
        WeiXinUserInfo weiXinUserInfo = JSONUtil.toBean(body, WeiXinUserInfo.class);
        //返回用户信息给前端
        return weiXinUserInfo;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ //练习 11.4 扩展你的程序,忽略大小写和标点。例如,“example.“、“exmaple,“和”Example“应该递增相同的计数器。

C Primer&#xff08;第5版&#xff09; 练习 11.4 练习 11.4 扩展你的程序&#xff0c;忽略大小写和标点。例如&#xff0c;“example.”、"exmaple,"和”Example"应该递增相同的计数器。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工…

泰迪智能科技携手韶关学院共建实训基地

3月28日&#xff0c;韶关学院数学与统计学院院长宋杰、数学与统计学院副院长李少勇、数学与统计学院骨干教师邓四清、邝神芬、付林林莅临广东泰迪智能科技股份有限公司产教融合实训基地开展“韶关学院实习基地”揭牌仪式。泰迪智能科技高校事业部负责人施兴、培训业务部孙学镂、…

parallel linux虚拟机没有root权限

前言 今天刚在parallel上装上linux虚拟机&#xff0c;安装的是Debian发行版。用终端输入命令时&#xff0c;无意间发现当前用户竟然不是root用户&#xff0c;岂有此理&#xff01;众所周知&#xff0c;Linux系统一般安装之后都是默认root用户的&#xff0c;但是可能parallel先…

《系统架构设计师教程(第2版)》第8章-系统质量属性与架构评估-02-系统架构评估

文章目录 1. 一些重要概念1.1 敏感点 (Sensitivity Point)1.2 权衡点 (Tradeoff Point)1.3 风险承担者 (Stakeholders)1.3.1 系统生产者1.3.2 系统消费者1.3.3 系统服务人员1.3.4 其它人员 1.4 场景 (scenarios) 2. 系统架构评估方法2.1 基于场景的架构分析方法&#xff08;SAA…

【算法刷题day10】Leetcode:232.用栈实现队列、225. 用队列实现栈

文章目录 Leetcode 232.用栈实现队列解题思路代码总结 Leetcode 225. 用队列实现栈解题思路代码总结 stack、queue和deque对比 草稿图网站 java的Deque Leetcode 232.用栈实现队列 题目&#xff1a;232.用栈实现队列 解析&#xff1a;代码随想录解析 解题思路 一个栈负责进&a…

《编程菜鸟学 Python 数据分析》让工作自动化起来!

随着我国企业数字化和信息化的深入&#xff0c;企业对办公自动化的效率和灵活性要求越来越高。Python作为一种开源的软件应用开发方式&#xff0c;通过提供强大丰富的库文件包&#xff0c;极大地简化了应用开发过程&#xff0c;降低了技术门槛。Python开发有哪些优势、挑战以及…

【数据库】实践:博物馆藏品管理系统

目录 一、选题 二、需求分析 2.1数据库系统的业务描述 2.2主要逻辑业务 2.3 数据字典 2.4 数据流图&#xff1a; 2.5 模块介绍&#xff1a; 三、概念模型设计&#xff08;画局部E-R图&#xff0c;再合并画整体E-R图&#xff09; 四、逻辑结构设计——数据库关系模式 …

认知觉醒读书笔记之三重大脑(一)

引言 《认知觉醒》这本书太经典了&#xff0c;反复读了多次还是爱不释手&#xff0c;因此决定针对它写写读书笔记。今天主要针对这本书的三重大脑理论进行讲解 三重大脑 作者认为人类的大脑分为三重分别是本能脑、情绪脑以及理智脑&#xff0c;三者的区别如下图(从书中拷贝的…

多线程。

1. Thread创建的写法 1.继承Thread&#xff0c;重写run 2.实现Runnable&#xff0c;重写run 3.继承Thread&#xff0c;重写run&#xff0c;使用内部匿名类 4实现Runnable&#xff0c;重写run&#xff0c;使用内部匿名类 5使用lambda方法 Thread中的一些核心属性和方法 idn…

书生浦语全链条开源开放体系

开放了高质量语料数据 预训练 微调 评测 评测框架 部署 智能体 例如把openlab对于计算机视觉的封装

用python爬虫追踪知乎/B站大V排行

最近&#xff0c;我在学习和实践 python 的数据分析&#xff0c;前几周把知乎、B站、虎扑上的各种信息都抓了个遍&#xff0c;比如粉丝数、关注关系、发布时间、阅读量、回复数、标题关键字、地域分布……然后又对这些数据进行了整理&#xff0c;将数据通过各类图表进行可视化&…

【Python从入门到进阶】52、CrawlSpider链接提取器的使用

接上篇《51、电影天堂网站多页面下载实战》 上一篇我们采用Scrapy框架多页面下载的模式来实现电影天堂网站的电影标题及图片抓取。本篇我们来学习基于规则进行跟踪和自动爬取网页数据的“特殊爬虫”CrawlSpider。 一、什么是CrawlSpider&#xff1f; 1、CrawlSpider的概念 Cr…

动画效果-精灵图人物移动

效果&#xff1a;人物跑步移动 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

高风险IP来自哪里:探讨IP地址来源及其风险性质

在网络安全领域&#xff0c;高风险IP地址是指那些可能涉及恶意活动或网络攻击的IP地址。了解这些高风险IP地址的来源可以帮助网络管理员更好地识别和应对潜在的安全威胁。本文将探讨高风险IP地址的来源及其风险性质&#xff0c;并提供一些有效的应对措施。 风险IP查询&#xf…

每日一题(力扣136):只出现一次的数字

利用哈希&#xff1a;时间复杂度O(n)&#xff0c;空间复杂度O(n) class Solution { public:int singleNumber(vector<int>& nums) {if (nums.size() 1){return nums[0];}unordered_map<int, int> map;int len nums.size();for (int i 0; i < len; i){if…

PCL 计算点与圆的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 3D中的圆可以有圆心、半径以及法线来进行表示,如下图所示: 这里我们假设: Δ = P − C \Delta=P-C Δ

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针&#xff08;非函数指针&#xff09;&#xff1a; 有类型的函数指针&#xff1a; void 类型的指针&#xff1a; 结语 前言 进行单元测试之后&#xff0c;但凡…

一键切换ip地址软件的功能和优势

随着网络技术的不断发展和普及&#xff0c;IP地址已经成为我们在互联网上活动的重要标识。然而&#xff0c;在某些特定情况下&#xff0c;我们可能需要频繁地切换IP地址&#xff0c;以满足不同的网络需求或保护个人隐私。一键切换IP地址的软件应运而生&#xff0c;为我们提供了…

TM1650芯片驱动四位数码管(含部分代码)

TM1650芯片驱动四位数码管 SCL&#xff1a;IIC的时钟线 SDA&#xff1a;IIC的数据线 DIGx&#xff1a;每个数码管的总开关&#xff0c;不开&#xff0c;怎么搞也不会亮滴&#xff0c;数码管1、2、3、4 A/K11~G/K17/DP/KP&#xff1a;因为只用了下数码管&#xff0c;所以建议不用…

一文搞定防盗链设计

大家好&#xff0c;我是蓝胖子&#xff0c;在涉及到图片或者视频链接时&#xff0c;通常都会提到防盗链&#xff0c;这一节我将会从防盗链的含义到落地&#xff0c;向大家展示如何设计资源的防盗链。 防盗链的含义与作用 防盗链&#xff0c;顾名思义&#xff0c;是为了防止资…