PC网站实现微信扫码登录功能(二)

news/2024/5/14 19:39:33/文章来源:https://blog.csdn.net/qq_35771266/article/details/119794542

上篇我们介绍了怎么申请账号以及最后拿到appId和appSecret,如果有不清楚的可以看一下

如果需要测试实现效果可以点击链接进行体验

微信在线答题抽奖、考试系统、答题小程序轻松制作平台-应奇H5应奇H5可以轻松制作基于微信公众平台的各种微信答题系统,在线考试系统,微信答题抽奖或微信红包活动,知识竞赛,闯关答题,直播答题等互动。操作简便好用,性价比高。可用于企业内部员工微信考试,公众号及会议、年会现场互动答题。https://www.yingqih5.com/

PC网站实现微信扫码登录功能(一)

下面我就来说一下怎样在PC端怎么实现扫码登录功能。

一、进入官方文档网站

准备工作 | 微信开放文档

其实官网对过程描述的已经非常细致了。并且提供了两种扫码方式。一种是跳转二维码扫描页面,另一种是内嵌式二维码。大家可以根据需要自行选择。我这边选择的是内嵌式二维码,我就以这种方式来说明。

实现微信扫码登录主要就是下面三步:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

下面我们来一步步完成。

 二、发起请求获取扫描二维码

1.首先在页面引入http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js,如果网站支持https那就把前缀改为https

2.在需要使用微信登录的地方实例以下JS对象:

var obj = new WxLogin({self_redirect:true,id:"login_container", appid: "", scope: "", redirect_uri: "",state: "",style: "",href: ""});

参数说明

参数是否必须说明
self_redirecttrue:手机点击确认登录后可以在 iframe 内跳转到 redirect_uri,false:手机点击确认登录后可以在 top window 跳转到 redirect_uri。默认为 false。
id第三方页面显示二维码的容器id
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
scope应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
redirect_uri重定向地址,需要进行UrlEncode
state用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
style提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
href自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ

在页面内定义一个div来显示二维码,这个id要传入创建二维码的方法,下面这个方法接收的ID就是容器的ID。

 

 

 OK,这样我们就能实现效果了,下面来看一下实际效果

 扫码以后就会跳转到我们定义的回调域名(必须要外网能访问到,如果自己没有域名就内网穿透获取一个自己的域名,不过最好自己购买一个域名,毕竟是开发每个域名哪能说得过去)

扫码以后跳转页面路径如下:

 可以看到我们已经拿到了code了

三、通过code获取微信用户信息

调用微信提供的API,通过code来获取微信用户openId信息

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

参数说明

参数是否必须说明
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
secret应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
code填写第一步获取的code参数
grant_type填authorization_code

返回说明

正确的返回:

{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

参数说明

参数说明
access_token接口调用凭证
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid授权用户唯一标识
scope用户授权的作用域,使用逗号(,)分隔
unionid当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。

错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}

 四、后端实现代码:

1.引入工具类Jar包

<!--hutool-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.10</version>
</dependency>
<!--fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version>
</dependency>

2.获取微信用户信息工具类 

package com.xingli.springlearningdemo.weChat;import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;import java.util.Map;/*** description: WeChatUtils 微信获取用户工具类<br>** @date: 2021/8/19 0019 上午 10:05 <br>* @author: William <br>* version: 1.0 <br>*/
public class WeChatUtils {/*** 获取微信accessToken路径*/private static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";/*** 微信appId*/private static final String APP_ID = "XXXX";/*** 微信appSecret*/private static final String APP_SECRET = "XXXXXX";/*** description: getAccessToken  根据code获取accessToken<br>* version: 1.0 <br>* @date: 2021/8/19 0019 上午 10:10 <br>* @author: William <br>* @param code   微信用户授权code* @return java.util.Map<java.lang.String,java.lang.String>*/public static Map<String,String> getAccessToken(String code){return getAccessToken(code,APP_ID,APP_SECRET);}/*** description: getAccessToken 根据code获取微信用户信息,返回map如果正确map包含access_token ,如果错误则包含:errcode<br>* version: 1.0 <br>* @date: 2021/8/19 0019 上午 10:11 <br>* @author: William <br>* @param code       微信授权code* @param appId      微信appId* @param appSecret  微信appSecret* @return java.util.Map<java.lang.String,java.lang.String>*/public static Map<String,String> getAccessToken(String code,String appId,String appSecret){//判断所有字段不能为空if(isAnyBlank(code,appId,appSecret)){throw new IllegalArgumentException("参数错误");}String requestUrl = GET_ACCESS_TOKEN_URL.replace("APPID",appId).replace("SECRET",appSecret).replace("CODE",code);String result = HttpUtil.get(requestUrl);return JsonUtils.parseMap(result, String.class, String.class);}/*** description: isAnyBlank 判断是否存在空字符串,Hutool未编写<br>* version: 1.0 <br>* @date: 2021/8/19 0019 上午 10:25 <br>* @author: William <br>* @param strs   字符串* @return java.lang.Boolean*/public static Boolean isAnyBlank(CharSequence... strs){//如果为空直接返回trueif (ArrayUtil.isEmpty(strs)) {return true;}for (CharSequence str : strs) {if (StrUtil.isBlank(str)) {return true;}}return false;}}

3.引用工具类

package com.xingli.springlearningdemo.weChat;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.util.List;
import java.util.Map;/*** description: json工具类 <br>* version: 1.0 <br>* @date: 2019/7/20 0019 上午 10:17 <br>* @author: William <br>*/
public class JsonUtils {public static final ObjectMapper MAPPER = new ObjectMapper();private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class);public static String serialize(Object obj) {if (obj == null) {return null;}if (obj.getClass() == String.class) {return (String) obj;}try {return MAPPER.writeValueAsString(obj);} catch (JsonProcessingException e) {logger.error("json序列化出错:" + obj, e);return null;}}public static <T> T parse(String json, Class<T> tClass) {try {return MAPPER.readValue(json, tClass);} catch (IOException e) {logger.error("json解析出错:" + json, e);return null;}}public static <E> List<E> parseList(String json, Class<E> eClass) {try {return MAPPER.readValue(json, MAPPER.getTypeFactory().constructCollectionType(List.class, eClass));} catch (IOException e) {logger.error("json解析出错:" + json, e);return null;}}public static <K, V> Map<K, V> parseMap(String json, Class<K> kClass, Class<V> vClass) {try {return MAPPER.readValue(json, MAPPER.getTypeFactory().constructMapType(Map.class, kClass, vClass));} catch (IOException e) {logger.error("json解析出错:" + json, e);return null;}}public static <T> T nativeRead(String json, TypeReference<T> type) {try {return MAPPER.readValue(json, type);} catch (IOException e) {logger.error("json解析出错:" + json, e);return null;}}}

 通过上面的工具类的getAccessToken方法我们就能拿到openId了,然后去数据库中查询是否有该openId用户,如果有就登录,没有就注册登录。

OK,到这里PC端实现微信登录功能就完成了。希望对大家有所帮助.最后烦请关注一下,谢谢啦~

欢迎添加微信一起学习、交流共同进步

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

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

相关文章

PC网站实现微信扫码登录功能(一)

铁汁我正在参加博客之星评选活动&#xff0c;如果感觉文章对你有所帮助&#xff0c;能够给我投个票吗~拜谢https://bbs.csdn.net/topics/611391073https://bbs.csdn.net/topics/611391073 现在微信的使用用户越来越多&#xff0c;如果网站添加上微信登录&#xff0c;就能节省很…

DocuSign网站用户资料泄露,病毒团伙利用邮件疯狂作恶

本文讲的是DocuSign网站用户资料泄露&#xff0c;病毒团伙利用邮件疯狂作恶&#xff0c;一、综述近期&#xff0c;火绒安全实验室发出警报&#xff0c;著名的美国数字文档签署平台 DocuSign的用户正在遭受病毒邮件的攻击&#xff0c;该平台在全球拥有2亿用户&#xff0c;其中包…

FBI网站被黑致数据泄露?官方称这根本是个骗局

著名黑客CyberZeist最近入侵了FBI网站(FBI.gov)&#xff0c;并将几个备份文件(acc_102016.bck&#xff0c;acc_112016.bck&#xff0c;old_acc16.bck等)公布在了Pastebin&#xff0c;数据内容包括姓名、SHA1加密密码、SHA1盐和电子邮件等。 【1.6 更新】黑客宣称攻破FBI官网利用…

evasive 模块保护您的网站免受应用层 DOS 攻击

2019独角兽企业重金招聘Python工程师标准>>> 有多种可以导致网站下线的攻击方法&#xff0c;比较复杂的方法要涉及数据库和编程方面的技术知识。一个更简单的方法被称为“拒绝服务Denial Of Service”&#xff08;DOS&#xff09;攻击。这个攻击方法的名字来源于它的…

一步一步SharePoint 2007之八:允许所有域用户访问网站

特别提醒的是&#xff0c;这里不是逐个逐个地允许域用户访问&#xff0c;而是一次性允许所有域用户都可以访问网站。  这里说的一次性允许所有域用户都可以访问&#xff0c;实际上就是允许域用户组可以访问网站。这样做的好处嘛&#xff0c;哈哈&#xff0c;我只要加一次用户…

javaweb高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 一个小型的网站&#xff0c;可以使用最简单的html静态页面就实现了&#xff0c;配合一些图片达到美化效果&#xff0c;所有的页面均存放在一个目录下&#xff0c;这样的网站对系统架构、性能的要求都很简单。随着互联…

Web网站服务

“Apache”服务器是针对之前出现的若干个Web服务器程序进行整合&#xff0c;完善后形成的软件&#xff0c;其主要的特点&#xff1a;开放源代码、跨平台应用、支持各种Web编程语音、模块化设计、良好的安全性。 安装http服务器1、卸载原来已经存在的httpd2、插入光盘&#xff1…

基于Tomcat构建LNMT架构的网站并实现Session保持

简介 LNMTLinuxNginxMySQLTomcat&#xff1b; Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff1b; 在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选&#xff1b; 架构需求 Tomca…

网站安全服务应该如何安全储存用户数据

这几天AcFun数据库泄露的消息一大早就沸沸扬扬地传开了&#xff0c;所幸从AcFun的公告里可以看出泄露的用户密码均经过「加密」&#xff08;实际上指哈希&#xff09;&#xff0c;所以我们仍然是安全的。 网站安全代码 从泄露出的部分信息可以看到&#xff0c;在存储密码这件事…

python:scrapy 一个网站爬虫库

Scrapy是一个用于抓取网站和提取结构化数据的应用框架&#xff0c;可用于广泛的有用应用&#xff0c;如数据挖掘、信息处理或历史档案。也可以使用api提取数据&#xff0c;或者作为一个通用的web爬虫。 安装 C:\Users\lifeng01>pip install scrapy Collecting scrapyDownl…

百度熊掌号SEO指南1.0,seo重点摘录

百度熊掌号seo指南6月6号发布&#xff0c;一直没有时间去研读&#xff0c;今天粗略的看了一下&#xff0c;内容包含对seo的要求&#xff0c;对网站的要求&#xff0c;对运营的支持&#xff0c;和对熊掌号功能的介绍。由于自己比较注重seo方面&#xff0c;所以今天就先摘了了&am…

mflac格式_免费的在线音视频格式转换网站汇总

1、.mov转换为.mp4.mov是QuickTime影片格式&#xff0c;是Apple公司开发的一种音频、视频文件格式。我们只需要iMovie打开相关文件&#xff0c;然后重新导出即可&#xff0c;iMovie默认导出的视频格式就是.mp42、.mp4转换为.gifconvertio&#xff1a;https://convertio.co/zh/m…

大型网站系统与Java中间件实践 02 Java中间件

01 认识分布式02 Java中间件03 分布式框架 3 构建Java中间件 3.1 什么事中间件&#xff1f; 中间件不是最上层的应用也不是最底层的支撑系统&#xff0c;中间件在项目中起到桥梁作用&#xff0c;特定中间件是解决特定的场景问题的组件。让开发聚焦于自己的业务。 常用中间件的分…

使用hexo做博客网站

2019独角兽企业重金招聘Python工程师标准>>> hexo有什么用&#xff1f; hexo 可以把md文件生成html静态网页。 hexo官网&#xff1a;https://hexo.io/zh-cn/ 本地安装hexo。 npm install -g hexo-cli #生成blog&#xff08;名字任意&#xff09;文件夹&#xff0c;并…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自己的网站&#xff01; 延续了帝国CMS、织梦CMS优秀的模板流程&#xff0c;模板页面…

python大佬常去网站

常用网站&#xff1a; 1.StackOverflow &#xff08;https://stackoverflow.com/&#xff09; 2.github &#xff08;https://github.com/&#xff09; 3.Awesome Python &#xff08;https://github.com/&#xff09; 4.python中文学习大本营 &#xff08;http://www.pythondo…

前嗅ForeSpider教程:网站登录配置

当我们在采集中碰到&#xff1a;所采集的网站数据需要登录&#xff0c;才可以看到所需信息时&#xff0c;则需要在软件中模拟登陆环境&#xff0c;采集数据&#xff0c;此时需要配置登录信息。今天小编就教大家&#xff1a;如何进行网站登录配置&#xff0c;具体步骤如下&#…

HBaseOnOSS冷数据存储

本期直播Topic:HBaseOnOSS冷数据存储 讲师&#xff1a;陆豪——阿里多模型数据库专家 视频回看地址&#xff1a;https://yq.aliyun.com/live/709/ PPT下载地址&#xff1a;https://yq.aliyun.com/download/3137 往期直播资料&#xff1a; 第四期&#xff1a;hbase 备份恢复资料…

阿里云ECS建站超详细全套完整图文教程

第一步&#xff1a;如何以最低价格快速买到阿里云服务器&#xff1f; 1.1 如果我是学生&#xff0c;我如何通过&#xffe5;9.9买到价值&#xffe5;117的服务&#xff1f; 答&#xff1a;用&#xffe5;9.9购买云服务器ECS是阿里云学生专属活动。首先&#xff0c;你需要在阿里…

网站502与504错误分析

为什么80%的码农都做不了架构师&#xff1f;>>> 一. 戏说 不管你是做运维还是做开发&#xff0c;哪怕你是游客&#xff0c;时不时会遇到502 Bad Gateway或504 Gateway Time-out。出现这页面&#xff0c;把服务重启下&#xff0c;再实在不行重启下服务器&#xff0c…