公众号静默授权

news2024/10/6 12:21:15

1.新建 utils文件夹及wxauth.js

 

 

 2.封装 wxauth.js(请求自己接口时要注意接口返回数据的结构)

import axios from 'axios';
import url from '../ui/URL.js';
//取Cookie的值
function GetCookie(name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg) return getCookieVal(j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
  }
  return null;
}
function getCookieVal(offset) {
  var endstr = document.cookie.indexOf(";", offset);
  if (endstr == -1) endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}
//取Cookie的值end
var TOKEN = GetCookie('TokenKey');
if (TOKEN === 'null' || TOKEN === 'undefined') {
  TOKEN = '';
}
//取Cookie的值 end
/**
 *  微信公众号授权
 * */
export function wxAuthorize() {
  // 封装-静默授权
  //if JNZgetOpenId 存储过  openid  这个为空  则重新存 openid
  let isopenid=(localStorage.getItem("openid") == null || localStorage.getItem("openid") == "null")
  let isgetopenid=(localStorage.getItem("JNZgetOpenId") == null || localStorage.getItem("JNZgetOpenId") == "null")
  if(isopenid == true && isgetopenid == false){
    var getYHxxData = localStorage.getItem('JNZgetOpenId'); // 读取字符串数据
    var YHxxObj = JSON.parse(getYHxxData);
    localStorage.setItem("openid", YHxxObj.openId);
  }
  let ISsq = (localStorage.getItem("openid") == 'null' || localStorage.getItem("openid") == null) && (localStorage.getItem("JNZgetOpenId") == null || localStorage.getItem("JNZgetOpenId") == "null")
  let urlzt=window.location.href.indexOf('code='); //url中是否包含code

  //没有openid并且没有JNZgetOpenId     并且   url中没有找到code(没有code就是没有打开过授权页)
  // console.log('ISsq && urlzt----'+ISsq+'----'+urlzt+'----'+isopenid)
  if(ISsq && urlzt==-1){
   //获取微信网页授权的code 打开 `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectUrl}&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect`授权
    getAuthorize()
  }else if(ISsq && urlzt!=-1){
    //如果没有openid  但网页中已经有code 说明已经打开过授权页那么就获取url中的code【运行getAuthorize后第一次进来时没有存code】
    getUrlcode()
  }
}
//获取微信code和openid
function getAuthorize() {
  // 获取微信网页授权的code  开始
  const isWechat = () => {
    let ua = window.navigator.userAgent.toLowerCase();
    return ua.match(/MicroMessenger/i) == 'micromessenger';
  };
  //是微信中打开,则进行一下操作
  if (isWechat) {
    //获取微信网页授权的code
    axios({
      method: "get",
      url: url.wx.getCodeSnsApiUserInfo,
      headers:{
        token:TOKEN
      },
      params: {
        backUrl: window.location.href
      },
    }).then((response) => {
      window.location.href = response.data.data
    }).catch((error) =>
      console.log(error)
    )
  }
}
//获取url中的code
function getUrlcode(){
  var code = getUrlParam("code"); //此处使用的是history路由模式,hash这么拿不到。getUrlParam()方法在下面
  console.log('获取到了 ', code);
  axios({
    method: 'get',
    url: url.wx.getOpenId,
    headers:{
      token:TOKEN
    },
    params: {
      code: code
    },
  }).then((response) => {
    localStorage.setItem('JNZgetOpenId', JSON.stringify(response.data.data));
    localStorage.setItem("openid", response.data.data.openId);// 此处我将openid 进行了存储
    /*
    * 存JNZgetOpenId 主要后期用来获取微信基本信息
    * */
    let urldelcode=window.location.href.indexOf('code=');
    if(urldelcode!=-1){
      let qxurl=window.location.href;
      let pos = qxurl.indexOf("?code=");
      let pos1 = qxurl.indexOf("#/");
      let url1=qxurl.substring(0,pos);
      let url2=qxurl.substring(pos1,qxurl.length);
      let cdxurl=url1+url2
      //如果已经制授权过去掉网址中的code
      window.location.href =cdxurl
    }
  }).catch((error) =>
    console.log(1 + error)       //请求失败返回的数据
  )
};
//获取url中的参数
function getUrlParam(name) {
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
  var r = window.location.search.substr(1).match(reg);  //匹配目标参数
  if (r != null) {
    return unescape(r[2]);
  }
  return null; //返回参数值
};

3.在main.js中全局引入

import { wxAuthorize } from 'utils/wxauth.js'
Vue.prototype.wxOauth = wxAuthorize

4.在首页onLoad生命周期中调用

onLoad() {
    // 静默授权
    this.wxlogin()
},
methods: {
    // 静默授权(具体内容在utils-wxauth.js)
    wxlogin(){
        this.wxOauth()
    }
}

网页授权 | 微信开放文档

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

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

相关文章

七夕什么礼物最有意义?这些礼物送到ta心里去!

转眼间七夕节就到了&#xff0c;想必各位女/男同志都在纠结送什么礼物&#xff0c;一般来说&#xff0c;除了生活用品&#xff0c;对于一些数码产品是比较感兴趣的&#xff0c;所以买一个数码好物作为礼物&#xff0c;大概率是不会出错&#xff0c;接下来我来安利几款非常实用的…

这,就是大模型时代的生产力!

文心与飞桨&#xff0c;向我们展示了领先大模型的生产力。 大模型应用卷到了什么地步&#xff1f;几天前&#xff0c;我们看到的还是写文章、画图、回答数学问题&#xff0c;现在已经有人这么用了&#xff1a; 如果把一长段对话转发到别的群聊里&#xff0c;AI 可以自动生成总…

YOLO v5、v7、v8 模型优化

YOLO v5、v7、v8 模型优化 魔改YOLOyaml 文件解读模型选择在线做数据标注 YOLO算法改进YOLOv5yolo.pyyolov5.yaml更换骨干网络之 SwinTransformer更换骨干网络之 EfficientNet优化上采样方式&#xff1a;轻量化算子CARAFE 替换 传统&#xff08;最近邻 / 双线性 / 双立方 / 三线…

3.物联网LWIP之socket编程

一。Socket编程的基本概念 在我看来Socket就相当于API&#xff0c;就是函数接口&#xff0c;我们使用Socket就可以在不清楚底层原理的基础上进行通信&#xff0c;即Socket会帮助我们处理好网络的Ip地址等。下图就清晰的展示了Socket的位置&#xff0c;作为用户层与其他层的交互…

Arduino 入门学习笔记12 读写外置EEPROM

Arduino 入门学习笔记12 读写外置EEPROM 一、准备工作1. 外置 EEPROM 简介2. Arduino操作外置 EEPROM 流程 二、读写操作流程1. 写操作流程2. 读操作 三、示例代码 一、准备工作 1. 外置 EEPROM 简介 外置I2C接口的EEPROM是一种常用的非易失性存储器&#xff0c;通过I2C总线与…

opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()

人脸识别是指程序对输入的人脸图像进行判断&#xff0c;并识别出其对应的人的过程。人脸识别程 序像我们人类一样&#xff0c;“看到”一张人脸后就能够分辨出这个人是家人、朋友还是明星。 当然&#xff0c;要实现人脸识别&#xff0c;首先要判断当前图像内是否出现了人脸&…

分享一个可以录制限制录屏的方法

随着智能手机的普及&#xff0c;录屏已经成为了很多人记录生活的重要方式。然而&#xff0c;在使用录屏应用时&#xff0c;我们可能会遇到一些限制&#xff0c;例如无法录制某些应用程序的屏幕。下面将介绍一些方法&#xff0c;帮助你在这种情况下仍然能够轻松地录制屏幕。 使用…

3D数据转换工具HOOPS Exchange概览

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速为其应用程序添加可靠的2D和3D CAD导入和导出功能。这允许访问广泛的数据&#xff0c;包括边界表示&#xff08;BREP&#xff09;、产品制造信息&#xff08;PMI&#xff09;、模型树、视图、持久ID、样式、构造…

亚马逊无限买家号如何注册?

如果想要拥有大批量的亚马逊买家号&#xff0c;可以使用亚马逊鲲鹏系统进行自动注册操作。在注册之前我们需要先准备好账号所需要的资料&#xff1b; 1、Ip&#xff1a;软件系统支持11个亚马逊站点使用&#xff0c;因此注册哪一个国家的买家号时就需要购买相应国家的ip&#x…

React请求机制优化思路 | 京东云技术团队

说起数据加载的机制&#xff0c;有一个绕不开的话题就是前端性能&#xff0c;很多电商门户的首页其实都会做一些垂直的定制优化&#xff0c;比如让请求在页面最早加载&#xff0c;或者在前一个页面就进行预加载等等。随着react18的发布&#xff0c;请求机制这一块也是被不断谈起…

docker部署springboot应用

一、下载安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 启动&#xff1a;systemctl start docker 二、配置国内镜像源 &#xff08;1&#xff09;在/etc/docker目录中添加daemon.json文件&#xff0c;内容如下&#xff1a; { …

花生十三 判断推理(二)论证类(归因论证、一般质疑、比例类论证、解释说明类、支持与前提假设、易错选项

论证类 归因论证 形式&#xff1a;既成事实 原因分析 &#xff08;有些题目省略原因分析&#xff09; 题型 对比实验 形式&#xff1a; 有完整的对比实验过程&#xff0c;根据结果给出原因分析、结论 解题思路 质疑 另有他图&#xff1a;画图法&#xff0c;需分组正确…

14 anaconda+pycharm环境管理以及源管理

文章目录 环境管理博主使用的环境环境设置conda常用指令pycharm与环境的连接&#xff08;新2023版本后&#xff09;设置国内镜像&#xff08;源管理&#xff09;常用操作 环境管理 博主使用的环境 Anaconda3-2023.03-Windows-x86_64 pycharm-professional-2023.2 环境设置 …

0基础小白,到底怎样成功转行做软件测试?

软件测试的门槛低没错&#xff0c;但如果100个人竞争同一岗位&#xff0c;企业方一定会选择更优秀的那个应聘者&#xff0c;而没有工作经验、0基础的小白只是充当了陪跑的角色。 所以建议转岗做软件测试的小伙伴&#xff0c;一定要提前做好这些准备&#xff1a; 1、了解软件测…

【数据结构】链表常见题目

文章目录 链表合并两个有序链表反转链表复制带随机指针的链表环形链表环形链表II相交链表移除链表元素链表中倒数第k个节点链表分割链表的回文结构链表的中间节点旋转链表链表排序链表求和 (逆序求)链表求和II (正序求)重排链表奇偶链表反转链表II <==> 链表内指定区间反…

C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线

目录 1.C/C在大数据时代的应用 1.1&#xff1a;C/C数据处理 1.2&#xff1a;C/C数据库 1.3&#xff1a;C/C图像处理和计算机视觉 1.3.1&#xff1a;导读 2.C/C程序员未来的发展路线 2.1&#xff1a;图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…

HttpMessageConverter(消息转换器)

文章目录 1. HttpMessageConverter 的概述2. HttpMessageConverter的使用2.1 RequestBody请求体注解2.2 RequestEntity请求封装对象2.3 ResponseBody响应体注解2.4 ResponseEntity响应封装对象 3. 自定义消息转换器3.1 步骤一&#xff1a;自定义消息转化器3.11 FastJson、Gson …

前馈神经网络正则化例子

直接看代码&#xff1a; import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…

【云原生】kuberneter中Helm入门到实践

引言 helm是k8s的包管理工具&#xff0c;使用helm&#xff0c;可以使用更为简化和系统化的方式对k8s应用进行部署、升级。 helm是CNCF已毕业的项目&#xff0c;社区也是相当活跃的&#xff0c;在 https://artifacthub.io/ 上&#xff0c;能找到很多现成的helm chart&#xff…

轻松学会网络编程

目录 一、UDP 和 TCP 特点对比 1、有连接和无连接 2、可靠传输和不可靠传输 3、面向字节流和面向数据报 4、全双工和半双工 二、UDP 的 socket.api 1、DatagramSocket 2、DatagramPacket 回显服务器的实现 &#xff08;1&#xff09;服务器代码 &#xff08;2&#…