/**
* 微信授权配置类
*
* @author lmj
*
* 2021年7月15日
*/
@Component
@Data
@ConfigurationProperties(prefix = "wechat")
public class WeChatConfig {
private String appid;// 应用唯一标识,审核通过获得
private String redirecturi;// 回调地址
private String appsecret;// 应用程序秘钥
private String teacherappid;
private String teacherappsecret;
/** 微信小程序 id */
private String AppletsAppID;
/** 微信小程序 密钥 */
private String AppletsAppSecret;
}
/**
* 微信授权
*
* @author lmj
*
* 2021年7月15日
*/
@Slf4j
public class HttpUtils {
// 微信 获取code
public static String apiToCode = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
// 微信 获得 access_token
public static String apiToAccessToken = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
// 微信 检查access_token是否有效 返回40003为错误
public static String api40003 = "https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID";
// 微信 获取用户信息
public static String apiToUser = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
// 微信 获取RefreshToken信息
public static String apiToRefreshToken = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";
// 微信小程序
/** 微信小程序获取人物信息 */
public static String code2Session = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code";
// 阿里云 获取Code
public static String AliapiToCode = "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=ENCODED_URL&state=init";
public static Object getHttp(String URL) {
Object object = null;
JSONObject jsonObject = null;
HttpGet httpGet = new HttpGet(URL);// get请求
try {
CloseableHttpClient httpClient = HttpClients.createDefault();// 请求模板
HttpResponse httpResponse = null;// 执行请求
httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = httpResponse.getEntity();// 获取值
String info = EntityUtils.toString(entity, "utf-8");
jsonObject = JSONObject.fromObject(info);
System.out.println(" 工具类中的信息 " + jsonObject.toString());
httpClient.close();
} else {
log.info("=======请求失败=========" +
httpResponse.getStatusLine().getStatusCode());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
httpGet.abort();
}
return jsonObject;
}
}
@Autowired
private WeChatConfig WeChat;
@AutoLog(value = "微信登录授权")
@ApiOperation(value = "微信登录授权", notes = "微信登录授权")
@GetMapping(value = "/test")
public Result<?> test(@RequestParam String code) {
/**
* 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要)
* 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
*/
String appid = WeChat.getAppid(); // 应用唯一标识,审核通过获得
String Appsecret = WeChat.getAppsecret();
// 第二步 通过code换取网页授权access_token
String api2 = HttpUtils.apiToAccessToken;
api2 = api2.replace("APPID", appid).replace("SECRET", Appsecret).replace("CODE", code);
Object object = HttpUtils.getHttp(api2);
System.out.println("Object 第二步获取token数据:" + object);
JSONObject jsonObject = JSONObject.fromObject(object);
// 第三步 拉取用户信息(需scope为 snsapi_userinfo)
// 编译 接口地址
String api3 = HttpUtils.apiToUser;
Object token = jsonObject.get("access_token");
String openid = jsonObject.getString("openid");
api3 = api3.replace("ACCESS_TOKEN", token.toString()).replace("OPENID", openid);
// 获取用户信息
Object object2 = HttpUtils.getHttp(api3);
JSONObject user = JSONObject.fromObject(object2);
// 通过unionid在数据库中进行查询
QueryWrapper<LoginAccountInformation> loginQuery = new QueryWrapper<LoginAccountInformation>();
String unionid = user.get("unionid").toString();
loginQuery.eq("unionid", unionid);
LoginAccountInformation login = loginService.getOne(loginQuery);
if (login != null) {
return Result.ok(login);
} else {
redisUtil.set(unionid, unionid, 3 * 60);
return Result.ok("此用户还未注册过!");
}
}
PC端微信授权
最新推荐文章于 2024-05-11 13:46:50 发布