时间:2017年08月12日星期六
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学源码:无
学习源码:https://github.com/zccodere/s...

第一章:课程介绍

1-1 课程介绍

课程内容

课程介绍
登录方式介绍
基于微信公众号授权登录
微信开放平台介绍
基于微信开放平台实现授权登录
微信公众号与微信开放平台关联整合

第二章:登录方式介绍

2-1 登录方式介绍

微信登录介绍

微信开放平台
微信公众号(微信公众平台)

手机授权登录页

实现方式

没有自己的账号体系,直接拉取微信用户信息来进行网站登录。
有自己的账号体系,授权成功后需要绑定自己的账号。

第三章:基于公众号的登录

3-1 公众号授权登录

接口文档

路径:微信网页开发》微信网页授权
地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

创建名为wxdevauth的maven项目,POM文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.myimooc</groupId><artifactId>wxdevauth</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>wxdevauth</name><url>http://maven.apache.org</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.36</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project>

完成后的项目结构如下

说明:由于条件限制,此项目代码均没有进行测试,这里只是显示大概开发过程。

代码演示:

1.编写User类

package com.myimooc.wxdevauth.wxauth.domain;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;/*** 自有用户账号体系* @author ZhangCheng on 2017-08-12**/
@Entity
public class User {@Id@GeneratedValueprivate Long id;private String account;private String password;private String nickname;private String openid;private String unionid;@Overridepublic String toString() {return "User [id=" + id + ", account=" + account + ", password=" + password + ", nickname=" + nickname+ ", openid=" + openid + "]";}public String getUnionid() {return unionid;}public void setUnionid(String unionid) {this.unionid = unionid;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getOpenid() {return openid;}public void setOpenid(String openid) {this.openid = openid;}}

2.编写UserRepository类

package com.myimooc.wxdevauth.wxauth.repository;import org.springframework.data.jpa.repository.JpaRepository;import com.myimooc.wxdevauth.wxauth.domain.User;/*** 用户相关资源类* @author ZhangCheng on 2017-08-12**/
public interface UserRepository extends JpaRepository<User, Long> {User findByunionid(String unionid);}

3.编写AuthUtils类

package com.myimooc.wxdevauth.wxauth.util;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;import com.alibaba.fastjson.JSONObject;/*** 使用Http进行认证请求* @author ZhangCheng on 2017-08-12**/
public class AuthUtils {public static final String APPID="dsadqawer2124a5wdqw1";public static final String APPSECRET = "dsadaq875w5edqwd58qwdqwbgthr4t5qa";private static final String CHARSET_FORMAT = "UTF-8";/*** 发起GET请求,并将响应数据封装为JSON*/public static JSONObject doGetJson(String url) throws Exception{JSONObject jsonObject = null;HttpClientBuilder  builder = HttpClientBuilder.create();HttpGet httpGet = new HttpGet(url);HttpResponse response = builder.build().execute(httpGet);HttpEntity entity = response.getEntity();if(null != entity){String result = EntityUtils.toString(entity,CHARSET_FORMAT);jsonObject = JSONObject.parseObject(result);}return jsonObject;}}

4.编写LoginRest类

package com.myimooc.wxdevauth.wxauth.rest;import java.net.URLEncoder;
import java.util.Objects;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSONObject;
import com.myimooc.wxdevauth.wxauth.domain.User;
import com.myimooc.wxdevauth.wxauth.repository.UserRepository;
import com.myimooc.wxdevauth.wxauth.util.AuthUtils;/*** 登录认证REST* @author ZhangCheng on 2017-08-12**/
@Controller
public class LoginRest {@Autowiredprivate UserRepository userRepository;@RequestMapping(value={"/","","/index"})public ModelAndView index(){return new ModelAndView("index");}/*** 第一步:用户同意授权,获取code* 入口地址*/@RequestMapping("wxlogin")public Object doLogin(HttpServletRequest req){// 用户授权后微信回调地址String backUrl = "/callback";@SuppressWarnings("deprecation")String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+AuthUtils.APPID+ "&redirect_uri="+URLEncoder.encode(backUrl)+ "&response_type=code"+ "&scope=snsapi_userinfo "+ "&state=STATE#wechat_redirect";return "redirect:"+url;}/*** 第二步:通过code换取网页授权access_token* 回调地址-得到code,从而去获得access_token 和 openid*/@RequestMapping("/callback")public ModelAndView doCallBack(HttpServletRequest req)throws Exception{String code = req.getParameter("code");String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+AuthUtils.APPID+ "&secret="+AuthUtils.APPSECRET+ "&code="+code+ "&grant_type=authorization_code";JSONObject jsonObject = AuthUtils.doGetJson(url);String openid = jsonObject.getString("openid");String access_token = jsonObject.getString("access_token");// 第三步:刷新access_token(如果需要)// 此处省略// 第四步:拉取用户信息(需scope为 snsapi_userinfo)String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+ "&openid="+openid+ "&lang=zh_CN";JSONObject userInfo = AuthUtils.doGetJson(infoUrl);System.out.println("用户信息:"+userInfo);ModelAndView mv = new ModelAndView("success");mv.addObject("info",userInfo);String unionid = userInfo.getString("unionid");// 1.使用微信用户信息直接登录,无须注册和绑定,直接跳转到登录成功界面//ModelAndView mv = new ModelAndView("success");//mv.addObject("info",userInfo);//return mv;// 2.将微信与当前系统的账号进行绑定,绑定后跳转到登录成功界面User user = userRepository.findByunionid(unionid);if(null != user && (!Objects.equals("", user.getNickname()))){// 已绑定,直接跳转绑定成功的页面mv.setViewName("bindsuccess");mv.addObject("nickname", user.getNickname());return mv;}else{// 未绑定,跳转到自己系统的登录页面mv.setViewName("login");mv.addObject("unionid", unionid);return mv;}}/*** 登录并绑定微信账号*/@PostMapping("/bindwx")public Object bindwx(User user){userRepository.save(user);return "账号绑定成功";}
}

第四章:微信开放平台介绍

4-1 微信开放平台介绍

微信开放平台

地址:https://open.weixin.qq.com/

注册并登录成功后,需进行开发者认证

第五章:基于开放平台登录

5-1 开放平台授权登录

接口文档

路径:网站应用》网站应用微信登录开发指南
地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN

开发方式与使用微信公众号登录的方式类似,仅仅可能是调用的微信接口地址不同而已,就不提供代码演示了,源码请到我的github地址查看。

第六章:公众号与开发平台关联

6-1 公众号与开放平台关联

情景说明:

当使用pc端进行微信授权登录时,得到的openid和公众号授权登录时得到的openid不一样。

为什么不一样

当我们在微信公众号里面绑定了并且授权了应用A的时候,会产生一个openid。而在开放平台授权应用A的时候,又会参数另外一个openid。它们两个是完全独立的,即微信公众号与开放平台之间是相互独立的,它们之间并没有关联关系。

在开放平台里面绑定公众账号

开放平台与公众账号之间的关系是如何体现的

使用UnionID机制

什么是UnionID机制

比如像万达集团,万达影业与万达百货希望做到会员卡通用。
微信在这里做了一个打通机制,对于同一个企业,在用户属性里面加了一个企业属性(UnionID),
方便同一个企业在不同的产品中识别到同一个用户。

如何识别是同一个企业

只要绑定在同一个开放平台下所有移动应用、网站应用、微信公众号都具备同一个UnionID

即在绑定微信账号时,不再使用openid字段进行绑定,使用unionid字段进行绑定即可。

慕课网_《微信授权登录》学习总结相关推荐

  1. 微信授权登录(微信订阅号使用测试账号)

    1.微信授权登录: 微信公众号测试登录: 准备: 1.1 花生壳! 下载地址:http://hsk.oray.com/download/ 1.2 微信公众号:https://mp.weixin.qq. ...

  2. 硅谷课堂 12_公众号消息和微信授权登录

    硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...

  3. uni app和php开发微信登录代码,uniapp如何实现微信授权登录

    uniapp实现微信授权登录的方法:首先获取对应的appid和appsecret:然后在uniapp项目的manifest.json中进行APP SDK配置和模块权限配置.最后实现编码. 本教程操作环 ...

  4. thinkphp 微信授权登录 以及微信实现分享

    <?php namespace app\wechat\controller; use think\Controller; use think\Request; /** * 微信授权登录类 * U ...

  5. code换取微信openid_微信授权登录开发的两种方式

    本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...

  6. Java版本微信授权登录(升级版)

    前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...

  7. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  8. uniapp开发h5微信授权登录(详细教程)

    uniapp开发h5微信授权登录 文章目录 uniapp开发h5微信授权登录 前言 一.前期准备--申请测试账号 二.正式开发--前端代码 三.打包发布 总结 前言 我也是第一次做h5授权微信登录,网 ...

  9. springboot微信授权登录

    水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular, ...

最新文章

  1. Tomcat组成与工作原理
  2. AI会完美的执行我们设定的目标,但这不是一个好消息
  3. Nature科学报告:这项研究,有助于截肢患者可以恢复痛觉感知
  4. 卓越管理的秘密(Behind Closed Doors)
  5. Angular router-outlet占位符层级结构的子节点,运行时是如何插入的
  6. 11下滑半个屏幕_努比亚发布手表手机:柔性屏幕,体积感人
  7. 设计模式笔记十二:享元模式 | 更新版
  8. Android UI系列-----ScrollView和HorizontalScrollView
  9. 表级约束和列级约束(二十)
  10. 不要在作死的边缘试探(最后那个英雄手势挺好玩儿的)
  11. QT5.14.2+VS2017环境安装
  12. zTree实现树的模糊搜索功能
  13. 【虚拟化生态平台】虚拟化平台搭建
  14. 基于FPGA打地鼠游戏的设计与实现
  15. 大数据在互联网行业的应用
  16. bios找不到硬盘模式选项如何解决?
  17. 如何在浏览器查看渲染时间?
  18. 东莞地铁1号线黄江北站主体结构全面封顶
  19. 打印机扫描计算机远程扫描仪,未在设备上将扫描类型设置为(远程扫描仪)的解决方法...
  20. 组合学:使用10个数字与52个字母生成1477万个不重复的4位串码V4衍生版本

热门文章

  1. 细数高光时刻,2020全球科技巨头如何激战AI?
  2. 【专家观点】刘经南院士:北斗+5G为何能引领新基建?
  3. 二十世纪最伟大的10大算法
  4. 联合国2019数字经济报告
  5. 神秘的中国超算:比肩高铁的世界级领先
  6. 关于机器学习实战,那些教科书里学不到的12个“民间智慧”
  7. GAN 的发展对于研究通用人工智能有什么意义?
  8. Google Brain 团队的研究方法
  9. 为什么当今的企业都需要人工智能战略?
  10. 其实,我是一名程序员!