微信扫码登陆-Java后台
时间:2019-12-19
本文章向大家介绍微信扫码登陆-Java后台,主要包括微信扫码登陆-Java后台使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
直接上代码,参考自:https://blog.csdn.net/qq_36014509/article/details/88996562 部分不通用,请自行结合项目修改
1 import com.tryee.common.utils.StringUtils; 2 import com.tryee.front.common.ResponseData; 3 import org.springframework.beans.factory.annotation.Value; 4 import org.springframework.http.HttpStatus; 5 import org.springframework.web.bind.annotation.*; 6 import com.alibaba.fastjson.JSONObject; 7 import com.jfinal.kit.HttpKit; 8 import java.util.HashMap; 9 import java.util.Map; 10 11 @RestController 12 @RequestMapping("/front/login/pc/") 13 public class WxCb { 14 15 @Value("${wx.pc.fw.accessTokenUrl}") 16 private String pcAccessTokenUrl; 17 18 @Value("${wx.pc.fw.userInfoUrl}") 19 private String pcUserInfoUrl; 20 21 @Value("${wx.appid}") 22 private String pcAppID; 23 24 @Value("${wx.appsecret}") 25 private String pcAppsecret; 26 27 28 @RequestMapping(value = "pcLoginByWeiXin", method = RequestMethod.GET) 29 @ResponseStatus(HttpStatus.OK) 30 public ResponseData pcLoginByWeiXin(@RequestParam String state, @RequestParam String code) { 31 /** 错误信息 **/ 32 Map<String, String> resMap = new HashMap<>(); 33 Map<String, String> res = new HashMap<>(); 34 if ( StringUtils.isBlank(code)) { 35 resMap.put("501", "微信code为空"); 36 return ResponseData.fail(resMap); 37 } 38 if (code != null) { 39 // 第一次进入界面,code不空,openid为空,根据code获取openid,然后查询是否存在用户信息。 40 Map<String, String> accessTokenMap = getPcWXAccessToken(code); // 获取getWXAccessToken(微信网站PC扫码登录) 41 /** 请求微信服务器错误 **/ 42 if (accessTokenMap.get("errcode") != null) { 43 resMap.put(accessTokenMap.get("errcode"), accessTokenMap.get("errmsg")); 44 return ResponseData.fail(resMap); 45 } 46 String accessToken = accessTokenMap.get("access_token"); 47 String openid = accessTokenMap.get("openid"); 48 System.out.println("accessToken:"+accessToken); 49 System.out.println("openid:"+openid); 50 // 查询出微信信息 51 Map<String, String> wxUserMap = this.getPcWeiXinUserInfo(openid, accessToken); // 获得微信用户信息 52 res = wxUserMap; 53 /** 获取微信信息异常 **/ 54 if (wxUserMap.get("errcode") != null) { 55 resMap.put(wxUserMap.get("errcode"), wxUserMap.get("errmsg")); 56 return ResponseData.fail(resMap); 57 } 58 59 60 } 61 return ResponseData.success(res); 62 } 63 64 /** 65 * 获取getPcWXAccessToken(微信网站PC扫码) 66 * 67 */ 68 private Map<String, String> getPcWXAccessToken(String code) { 69 Map<String, String> resMap = new HashMap<String, String>(); 70 StringBuffer target = new StringBuffer(); 71 target.append(pcAccessTokenUrl).append("appid=").append(pcAppID).append("&secret=").append(pcAppsecret) 72 .append("&code=").append(code).append("&grant_type=authorization_code"); 73 String jsonStr = HttpKit.get(target.toString()); 74 JSONObject jSONObject = JSONObject.parseObject(jsonStr); 75 if (jSONObject != null && jSONObject.get("errcode") != null) { // 有错误码 76 String errcode = String.valueOf(jSONObject.get("errcode")); 77 String errmsg = String.valueOf(jSONObject.get("errmsg")); 78 resMap.put("errmsg", errmsg); 79 resMap.put("errcode", errcode); 80 } else { 81 String accessToken = String.valueOf(jSONObject.get("access_token")); 82 String refreshToken = String.valueOf(jSONObject.get("refresh_token")); 83 String openid = String.valueOf(jSONObject.get("openid")); 84 String expiresIn = String.valueOf(jSONObject.get("expires_in")); 85 String unionid = String.valueOf(jSONObject.get("unionid")); 86 87 resMap.put("access_token", accessToken); 88 resMap.put("refresh_token", refreshToken); 89 resMap.put("openid", openid); 90 resMap.put("expires_in", expiresIn); 91 resMap.put("unionid", unionid); 92 } 93 return resMap; 94 } 95 96 /** 97 * 获得微信用户信息(微信网站PC扫码) 98 * 99 * @param openId 100 * @param accessToken 101 * @return 102 */ 103 private Map<String, String> getPcWeiXinUserInfo(String openId, String accessToken) { 104 Map<String, String> resMap = new HashMap<String, String>(); 105 StringBuffer url = new StringBuffer(pcUserInfoUrl); 106 url.append("access_token=").append(accessToken).append("&").append("openid=").append(openId).append("&") 107 .append("lang=zh_CN"); 108 String jsonStr = HttpKit.get(url.toString()); 109 JSONObject jSONObject = JSONObject.parseObject(jsonStr); 110 if (jSONObject != null && jSONObject.get("errcode") != null) { 111 String errcode = String.valueOf(jSONObject.get("errcode")); 112 String errmsg = String.valueOf(jSONObject.get("errmsg")); 113 resMap.put("errmsg", errmsg); 114 resMap.put("errcode", errcode); 115 } else { 116 String nickname = String.valueOf(jSONObject.get("nickname")); 117 String openid = String.valueOf(jSONObject.get("openid")); 118 String sex = String.valueOf(jSONObject.get("sex")); 119 String province = String.valueOf(jSONObject.get("province")); 120 String city = String.valueOf(jSONObject.get("city")); 121 String country = String.valueOf(jSONObject.get("country")); 122 String headimgurl = String.valueOf(jSONObject.get("headimgurl")); 123 String unionid = String.valueOf(jSONObject.get("unionid")); 124 125 resMap.put("nickname", nickname); 126 resMap.put("openid", openid); 127 resMap.put("sex", sex); 128 resMap.put("province", province); 129 resMap.put("city", city); 130 resMap.put("country", country); 131 resMap.put("headimgurl", headimgurl); 132 resMap.put("unionid", unionid); 133 } 134 return resMap; 135 } 136 137 138 }
原文地址:https://www.cnblogs.com/skytoangel/p/12066725.html
- Mifa Design:一个服务于 Markdown 的设计体系
- 未来机器人大脑将获取互联网知识自我学习
- 【架构拾集】: Android 移动应用架构设计
- Dore 混合应用框架 —— 基于 React Native 的混合应用迁移方案
- Android6.0源码分析之View(二)--measure Android6.0源码分析之View(一)
- 程序员,2017年你的技能树上增加了哪些新技能?
- Android6.0源码分析之View(一)
- 2017 年,我挖的那些开源软件坑
- Android6.0蓝牙开发中获取附近低功耗蓝牙设备结果权限问题分析
- 我的技术投资策略:如何决定学习哪一个新技术的?
- 我的技术投资策略:如何决定学习哪一个新技术的?
- Android6.0源码之蓝牙研究汇总(一)--from初学者
- Android6.0蓝牙协议之OPP
- 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 前端|创建简单动态时钟
- R语言做几何布朗运动的模拟:复杂金融产品的几何布朗运动的模拟
- 手把手教你使用Flask搭建ES搜索引擎(实战篇)
- 【基础篇】Python+Go——带大家一起另寻途径提高计算性能
- 转录组分析 | 使用Trimmomatic过滤Fastq文件
- 转录组分析 | 使用FastQC进行数据质控
- R语言绘图 | 给箱线图加个点
- R语言绘图 | 使用pheatmap快速绘制热图
- 可能是目前最详细从零开始配置 TypeScript 项目的教程
- 比对得到的SAM文件怎么看?
- ANTNet|端侧架构,精度速度双超MobileNetV2
- 9个动图带你进入PyQtGraph的强大可视化世界
- 转录组分析 | 使用STAR进行比对
- 使用R/qtl进行QTL分析
- 转录组分析 | 使用RSEM进行转录本定量