[JAVA实现]微信公众号网页授权登录,java开发面试笔试题


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化

 

网上搜资料时,网友都说官方文档太垃圾了不易看懂,如何如何的。现在个人整理了一个通俗易懂易上手的,希望可以帮助到刚接触微信接口的你。

 

请看流程图!看懂图,就懂了一半了:

其实整体流程大体只需三步:用户点击登录按钮(其实就相当于一个链接) ---》 用户点击授权登录 ----》 实现获取用户信息代码。

然后获取用户信息代码只需三步:获取code ----》 通过code获取access_token和openId ---》 通过access_token和openId获取用户信息(包含union)。

以上便是整体套路,当然官网上也有,但具体如何实现呢?

不着急,咱们一步一步来!

第一步:微信登录按钮

它其实就是一个连接,不过想得到这个链接,有一点点麻烦。

1、设置。 微信公众平台---》接口权限---》网页授权---》修改 ---》设置网页授权域名(域名,不含http://),其实就是微信调你的java方法的项目路径或项目域名,如:www.zzff.net/pp ---》点击设置后弹出页面(大致意思,将MP_verify_31qRIDcjN8ZD1lVJ.txt放在你项目路径下面,如:www.ffzz.net/pp/MP_verify_31qRIDcjN8ZD1lVJ.txt 能访问到) ---》点击确认,授权回调页面域名设置成功!

2、拼链接。 https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx公众号IDxxxxx & redirect_uri = 授权回调页面域名/你的action(即微信授权后跳向的地址)

& response_type=code(固定的) & scope = snsapi_userinfo(或者snsapi_base默认授权) & state=STATE#wechat_redirect

如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&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重定向时候,必须带此参数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第二步:授权确认登录

这一步最简单,第一步登录链接拼好后,在手机微信中打开,微信便会跳转到确认授权页面,点击确认授权即可。(这一步,不用开发者做处理!)

第三步:获取用户信息 (重点)
这一步便是真正的代码实现的地方。开篇便讲了,它只需三步:获取code ----》 通过code获取access_token和openId ---》 通过access_token和openId获取用户信息。

First: 获取code

Second: 获取网页授权access_token和openId

Third:通过access_token和openId获取用户信息。

关于union机制的细节:如果开发者需要公众号微信登录和APP微信登录共用一个微信ID,那个就需要union机制了。其实很简单,需在微信开放平台(open.weixin.qq.com)绑定公众号,获取用户信息时就会返回union字段

具体代码实现为:实体 ---- 方法 --- 工具

实体Oauth2Token:



 

 1 package com.wfcm.wxUitls;

 2 

 3 /**

 4 * 类名: WeixinOauth2Token </br>

 5 * 描述:  网页授权信息  </br>

 6 * 创建时间:  2015-11-27 </br>

 7 * 发布版本:V1.0  </br>

 8  */

 9 public class Oauth2Token {

10     // 网页授权接口调用凭证

11     private String accessToken;

12     // 凭证有效时长

13     private int expiresIn;

14     // 用于刷新凭证

15     private String refreshToken;

16     // 用户标识

17     private String openId;

18     // 用户授权作用域

19     private String scope;

20 

21     public String getAccessToken() {

22         return accessToken;

23     }

24 

25     public void setAccessToken(String accessToken) {

26         this.accessToken = accessToken;

27     }

28 

29     public int getExpiresIn() {

30         return expiresIn;

31     }

32 

33     public void setExpiresIn(int expiresIn) {

34         this.expiresIn = expiresIn;

35     }

36 

37     public String getRefreshToken() {

38         return refreshToken;

39     }

40 

41     public void setRefreshToken(String refreshToken) {

42         this.refreshToken = refreshToken;

43     }

44 

45     public String getOpenId() {

46         return openId;

47     }

48 

49     public void setOpenId(String openId) {

50         this.openId = openId;

51     }

52 

53     public String getScope() {

54         return scope;

55     }

56 

57     public void setScope(String scope) {

58         this.scope = scope;

59     }

60 }





View Code

实体SNSUserInfo:



 

  1 package com.wfcm.wxUitls;

  2 

  3 import java.util.List;

  4 

  5 /**

  6 * 类名: SNSUserInfo </br>

  7 * 描述: 通过网页授权获取的用户信息 </br>

  8 * 开发人员: wzf </br>

  9 * 创建时间:  2015-11-27 </br>

 10 * 发布版本:V1.0  </br>

 11  */

 12 public class SNSUserInfo {

 13     // 用户标识

 14     private String openId;

 15     // 用户昵称

 16     private String nickname;

 17     // 性别(1是男性,2是女性,0是未知)

 18     private int sex;

 19     // 国家

 20     private String country;

 21     // 省份

 22     private String province;

 23     // 城市

 24     private String city;

 25     // 用户头像链接

 26     private String headImgUrl;

 27     // 用户特权信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值