From d9952968d10b361bb10217ede4fdf4929de011e8 Mon Sep 17 00:00:00 2001 From: harrylee Date: Tue, 10 Sep 2019 23:18:24 +0800 Subject: [PATCH] =?UTF-8?q?:memo:=20=E9=9B=86=E6=88=90=E4=BA=AC=E4=B8=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/config/AuthDefaultSource.java | 25 +++++ .../me/zhyd/oauth/request/AuthJdRequest.java | 100 ++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 src/main/java/me/zhyd/oauth/request/AuthJdRequest.java diff --git a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java index 9b239e1..f40384f 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java @@ -672,6 +672,31 @@ public enum AuthDefaultSource implements AuthSource { public String refresh() { return "https://open-api.shop.ele.me/token"; } + }, + /** + * 京东 + * @since + */ + JD { + @Override + public String authorize() { + return "https://open-oauth.jd.com/oauth2/to_login"; + } + + @Override + public String accessToken() { + return "https://open-oauth.jd.com/oauth2/access_token"; + } + + @Override + public String userInfo() { + return null; + } + + @Override + public String refresh() { + return "https://open-oauth.jd.com/oauth2/refresh_token"; + } } } diff --git a/src/main/java/me/zhyd/oauth/request/AuthJdRequest.java b/src/main/java/me/zhyd/oauth/request/AuthJdRequest.java new file mode 100644 index 0000000..f8bacec --- /dev/null +++ b/src/main/java/me/zhyd/oauth/request/AuthJdRequest.java @@ -0,0 +1,100 @@ +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.AuthDefaultSource; +import me.zhyd.oauth.enums.AuthResponseStatus; +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 harry.lee (harryleexyz@qq.com) + * @since + */ +public class AuthJdRequest extends AuthDefaultRequest { + + public AuthJdRequest(AuthConfig config) { + super(config, AuthDefaultSource.JD); + } + + public AuthJdRequest(AuthConfig config, AuthStateCache authStateCache) { + super(config, AuthDefaultSource.JD, authStateCache); + } + + @Override + protected AuthToken getAccessToken(AuthCallback authCallback) { + HttpResponse response = HttpRequest.post(source.accessToken()) + .form("app_key", config.getClientId()) + .form("app_secret", config.getClientSecret()) + .form("grant_type", "authorization_code") + .form("code", authCallback.getCode()) + .execute(); + JSONObject object = JSONObject.parseObject(response.body()); + + this.checkResponse(object); + + return AuthToken.builder() + .accessToken(object.getString("access_token")) + .expireIn(object.getIntValue("expires_in")) + .refreshToken(object.getString("refresh_token")) + .scope(object.getString("scope")) + .openId(object.getString("open_id")) + .build(); + } + + @Override + protected AuthUser getUserInfo(AuthToken authToken) { + return null; + } + + @Override + public AuthResponse refresh(AuthToken oldToken) { + HttpResponse response = HttpRequest.post(source.refresh()) + .form("app_key", config.getClientId()) + .form("app_secret", config.getClientSecret()) + .form("grant_type", "refresh_token") + .form("refresh_token", oldToken.getRefreshToken()) + .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")) + .expireIn(object.getIntValue("expires_in")) + .refreshToken(object.getString("refresh_token")) + .scope(object.getString("scope")) + .openId(object.getString("open_id")) + .build()) + .build(); + } + + private void checkResponse(JSONObject object) { + if (object.containsKey("msg")) { + throw new AuthException(object.getString("msg")); + } + } + + @Override + public String authorize(String state) { + return UrlBuilder.fromBaseUrl(source.authorize()) + .queryParam("app_key", config.getClientId()) + .queryParam("response_type", "code") + .queryParam("redirect_uri", config.getRedirectUri()) + .queryParam("scope", "snsapi_base") + .queryParam("state", getRealState(state)) + .build(); + } + +} -- GitLab