From 66c7455d309bcc2c5aadff91cf35950f335e508d Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Fri, 6 Sep 2019 16:54:08 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=9B=86=E6=88=90=E7=BE=8E?= =?UTF-8?q?=E5=9B=A2=EF=BC=8C=E5=BE=85=E5=8F=91=E5=B8=831.12.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en-US.md | 6 +- README.md | 8 +- docs/README.md | 5 +- pom.xml | 2 +- .../java/me/zhyd/oauth/config/AuthSource.java | 27 +++++ .../oauth/request/AuthMeituanRequest.java | 114 ++++++++++++++++++ 6 files changed, 154 insertions(+), 8 deletions(-) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java diff --git a/README.en-US.md b/README.en-US.md index 396d8de..6b6ceff 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -6,7 +6,7 @@

- + @@ -15,7 +15,7 @@ - + @@ -66,6 +66,7 @@ + @@ -150,6 +151,7 @@ authRequest.login(callback); | | [AuthWeChatEnterpriseRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthWeChatEnterpriseRequest.java) | 参考文档 | | | [AuthKujialeRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthKujialeRequest.java) | 参考文档 | | | [AuthGitlabRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGitlabRequest.java) | 参考文档 | +| | [AuthMeituanRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | diff --git a/README.md b/README.md index 3e9bfdc..f59f473 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

- + @@ -15,7 +15,7 @@ - + @@ -66,6 +66,7 @@ + @@ -93,7 +94,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具 me.zhyd.oauth JustAuth - 1.11.0 + 1.12.0 ``` - 调用api @@ -160,6 +161,7 @@ authRequest.login(callback); | | [AuthWeChatEnterpriseRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthWeChatEnterpriseRequest.java) | 参考文档 | | | [AuthKujialeRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthKujialeRequest.java) | 参考文档 | | | [AuthGitlabRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGitlabRequest.java) | 参考文档 | +| | [AuthMeituanRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java) | 参考文档 | | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | _请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ diff --git a/docs/README.md b/docs/README.md index 748d042..cab35c2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@

- + @@ -18,7 +18,7 @@ - + @@ -90,6 +90,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具 | | [AuthCsdnRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthCsdnRequest.java) | 无 | | | [AuthKujialeRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthKujialeRequest.java) | 参考文档 | | | [AuthGitlabRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthGitlabRequest.java) | 参考文档 | +| | [AuthMeituanRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java) | 参考文档 | ## 快速开始 diff --git a/pom.xml b/pom.xml index ad532d2..ecea00e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.zhyd.oauth JustAuth - 1.11.0 + 1.12.0 JustAuth https://gitee.com/yadong.zhang/JustAuth diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index 99d0ed4..ee0c189 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -616,6 +616,33 @@ public enum AuthSource { public String userInfo() { return "https://gitlab.com/api/v4/user"; } + }, + + /** + * 美团 + * + * @since 1.12.0 + */ + MEITUAN { + @Override + public String authorize() { + return "https://openapi.waimai.meituan.com/oauth/authorize"; + } + + @Override + public String accessToken() { + return "https://openapi.waimai.meituan.com/oauth/access_token"; + } + + @Override + public String userInfo() { + return "https://openapi.waimai.meituan.com/oauth/userinfo"; + } + + @Override + public String refresh() { + return "https://openapi.waimai.meituan.com/oauth/refresh_token"; + } }; /** diff --git a/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java b/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java new file mode 100644 index 0000000..4ba079c --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthMeituanRequest.java @@ -0,0 +1,114 @@ +package me.zhyd.oauth.request; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import me.zhyd.oauth.cache.AuthStateCache; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.enums.AuthResponseStatus; +import me.zhyd.oauth.enums.AuthUserGender; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.utils.UrlBuilder; + +/** + * 美团登录 + * + * @author yadong.zhang (yadong.zhang0415(a)gmail.com) + * @since 1.12.0 + */ +public class AuthMeituanRequest extends AuthDefaultRequest { + + public AuthMeituanRequest(AuthConfig config) { + super(config, AuthSource.MEITUAN); + } + + public AuthMeituanRequest(AuthConfig config, AuthStateCache authStateCache) { + super(config, AuthSource.MEITUAN, authStateCache); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + HttpResponse response = HttpRequest.post(source.accessToken()) + .form("app_id", config.getClientId()) + .form("secret", config.getClientSecret()) + .form("code", authCallback.getCode()) + .form("grant_type", "authorization_code") + .execute(); + JSONObject object = JSONObject.parseObject(response.body()); + + this.checkResponse(object); + + return AuthToken.builder() + .accessToken(object.getString("access_token")) + .refreshToken(object.getString("refresh_token")) + .expireIn(object.getIntValue("expires_in")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + HttpResponse response = HttpRequest.post(source.userInfo()) + .form("app_id", config.getClientId()) + .form("secret", config.getClientSecret()) + .form("access_token", authToken.getAccessToken()) + .execute(); + JSONObject object = JSONObject.parseObject(response.body()); + + this.checkResponse(object); + + return AuthUser.builder() + .uuid(object.getString("openid")) + .username(object.getString("nickname")) + .nickname(object.getString("nickname")) + .avatar(object.getString("avatar")) + .gender(AuthUserGender.UNKNOWN) + .token(authToken) + .source(source) + .build(); + } + + @Override + public AuthResponse refresh(AuthToken oldToken) { + HttpResponse response = HttpRequest.post(source.accessToken()) + .form("app_id", config.getClientId()) + .form("secret", config.getClientSecret()) + .form("refresh_token", oldToken.getRefreshToken()) + .form("grant_type", "authorization_code") + .execute(); + JSONObject object = JSONObject.parseObject(response.body()); + + this.checkResponse(object); + + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(AuthToken.builder() + .accessToken(object.getString("access_token")) + .refreshToken(object.getString("refresh_token")) + .expireIn(object.getIntValue("expires_in")) + .build()) + .build(); + } + + private void checkResponse(JSONObject object) { + if (object.containsKey("error_code")) { + throw new AuthException(object.getString("erroe_msg")); + } + } + + @Override + public String authorize(String state) { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("response_type", "code") + .queryParam("app_id", config.getClientId()) + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("state", getRealState(state)) + .queryParam("scope", "") + .build(); + } + +} -- GitLab