AuthAlipayRequest.java 3.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
package me.zhyd.oauth.request;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.request.AlipayUserInfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import com.alipay.api.response.AlipayUserInfoShareResponse;
import me.zhyd.oauth.config.AuthConfig;
11
import me.zhyd.oauth.config.AuthSource;
智布道's avatar
智布道 已提交
12
import me.zhyd.oauth.enums.AuthUserGender;
13
import me.zhyd.oauth.exception.AuthException;
14
import me.zhyd.oauth.model.AuthCallback;
15
import me.zhyd.oauth.model.AuthToken;
16 17
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.utils.StringUtils;
不合群的混子's avatar
不合群的混子 已提交
18
import me.zhyd.oauth.utils.UrlBuilder;
19 20

/**
21 22
 * 支付宝登录
 *
23 24 25 26
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @version 1.0
 * @since 1.8
 */
智布道's avatar
智布道 已提交
27
public class AuthAlipayRequest extends AuthDefaultRequest {
28 29 30 31

    private AlipayClient alipayClient;

    public AuthAlipayRequest(AuthConfig config) {
不合群的混子's avatar
不合群的混子 已提交
32
        super(config, AuthSource.ALIPAY);
33
        this.alipayClient = new DefaultAlipayClient(AuthSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config
不合群的混子's avatar
不合群的混子 已提交
34
            .getAlipayPublicKey(), "RSA2");
35 36 37
    }

    @Override
38
    protected AuthToken getAccessToken(AuthCallback authCallback) {
39 40
        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
        request.setGrantType("authorization_code");
智布道's avatar
智布道 已提交
41
        request.setCode(authCallback.getAuth_code());
42 43 44 45
        AlipaySystemOauthTokenResponse response = null;
        try {
            response = this.alipayClient.execute(request);
        } catch (Exception e) {
智布道's avatar
智布道 已提交
46
            throw new AuthException(e);
47 48 49 50
        }
        if (!response.isSuccess()) {
            throw new AuthException(response.getSubMsg());
        }
51
        return AuthToken.builder()
不合群的混子's avatar
不合群的混子 已提交
52 53 54 55 56
            .accessToken(response.getAccessToken())
            .uid(response.getUserId())
            .expireIn(Integer.parseInt(response.getExpiresIn()))
            .refreshToken(response.getRefreshToken())
            .build();
57 58 59
    }

    @Override
60 61
    protected AuthUser getUserInfo(AuthToken authToken) {
        String accessToken = authToken.getAccessToken();
62 63 64 65 66 67 68 69 70 71
        AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
        AlipayUserInfoShareResponse response = null;
        try {
            response = this.alipayClient.execute(request, accessToken);
        } catch (AlipayApiException e) {
            throw new AuthException(e.getErrMsg(), e);
        }
        if (!response.isSuccess()) {
            throw new AuthException(response.getSubMsg());
        }
智布道's avatar
智布道 已提交
72

不合群的混子's avatar
不合群的混子 已提交
73
        String province = response.getProvince(), city = response.getCity();
智布道's avatar
智布道 已提交
74 75
        String location = String.format("%s %s", StringUtils.isEmpty(province) ? "" : province, StringUtils.isEmpty(city) ? "" : city);

76
        return AuthUser.builder()
不合群的混子's avatar
不合群的混子 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
            .uuid(response.getUserId())
            .username(StringUtils.isEmpty(response.getUserName()) ? response.getNickName() : response.getUserName())
            .nickname(response.getNickName())
            .avatar(response.getAvatar())
            .location(location)
            .gender(AuthUserGender.getRealGender(response.getGender()))
            .token(authToken)
            .source(AuthSource.ALIPAY)
            .build();
    }

    /**
     * 返回认证url,可自行跳转页面
     *
     * @return 返回授权地址
     */
    @Override
    public String authorize() {
        return UrlBuilder.fromBaseUrl(source.authorize())
            .queryParam("app_id", config.getClientId())
            .queryParam("scope", "auth_user")
            .queryParam("redirect_uri", config.getRedirectUri())
            .queryParam("state", getRealState(config.getState()))
            .build();
101 102
    }
}