公众号H5页面接入微信登录流程

起步

首先创建一个项目,我们采用uni-app来作为我们的前端框架

环境安装

全局安装vue-cli

npm install -g @vue/cli

创建uni-app

使用正式版(对应HBuilderX最新正式版)

vue create -p dcloudio/uni-preset-vue my-project

在安装过程中选择默认版本即可

启动

安装完成后按照提示进入我们的项目根目录下执行启动命令

npm run serve

启动成功图

申请测试号

官方文档

文档地址

申请测试公众号

这里我们本地学习,所以可以申请一个测试哈,方便我们快速了解微信相关配置。在实际开发中我们会将我们的网站配置在真正的公众号中。

1.首先登录微信公众平台,选择一个公众号登录,第一次登录时可能没有公众号,我们可以申请注册一个订阅号即可。

登录进来后点击下图标示菜单可以申请一个测试号

点击之后我要求我们登录,我们扫码登录一下即可,然后可以看到如下界面

这里可以看到我们公众号的appIDappsecret。另外由于我之前设置过相关配置,所以这里的 接口配置信息 和 JS接口安全域名 有内容,第一次申请的没有,不过不影响我们本次教程的后续开发。当我们有需要时可以重新在这个页面中去设置相关接口信息

配置授权回调页面域名

在测试号管理页面往下滑可以看到下面的配置项

设置我们项目的启动地址,由于是测试号,所以这里可以配置IP地址

注意:测试号可以配置ip地址,正式号只能配置域名

给测试号配置菜单 

安装axiox

npm install axios --save

获取AccessToken

调用如下地址即可获取AccessToken

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

官方文档地址

请求如下接口获取Access token,这个Access token有7200秒的有效期,并且接口每天限制2000次请求,所以一般由后端去请求该接口并保存起来,并且设置定时刷新。但是由于现在学习阶段,所以我们前端可以直接请求

新建 src\util\getTonken.js 文件,编写如下代码

import http from "axios"
const APPID = "这里替换成测试号的APPID"
const APPSECRET = "这里替换成测试号的APPSECRET"// 更新tonken
function updateToken() {return new Promise((resolve, reject) => {http.get(`/weixin/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`).then(res => {resolve(res.data.access_token)}).catch(err => {reject(err)})})
}// 获取Tonken
export function getToKen() {return new Promise(async (resolve, reject) => {// 从缓存中读取tokenlet stroagetoken = uni.getStorageSync('accessToken')// 如果缓存中有token,则直接返回缓存中的tokenif (stroagetoken) {console.log('缓存获取的token');// 返回结果resolve(stroagetoken)} else {// 如果缓存没有token,则走接口重新获取新的tokenlet token = await updateToken()// 存入到缓存中uni.setStorageSync('accessToken', token)// 设置定时任务,每隔7000秒更新一次tonkensetInterval(async () => {// 获取新的tokenlet token = await updateToken()// 存入到缓存中uni.setStorageSync('accessToken', token)}, 7000000);console.log('接口获取的token');// 返回结果resolve(token)}})
}

请求微信地址的跨域问题

上面的代码中可以看到请求地址是以 /weixin 开头的,这是因为我们在前端直接请求 https://api.weixin.qq.com 会产生跨域问题,所以我配置了前端代理,配置方式如下:

首先在项目根目录新建 vue.config.js 文件,编写如下代码

module.exports = {publicPath: "./",devServer: {disableHostCheck: true, //禁用主机检查 proxy: {"/weixin": {target: "https://api.weixin.qq.com/",ws: true,secure: true, // 使用的是http协议则设置为false,https协议则设置为truechangOrigin: true, //开启代理pathRewrite: {"^/weixin": "",},}},},
};

然后重启项目,之后在发送请求时,用 /weixin 开头去发送请求,则node会自动帮我们吧请求地址代理到 https://api.weixin.qq.com/ ,从而解决跨域问题

创建菜单

接口地址

POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

接口参数见官网文档

下面代码即可为测试号创建一个普通菜单

const ACCESS_TOKEN = uni.getStorageSync("accessToken");
const menuObj = {button: [{type: "view",name: "测试项目",url: "http://192.168.60.230:8080/",},],
};
// 创建菜单
http.post(`/weixin/cgi-bin/menu/create?access_token=${ACCESS_TOKEN}`, menuObj).then((res) => {console.log(res, "创建菜单");
});

代码执行后,我们扫描测试号的二维码,即可看到配置的菜单。这里要保证我们的手机和电脑在同一个局域网下,通俗点就是连着同一个WiFi,这样我们才能在手机端点击菜单进入到我们的项目中

微信网页授权

授权步骤

  • 第一步:用户同意授权,获取code
  • 第二步:通过code换取网页授权access_token
  • 第三步:刷新access_token(如果需要)
  • 第四步:拉取用户信息(需scope为 snsapi_userinfo)
  • 附:检验授权凭证(access_token)是否有效

引导关注者开发授权页面

我们可以让用户跳转到授权页面,如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

授权地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明

参数是否必须说明
appid公众号的唯一标识
redirect_uri授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type返回类型,请填写code
scope应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数

开始编码

<view><button type="info" @click="getUserInfo">获取授权</button>
</view>
data() {return {homeUrl:"http://192.168.60.230:8080/",};
},
methods: {// 点击授权按钮getUserInfo() {// 获取当前页面地址作为回调地址,并且对地址进行urlEncode处理let local = encodeURIComponent(this.homeUrl);// 获取公众号appidlet appid = "wx2188729b190d357d";// 跳转到授权页面window.location.href ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +appid +"&redirect_uri=" +local +"&response_type=code&scope=snsapi_base&state=1#wechat_redirect";},
}

点击按钮跳转到授权页面,然后微信会将参数拼接到回调地址中,我们从地址中获取code参数来获取网页授权的 access token

通过路径上的code获取网页授权token

获取token的接口地址

GET https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

首先我们封装一个获取路径参数的方法

getUrlCode(name) {return (decodeURIComponent((new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(location.href) || [, ""])[1].replace(/\+/g, "%20")) || null);
}

然后再添加一个根据code获取token的方法,这里的APPIDAPPSECRET放在了data中,这里可以优化成写一个配置文件,页面可以从配置文件中获取。

data() {return {APPID: "wx2188729b190d357d",APPSECRET: "d976b0e6262b829ba003e9a24032447c",};
},
// 根据code获取网站授权token
getTokenFormCode(code) {http.get(`/weixin/sns/oauth2/access_tokenappid=${this.APPID}&secret=${this.APPSECRET}&code=${code}&grant_type=authorization_code`).then((res) => {console.log(res.data.access_token,'根据code获取网站授权token');console.log(res.data.openid,'获取到的用户openid'); });
},

然后在 onLoad中先判断路径上能否获取到 code 值,如果获取到后再调用接口去获取网页授权token

onLoad() {// 判断是否有codelet weixinCode = this.getUrlCode("code");// 当获取到code后再调用获取token的方法weixinCode && this.getTokenFormCode(weixinCode);
},

拉取用户信息

注意:这个方法需 scope 为 snsapi_userinfo

接口地址

GET https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

编写方法

// 根据网页授权token和openid获取用户基础信息
getAuthorizationInfo(token, openid) {http.get(`/weixin/sns/userinfo?access_token=${token}&openid=${openid}&lang=zh_CN`).then((res) => {console.log(res, "用户基础信息");});
},

改写 getTokenFormCode 方法,接口调用成功后传递 token 和 openid 给 getAuthorizationInfo 方法来获取用户基本信息

// 根据code获取网站授权token
getTokenFormCode(code) {http.get(`/weixin/sns/oauth2/access_tokenappid=${this.APPID}&secret=${this.APPSECRET}&code=${code}&grant_type=authorization_code`).then((res) => {const { access_token, openid } = res.data;this.getAuthorizationInfo(access_token, openid); });
},

接口返回结果

根据接口数据展示头像和昵称

在 getAuthorizationInfo 方法中添加如下代码,保存用户信息

// 根据code获取网站授权token
getAuthorizationInfo(token, openid) {http.get(`/weixin/sns/userinfo?access_token=${token}&openid=${openid}&lang=zh_CN`).then((res) => {// 解构赋值const { headimgurl, nickname } = res.data;this.userInfo = {// 用户头像headimgurl: headimgurl,// 用户微信昵称nickname: nickname,};});
},

在页面上展示用户信息

<view class="userInfo"><view><image :src="userInfo.headimgurl"></image></view><view>{{ userInfo.nickname }}</view>
</view>

效果展示

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

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

相关文章

海报的5种处理方式,让你的照片更吸睛

你知道海报应该怎么处理吗&#xff1f;照片是一个作品里最能吸引人注意的&#xff0c;我们可以试一试将照片处理成海报。那么你知道海报式的图片应该怎么处理吗&#xff1f;一起来看看吧&#xff01; 方法一&#xff1a;图形元素强调 如果照片本身的视觉冲击力不强&#xff0c…

AI技术在智能海报设计中的应用

背景 在视觉设计领域中&#xff0c;设计师们往往会因为一些简单需求付出相当多的时间&#xff0c;比如修改文案内容&#xff0c;设计简单的海报版式&#xff0c;针对不同机型、展位的多尺寸拓展等。这些工作需要耗费大量的时间、人力成本&#xff08;5~6张/人日&#xff09;&am…

vue3 antd项目实战——table表格(一文带你快速实现后台管理系统最常用的table表格)

零基础filter实现最简单的table表格 知识调用核心干货下期预告关键字模糊查找&#xff08;纯前端&#xff09;关键字模糊查找&#xff08;前后交互&#xff09; 知识调用 功能实现可能要用到的知识&#xff1a;vue3ant design vuets实战【ant-design-vue组件库引入】vue3项目实…

tf.placeholder代码详解

tf.placeholder(dtype, shape, name) 作用&#xff1a;创建一个类型为dtype&#xff0c;形状为shape&#xff0c;名字为name的一个Tensor类型 返回值&#xff1a;一个tensor类型 注意&#xff1a;tf.placeholder生成的tensor并不能直接print&#xff0c;需要通过sess.run才…

人工智能之线性代数应用

线性代数 1. 从初等函数到高等数学 一元线性函数 在中学的初等数学里,把函数 f ( x ) = k x + b f(x)=kx+b f(x)=kx+b ( k , b k,b k,b是不变量),称为一元线性函数,因为在平面直角坐标系中这个函数的图形就是一条线,就是变量(包括自变量和因变量)之间的映射关系描述为…

《乐队的夏天》刺猬乐队下半年音乐节巡演时间表

《乐队的夏天》总决赛&#xff0c;HOT5乐队诞生&#xff01; 新裤子乐队夺冠&#xff0c;痛仰乐队和刺猬乐队分列第二名和第三名&#xff0c;Click#15和盘尼西林乐队获得第四名和第五名。 在hot5乐队中有这么一支乐队&#xff0c;深得Guitar Pro的喜爱 高晓松评说&#xff1a…

什么是刺猬理念

一、什么是刺猬理念 刺猬理念是指把复杂的世界简化成单个有组织性的观点&#xff0c;一条基本原则或一个基本理念&#xff0c;发挥统帅和指导作用。核心是把事情简单化&#xff0c;把所有的挑战和进退维谷的局面压缩为简单的。 二、刺猬理念的寓言故事 狐狸是一种狡猾的动物&am…

刺猬乐队在唯品会工作过_Microsoft乐队是您从未听说过的出色智能手表和健身追踪器...

刺猬乐队在唯品会工作过 In late 2014 Microsoft released the Band. It came out of left field. Rumors had been rolling around about Microsoft possibly doing a wearable, but details were non-existent. When it came out people were… well, confused. And rightly …

多目标优化算法:多目标天鹰优化算法MOAO(提供Matlab代码)

一、算法简介 天鹰优化算法&#xff08;Aquila Optimizer&#xff0c;AO&#xff09;由Laith Abualigah等人于2021年提出&#xff0c;该算法的灵感来自天鹰在自然界中捕捉猎物的行为。 天鹰是深棕色的&#xff0c;脖子后面有浅金棕色的羽毛。幼天鹰主要在尾巴上有白色&#xf…

神奇的人工智能之神笔马良|Stable Diffusion使用

1,月球上骑马的宇航员。 image generate by stable-diffusion model 2,下棋的狗 image generate by stable-diffusion model 3,沉迷学习的史努比 image generate by stable-diffusion model 4,鲤鱼跃出海面

音速索尼克 怪人_最奇妙的刺猬索尼克粉丝游戏

音速索尼克 怪人 Sonic is hilarious. Maybe it’s the decades of bad games. Maybe it’s the Extreme Attitude™, a 90s marketing gimmick that feels dated now. Or maybe it’s just that he’s a weird looking dude. 索尼克很搞笑。 也许这是数十年来糟糕的比赛。 也许…

VTK:刺猬用法实战

VTK:刺猬用法实战 程序输出程序完整源代码程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCamera.h> #

python应用在人工智能_python应用篇-大数据和人工智能时代下,python牛在哪?

一、人工智能领域&#xff0c;python必用&#xff1f; 人工智能有多么火热呢&#xff1f;现在每12家拿到投资的创业公司&#xff0c;其中就有1家&#xff0c;是跟人工智能领域相关的。而在几年前&#xff0c;这个数字是48。 不管大家对这个行业的了解有多少&#xff0c;但你们…

『开源项目』基于STM32的智能垃圾桶之综合代码(HAL库)

大家好,我是『芯知识学堂』的SingleYork,前面给大家简单介绍了<基于STM32的智能垃圾桶之成员简介>、<基于STM32的智能垃圾桶之语音识别>、<基于STM32的智能垃圾桶之语音播报>和<基于STM32的智能垃圾桶之舵机控制(HAL库)>,今天笔者将要给大家介绍我…

刺猬猫服务器维护2020,刺猬猫杂谈:我认真起来连老板的号都敢封!

原标题&#xff1a;刺猬猫杂谈&#xff1a;我认真起来连老板的号都敢封&#xff01; 铁面无私 首先第一个重要通知 请各位不要在违纪的边缘来回试探 刺猬猫可是铁面无私的 就算是老板违规了也是要按规矩办事 讨论区公告也有通知 请大家引以为戒 自觉维护刺猬猫的和平 female 有…

目标检测算法实现(三)—— yolov5 代码调试

在高xq大佬的指导下完成了代码的调试和第一次训练&#xff0c;纯手工复盘记录&#xff0c;再度理解学习~&#xff01;&#xff01;&#xff01; 记录的逻辑不是很清晰&#xff0c;因为知识盲区太多&#xff0c;待理解的后续继续补充&#xff0c;未实现的后续继续实现并补充记录…

深度学习基础2-----如何使用下载的代码

目录 一、环境配置 1、requirements.txt 二、训练 1.训练公开数据集 2、训练自己的数据集 三、模型预测 下载代码后我们来瞧瞧如何使用&#xff01;&#xff01;&#xff01;&#xff01; 大类中主要包含三部分&#xff1a;环境配置&#xff1b;训练数据&#xff1b;模型…

深度学习基础3------看代码步骤

目录 一、代码的重要部分 二、模型本身 三、训练参数 四、数据加载 1.训练的数据价值 2.预测的数据加载 五、损失函数 六、预测后结果 一、代码的重要部分 包括两个部分&#xff1a;训练模型&#xff0c;模型预测。 训练模型--------需要考虑模型本身&#xff0c;训练…

ppt讲解html,HTML简介讲解.ppt

作业 1.制作一个图文并貌的网页至少3张图片、一个视频文件 文字不少于三段&#xff0c;字数不少于100字 至少用到 等标记符及align属性 图片应分别满足以下排版要求&#xff1a; 实现文本与图像的环绕 文本居于图片左侧 文字与图片在垂直方向上居中对齐 2.制作一个具有锚点链接…

人工智能 60 年技术简史

https://www.toutiao.com/a6711206007982277124/ 作者 | 李理&#xff0c;环信人工智能研发中心 VP 封图 | CSDN 付费下载自视觉中国 出品 | CSDN AI 科技大本营&#xff08;ID:rgznai100&#xff09; 人类的进化发展史就是一部人类制造和使用工具的历史&#xff0c;不同的工…