ad域帐号登录提示无法处理请求_基于 Spring Boot 和 WxJava 实现网站接入微信扫码登录...

news/2024/5/9 12:38:57/文章来源:https://blog.csdn.net/weixin_39917894/article/details/110562434

1. 概述

项目源码:https://github.com/DavidWhom/wechat-login

如果项目存在什么问题,欢迎大家提 issue,期待你的来访

demo 使用了Spring Boot 和 WxJava (微信开发 Java SDK,支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发)

网站微信扫码登录相关接口还不能在微信测试号上使用,因此如果是刚入门WxJava的同学,可以转到以下这篇文章,我写了简单的demo,大家可以简单体会下使用WxJava进行Java开发的便利。

Spring Boot微信开发(基于SDK-WxJava),实现了简单的消息处理、生成二维码及扫码事件处理

WxJava

WxJava 是使用 Java 进行微信开发的一款广受好评的 SDK,GitHub star 15K+,文档和 demo 丰富。简单易用,极大地较少了微信开发的工作量和时间成本。感兴趣的同学可到 GitHub 下载其源码进行学习。本 Demo 仅使用到其 公众号模块-weixin-java-mp

最终实现效果:网站登录 —> 引导到微信授权登录页—> 微信扫码进行授权

a73dee48ffddc58a9eca70f6ade9994a.png

2. 前置工作

网站应用微信登录是基于 OAuth2.0 协议标准构建的微信OAuth2.0授权登录系统。 在进行微信 OAuth2.0 授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的 AppID 和 AppSecret ,申请微信登录且通过审核后,可开始接入流程。

2.1 微信开放平台认证流程

进入微信开放平台。

使用帐号登录后进入到帐号中心–》开发者资格认证–》认证(需要年费300RMB,另外认证需要提交公司营业执照一些信息)此处按要求填写即可。认证成功与否一般会在两日内回复结果。此处不再赘述。

认证成功后就可以对我们现有的网站系统进行开发了。资源中心中有官方给的一些参考 demo。可以自行查看。

进入到管理中心–》网站应用–》创建网站应用–》填写基本信息–》填写网站信息。需要说明的是开发信息中有个授权回调域,此处填写的是我们项目所在的域名(此域名可以修改,其他信息修改需要重新审核)。

提交成功后官方会对所申请的网站应用进行审核(我到第七天才审核通过)。审核成功后我们就能看到我们开发所需要的 AppID 和 AppSecret(第一次使用使用需要用绑定的微信号扫码生成)。

2.1 项目引入 WxJava

pom.xml

 3.4.0com.github.binarywang weixin-java-mp ${weixin-java-mp.version}

application.yml

wx: open: config: # 填写自己的 appid appid: xxxxxxxxxxxxxxxxxxxxxxx # 填写自己的 secret secret: xxxxxxxxxxxxxxxxxxxxxxxxx redirectUrl: http://www.xxx.com/wxCallBack csrfKey: WeChat_WxJava_Demo

Config

@Configuration@Datapublic class WxOpenConfig { /** * 设置云视讯的appid */ @Value("${wx.open.config.appid}") private String appid;​ /** * 设置云视讯的app secret */ @Value("${wx.open.config.secret}") private String secret;​ @Bean public WxMpService wxMpService() { WxMpService service = new WxMpServiceImpl();​ WxMpInMemoryConfigStorage configStorage = new WxMpInMemoryConfigStorage(); configStorage.setAppId(appid); configStorage.setSecret(secret);​ service.setWxMpConfigStorage(configStorage); return service; }}

3. 与微信平台交互的步骤以及实现

微信 OAuth2.0 授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信 OAuth2.0 的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token 可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。 微信 OAuth2.0 授权登录目前支持 authorization_code 模式,适用于拥有 server 端的应用授权。该模式整体流程为:

第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据 code 参数;

通过code参数加上 AppID 和 AppSecret 等,通过 API 换取 access_token;

通过 access_token 进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

3.1 获取 access_token 时序图

40b843a24aa83cca4a3e9033a5861cc1.png

3.2 第一步:请求 CODE

使用网站应用授权登录前必须获取相应网页授权作用域(scope=snsapi_login),才可以通过在PC端打开以下链接: https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 注意:若提示“该链接无法访问”,请检查参数是否填写错误,如 redirect_uri的域名与审核时填写的授权域名不一致或 scope 不为 snsapi_login。

参数说明

070558f5b9707b64be54bcf35a53054a.png

返回说明

用户允许授权后,将会重定向到 redirect_uri 的网址上,并且带上 code 和 state 参数

redirect_uri?code=CODE&state=STATE

若用户禁止授权,则重定向后不会带上 code 参数,仅会带上 state 参数

redirect_uri?state=STATE

防止跨站请求伪造策略

ebf5b0e106c7f86a2538dcf311bb0e53.png

3.2.1 代码实现

获取微信二维码页面的地址,这个地址一定要前端发请求给后端。因为 redirectUrl 配置在后端且 state 参数在后端生成。

Controller

@RestControllerpublic class WeChatController {​ @Autowired private WeChatService weChatService;​ /** * 获取微信登陆二维码地址 * @return */ @GetMapping("/getQRCodeUrl") public RestResult getQRCodeUrl() { return RestResultGenerator.createOkResult(weChatService.getQRCodeUrl()); }  // 省略}

Service

@Service@Slf4jpublic class WeChatServiceImpl implements WeChatService {​ @Autowired private WxMpService wxMpService;​ @Value("${wx.open.config.redirectUrl}") private String wxRedirectUrl;​ @Value("${wx.open.config.csrfKey}") private String CSRF_KEY;​ @Override public String getQRCodeUrl() { // 生成 state 参数,用于防止 csrf String date = DateUtil.format(new Date(), "yyyyMMdd"); String state = MD5Utils.generate(CSRF_KEY + date); return wxMpService.buildQrConnectUrl(wxRedirectUrl, Constant.WeChatLogin.SCOPE, state); }  // 省略}

3.3 第二步:通过 code 获取 openid 和 access_token

通过 code 获取 openid

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

参数说明

ece13ed4d4074d152da425ae9a262468.png

返回说明

正确的返回:

{  "access_token":"ACCESS_TOKEN

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

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

相关文章

seo查询工具源码_公开这一seo技术要点,供给seo工具开发者研究

高粱seo从事seo工作,不知不觉已经将近7年时间了,从对seo一无所知,到熟练掌握,再到seo各种技术如seo自动化,seo点击器的研究开发,在这个过程中虽然遇到了很多问题,需要自己去学习,探索…

Discuz x2.5论坛SEO设置的方法和优化技巧

这篇文章主要讲解Discuzx2.5论坛SEO设置的方法和优化技巧,关于SEO优化的常识和知识不讲解,大家可以到SEO优化版块学习。Discuz x2.5 论坛SEO优化涉及到4处:1、全局--站点信息--站点名称、网站名称和网站 URL;2、全局--站点功能--管理相关--开…

seo优化源码_三原关键词seo优化价格,java小程序多少钱

西安辰乐科技为您详细解读JMwQtg三原关键词seo优化价格的相关知识与详情,SEO(Search Engine Optimization):汉译为搜索引擎优化。搜索引擎优化是一种操纵搜索引擎的搜索划定规矩来进步目前网站正在有关搜索引擎内的天然排名的方式。要想保持权重优化不会波动&#x…

MySQL效能器着名网站中的使用量

2008 年4月18日,在Alexa摆设的一次“Scaling MySQL -- Up or Out?” 的小组争执中,MySQL、Sun、Flickr、Fotolog、Wkipedia、Facebook、YouTube等国际着名网站的DBA们,对其网站MySQL数据库效能器、Web效能器、缓存效能器的数量,M…

php判断是否从网站上传数据,ThinkPHP上传文件及如何判断上传数据是否重复

文件上传1.在ThinkPHP中使用上传功能无需进行特别处理,但要注意,要使用上传功能 表单中需要设置 enctype"multipart/form-data"。2.tp自带了上传文件的类,位置:Think/Upload.class.php。所以tp框架用起来是十分方便的。…

精伦210使用谷歌浏览器开发_谷歌 Chrome 浏览器将限制在非 HTTPS 网站使用游戏手柄...

IT之家7月29日消息 本月初,报道称,微软一直在努力为Windows 10和Windows 10X上的Chromium浏览器带来完整的Windows.Gaming.Input API支持。随后,谷歌在Chrome 86浏览器上增加了对Windows.Gaming.Input API的支持。现在,谷歌似乎正…

测网站服务器带宽,测网站服务器带宽

测网站服务器带宽 内容精选换一换弹性云服务器(Elastic Cloud Server)是一种可随时自动获取、计算能力可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。适用于有加速需求的网站&…

php企业站项目,343PHP005小型企业网站系统|程序项目源码 - A保站

功能性需求1 网站的基本信息设置(1) 对于网站名称应该可以在后台自定义,前台进行显示。(2) 网站的一些简单控制,如是否允许未注册人员下载网站资料,可以在后台动态设置。(3) 网站前台显示的时间格式也可以设置。(4) 前台新闻页每一页显示的文…

网站性能工具Yslow的使用方法

Yslow是雅虎开发的基于网页性能分析浏览器插件,从年初我使用了YSlow后,改变了博客模板大量冗余代码,不仅提升了网页的打开速度,这款插件还帮助我分析了不少其他网站的代码,之前我还特意写了提高网站速度的秘籍&#xf…

好玩的网站 可以实时看到任意航班的实时情况 位置 高度

周末放松一下,介绍二个网站,可以看到任意航班的实时情况 位置 高度,如果自已做飞机到某地旅游或商务办公时,可以试玩一下,感觉好像自已在开飞机啊。。。1. http://tianyan.baidu.com/sky  百度天眼&…

大型网站图片服务器架构的演进(转)

在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足&am…

如何在防火墙或路由器中禁止访问一些公司不相关网站

如何在防火墙或路由器中禁止访问一些公司不相关网站,如果一些招聘网站,非常钓鱼网站,假冒的网站等。如下图示例中,作者就是把家中的路由器禁止访问相关 招聘网站转载于:https://blog.51cto.com/hangtc/1683189

js搭建网站 web服务器,AngularJS如何搭建web服务器?angularjs搭建web服务器的详细过程...

本篇文章主要的介绍了关于angularjs启动web服务器的操作,希望能帮到大家,现在开始看文章吧安装node.js下载链接官网地址: https://nodejs.org/en/我下的解压版的,直接解压到你想安装的目录中在我的电脑(右键)→属性→高级系统变量…

云服务器测速脚本_一台华为云服务器来测试并用docker快速搭建2048网站

一:前言搞了一台华为云服务器,并写下这篇文章来测试并用docker快速搭建2048网站 二:步骤2.1连接华为云服务器进入控制台 之后输入账号和密码登录。2.2安装docker和配置daocloud加速器curl -sSL https://get.daocloud.io/docker | sh该安装包适…

大型网站架构系列:消息队列(二) (转)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka)。【第二篇的内容大部分为网络资源的整理和汇…

万王之王手游服务器维护,万王之王手游-KOK-官方网站-腾讯游戏-一个世界的重新开启...

致各位勇士们:为了让勇士们后续在游戏中获得更为优良的体验,《万王之王3D》已对游戏各职业技能进行了一番全面的优化调整,并将于7月10日进行全面更新。彼时游戏职业技能将更平衡,战斗体验将更流畅,更加精彩的坦格拉美亚…

jeesite如何配置swagger_用JeeSite快速搭建网站(3):提供api接口给移动端

上次在用JeeSite快速搭建网站(2):单表的增删改查中我们实现单表数据的增删改查了,现在终于来冲击最终目标——提供api接口给移动端。准备工作:安装swagger以前的工作流是服务端写好接口文档服务端根据文档,写好接口客户端根据接口…

一步一步SharePoint 2007之二十:解决实现注册用户后,自动具备访问网站的权限的问题(2)——配置Role...

下面将记录每一步的实现过程。1、首先我们打开前面文章中创建的工程,从Visual Studio菜单中依次选择Project,ASP.NET Configuration。2、单击ASP.NET Configuration后,即打开Web Site Administration Tool页面。3、点击Security页&#xff0c…

SEO

搜索引擎优化(中文意思) Search Engine Optimization (英文意思)-------------------------------Search Engine Optimization【电脑】搜索引擎最佳化SEO的概要Use some technics to make your website in the top places in…

手机端网站服务器软件,手机端远程连接服务器的软件

手机端远程连接服务器的软件 内容精选换一换云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等问题均可能导致云服务器无法正常登录。本节操作介绍无法登录Windows弹性云服务器的排查思路。当您的云服务器无法远程登录时,我们建议您首先检查是…