一、准备工作

1、注册

微信开放平台:https://open.weixin.qq.com

2、邮箱激活

3、完善开发者资料

4、开发者资质认证

准备营业执照,1-2个工作日审批、300元

5、创建网站应用

提交审核,7个工作日审批

6、熟悉微信登录流程

参考文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=e547653f995d8f402704d5cb2945177dc8aa4e7e&lang=zh_CN

第一步:请求CODE(生成授权URL)

第二步:通过code获取access_token(开发回调URL)

获取access_token时序图:

二、后端开发

service_ucenter微服务

1、添加配置

application.yml添加相关配置信息

wx:
open:
# 微信开放平台 appid
appId: wxed9954c01bb89b47
# 微信开放平台 appsecret
appSecret: a7482517235173ddb4083788de60b90e
# 微信开放平台 重定向url(guli.shop需要在微信开放平台配置)
redirectUri: http://guli.shop/api/ucenter/wx/callback8160

2、创建常量类

创建util包,创建UcenterProperties.java类

package com.atguigu.guli.service.ucenter.util;

@Data
@Component
//注意prefix要写到最后一个 "." 符号之前
@ConfigurationProperties(prefix="wx.open")
public class UcenterProperties {
private String appId;
private String appSecret;
private String redirectUri;
}

3、创建controller

api包中创建ApiWxController

@Controller//注意这里没有配置 @RestController
@RequestMapping("/api/ucenter/wx")
@Slf4j
public class ApiWxController { @Autowired
private UcenterProperties ucenterProperties; @GetMapping("login")
public String genQrConnect(HttpSession session){ //组装url:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=回调地址&response_type=code&scope=snsapi_login&state=随机数#wechat_redirect
String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
"?appid=%s" +
"&redirect_uri=%s" +
"&response_type=code" +
"&scope=snsapi_login" +
"&state=%s" +
"#wechat_redirect"; //将回调url进行转码
String redirectUri = "";
try {
redirectUri = URLEncoder.encode(ucenterProperties.getRedirectUri(), "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error(ExceptionUtils.getMessage(e));
throw new GuliException(ResultCodeEnum.URL_ENCODE_ERROR);
} //生成随机state,防止csrf攻击
String state = UUID.randomUUID().toString();
//将state存入session
session.setAttribute("wx_open_state", state); String qrcodeUrl = String.format(
baseUrl,
ucenterProperties.getAppId(),
redirectUri,
state); //跳转到组装的url地址中去
return "redirect:" + qrcodeUrl;
}
}

授权url参数说明:

参数 是否必须 说明
appid 应用唯一标识
redirect_uri 请使用urlEncode对链接进行处理
response_type 填code
scope 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login
state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

4、测试

访问:访问以下授权url后会得到一个微信登录二维码

http://localhost:8160/api/ucenter/wx/login

5、前端整合登录超链接

pages/login.vue和register.vue中替换微信登录的超链接

三、集成Spring Session

使用spring session实现分布式session共享,对原有代码无侵入,自动在redis中存储session信息

1、service_ucenter中添加依赖

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

2、service_ucenter中添加配置文件

package com.atguigu.guli.service.base.config;

@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig { //可选配置
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
//我们可以将Spring Session默认的Cookie Key从SESSION替换为原生的JSESSIONID
serializer.setCookieName("JSESSIONID");
// CookiePath设置为根路径
serializer.setCookiePath("/");
// 配置了相关的正则表达式,可以达到同父域下的单点登录的效果
serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
return serializer;
}
}

最新文章

  1. 树状sql--采用递归方式获取节点
  2. Linux 内核日志——dmesg
  3. Asp.Net获取IP的方法
  4. MHA手动切换 原创1(主故障)
  5. python(4)&ndash;yield实现异步
  6. 动作-CCActionInterval之CCAnimation&CCAnimate
  7. centos 下 安装mysql
  8. Spring Boot Starters启动器
  9. Maven 自动打包上传到私服 Nexus
  10. C#调用VB进行简繁转换
  11. Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219
  12. LoRa术语
  13. 基于 WPF 平台的 ActiveReports Viewer控件
  14. VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法
  15. Markdown之语法入门篇
  16. JS中文转换(UTF-8),url传递中文乱码解决
  17. linux中iptables的用法
  18. MagicalRecord使用中的注意事项
  19. ButterKnife注入注解框架用法
  20. windows installer服务无法启动,无法打开任何msi文件

热门文章

  1. ECharts的下载和安装(图文详解)
  2. DirectX12的初始化
  3. 个人博客搭建Python实现-尝试-遇到的问题(10.1.1)
  4. k8s的kube-proxy
  5. Unity 2017 Scene界面与Game界面显示不同/过于灰暗的解决办法
  6. 简单的堆排序-python
  7. 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建
  8. 微软自带打包工具 InstallShield 的使用
  9. java中使用IO流复制文件
  10. 回车禁止form提交表单