|
@@ -1,221 +0,0 @@
|
|
-package com.zanxiang.sdk.service.auth;
|
|
|
|
-
|
|
|
|
-import cn.hutool.http.HttpUtil;
|
|
|
|
-import com.zanxiang.common.exception.BaseException;
|
|
|
|
-import com.zanxiang.common.utils.URIUtil;
|
|
|
|
-import com.zanxiang.module.util.JsonUtil;
|
|
|
|
-import com.zanxiang.sdk.constant.ApiUrlConstant;
|
|
|
|
-import com.zanxiang.sdk.service.IVxApiService;
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
-import org.apache.logging.log4j.util.Strings;
|
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
|
-
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.Objects;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @author : lingfeng
|
|
|
|
- * @time : 2022-06-20
|
|
|
|
- * @description : 微信api接口
|
|
|
|
- */
|
|
|
|
-@Slf4j
|
|
|
|
-@Service
|
|
|
|
-public class VxApiServiceImpl implements IVxApiService {
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 微信开发者应用id
|
|
|
|
- */
|
|
|
|
- @Value("${auth.vx-appId}")
|
|
|
|
- private String vxAppId;
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 微信开发者应用key
|
|
|
|
- */
|
|
|
|
- @Value("${auth.vx-appSecret}")
|
|
|
|
- private String vxAppSecret;
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * QQ授权获取用户信息
|
|
|
|
- *
|
|
|
|
- * @param code : 前端授权code
|
|
|
|
- * @return : 返回用户信息
|
|
|
|
- */
|
|
|
|
- @Override
|
|
|
|
- public Map<String, String> vxAuthUserInfo(String code) {
|
|
|
|
- // 向QQ认证服务器申请令牌
|
|
|
|
- Map<String, String> tokenResultMap = this.getAccessTokenApi(code);
|
|
|
|
- if (tokenResultMap.isEmpty()) {
|
|
|
|
- throw new BaseException("获取token失败");
|
|
|
|
- }
|
|
|
|
- // 获取用户信息
|
|
|
|
- Map<String, String> userInfoMap = this.getUserInfoApi(tokenResultMap.get("access_token"), tokenResultMap.get("openid"));
|
|
|
|
- if (userInfoMap.isEmpty()) {
|
|
|
|
- throw new BaseException("获取用户信息失败");
|
|
|
|
- }
|
|
|
|
- //构造返回信息
|
|
|
|
- Map<String, String> map = new HashMap<>(3);
|
|
|
|
- map.put("openId", tokenResultMap.get("openid"));
|
|
|
|
- map.put("accessToken", tokenResultMap.get("access_token"));
|
|
|
|
- map.put("nickname", userInfoMap.get("nickname"));
|
|
|
|
- map.put("avatar", userInfoMap.get("headimgurl"));
|
|
|
|
- map.put("six", userInfoMap.get("six"));
|
|
|
|
- return map;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * web获取用户授权token
|
|
|
|
- * <p>
|
|
|
|
- * 成功示例 :
|
|
|
|
- * {
|
|
|
|
- * "access_token":"ACCESS_TOKEN",
|
|
|
|
- * "expires_in":7200,
|
|
|
|
- * "refresh_token":"REFRESH_TOKEN",
|
|
|
|
- * "openid":"OPENID",
|
|
|
|
- * "scope":"SCOPE"
|
|
|
|
- * }
|
|
|
|
- * <p>
|
|
|
|
- * 错误返回样例:
|
|
|
|
- * {
|
|
|
|
- * "errcode":40029,"errmsg":"invalid code"
|
|
|
|
- * }
|
|
|
|
- *
|
|
|
|
- * @param code : 用户授权code
|
|
|
|
- * @return : 返回token
|
|
|
|
- */
|
|
|
|
- private Map<String, String> getAccessTokenApi(String code) {
|
|
|
|
- Map<String, String> paramMap = new HashMap<>(4);
|
|
|
|
- paramMap.put("appid", vxAppId);
|
|
|
|
- paramMap.put("secret", vxAppSecret);
|
|
|
|
- paramMap.put("code", code);
|
|
|
|
- paramMap.put("grant_type", "authorization_code");
|
|
|
|
- //拼接url请求参数
|
|
|
|
- Map<String, String> resultMap = new HashMap<>();
|
|
|
|
- try {
|
|
|
|
- String uri = URIUtil.fillUrlParams(ApiUrlConstant.VX_WEB_TOKEN_URL, paramMap, Boolean.TRUE);
|
|
|
|
- String result = HttpUtil.get(uri);
|
|
|
|
- if (Strings.isNotBlank(result)) {
|
|
|
|
- resultMap = JsonUtil.toMap(result, Map.class, String.class);
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("微信获取用户授权token异常");
|
|
|
|
- throw new BaseException("微信获取用户授权token异常");
|
|
|
|
- }
|
|
|
|
- return resultMap;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * web刷新用户token
|
|
|
|
- * <p>
|
|
|
|
- * 成功示例 :
|
|
|
|
- * {
|
|
|
|
- * "access_token":"ACCESS_TOKEN",
|
|
|
|
- * "expires_in":7200,
|
|
|
|
- * "refresh_token":"REFRESH_TOKEN",
|
|
|
|
- * "openid":"OPENID",
|
|
|
|
- * "scope":"SCOPE"
|
|
|
|
- * }
|
|
|
|
- * <p>
|
|
|
|
- * 错误返回样例:
|
|
|
|
- * {
|
|
|
|
- * "errcode":40030,"errmsg":"invalid refresh_token"
|
|
|
|
- * }
|
|
|
|
- *
|
|
|
|
- * @param refreshToken : 刷新token密钥
|
|
|
|
- * @return : 返回新的token
|
|
|
|
- */
|
|
|
|
- private Map<String, String> refreshTokenApi(String refreshToken) {
|
|
|
|
- Map<String, String> paramMap = new HashMap<>(4);
|
|
|
|
- paramMap.put("appid", vxAppId);
|
|
|
|
- paramMap.put("grant_type", "refresh_token");
|
|
|
|
- paramMap.put("refresh_token", refreshToken);
|
|
|
|
- //拼接url请求参数
|
|
|
|
- Map<String, String> resultMap = new HashMap<>();
|
|
|
|
- try {
|
|
|
|
- String uri = URIUtil.fillUrlParams(ApiUrlConstant.VX_WEB_TOKEN_REFRESH_URL, paramMap, Boolean.TRUE);
|
|
|
|
- String result = HttpUtil.get(uri);
|
|
|
|
- if (Strings.isNotBlank(result)) {
|
|
|
|
- resultMap = JsonUtil.toMap(result, Map.class, String.class);
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("微信刷新用户token异常");
|
|
|
|
- throw new BaseException("微信刷新用户token异常");
|
|
|
|
- }
|
|
|
|
- return resultMap;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * web用户token校验是否有效
|
|
|
|
- *
|
|
|
|
- * @param openid : 用户在微信应用的唯一id
|
|
|
|
- * @param accessToken : 密钥
|
|
|
|
- * @return : 返回token是否有效, true : 有效, false : 无效
|
|
|
|
- */
|
|
|
|
- private Boolean tokenCheckApi(String openid, String accessToken) {
|
|
|
|
- Map<String, String> paramMap = new HashMap<>(2);
|
|
|
|
- paramMap.put("accessToken", accessToken);
|
|
|
|
- paramMap.put("openid", openid);
|
|
|
|
- //拼接url请求参数
|
|
|
|
- Map<String, String> resultMap = new HashMap<>();
|
|
|
|
- try {
|
|
|
|
- String uri = URIUtil.fillUrlParams(ApiUrlConstant.VX_WEB_TOKEN_CHECK_URL, paramMap, Boolean.TRUE);
|
|
|
|
- String result = HttpUtil.get(uri);
|
|
|
|
- if (Strings.isNotBlank(result)) {
|
|
|
|
- resultMap = JsonUtil.toMap(result, Map.class, String.class);
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("微信刷新用户token异常");
|
|
|
|
- throw new BaseException("微信刷新用户token异常");
|
|
|
|
- }
|
|
|
|
- return Objects.equals(resultMap.get("errcode"), "0");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * web获取用户信息
|
|
|
|
- * <p>
|
|
|
|
- * 成功示例 :
|
|
|
|
- * {
|
|
|
|
- * "openid":"OPENID",
|
|
|
|
- * "nickname":"NICKNAME",
|
|
|
|
- * "sex":1,
|
|
|
|
- * "province":"PROVINCE",
|
|
|
|
- * "city":"CITY",
|
|
|
|
- * "country":"COUNTRY",
|
|
|
|
- * "headimgurl": "headimgurl",
|
|
|
|
- * "privilege":["PRIVILEGE1","PRIVILEGE2"],
|
|
|
|
- * "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
|
|
|
- * }
|
|
|
|
- * <p>
|
|
|
|
- * 错误返回样例:
|
|
|
|
- * {
|
|
|
|
- * "errcode":40003,"errmsg":"invalid openid"
|
|
|
|
- * }
|
|
|
|
- *
|
|
|
|
- * @param openid : 用户在微信应用的唯一id
|
|
|
|
- * @param accessToken : 密钥
|
|
|
|
- * @return : 返回token是否有效, true : 有效, false : 无效
|
|
|
|
- */
|
|
|
|
- private Map<String, String> getUserInfoApi(String accessToken, String openid) {
|
|
|
|
- Map<String, String> paramMap = new HashMap<>(3);
|
|
|
|
- paramMap.put("accessToken", accessToken);
|
|
|
|
- paramMap.put("openid", openid);
|
|
|
|
- paramMap.put("lang", "zh_CN");
|
|
|
|
- //拼接url请求参数
|
|
|
|
- Map<String, String> resultMap = new HashMap<>();
|
|
|
|
- try {
|
|
|
|
- String uri = URIUtil.fillUrlParams(ApiUrlConstant.VX_WEB_USER_INFO_URL, paramMap, Boolean.TRUE);
|
|
|
|
- String result = HttpUtil.get(uri);
|
|
|
|
- if (Strings.isNotBlank(result)) {
|
|
|
|
- resultMap = JsonUtil.toMap(result, Map.class, String.class);
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- log.error("web获取用户信息异常");
|
|
|
|
- throw new BaseException("web获取用户信息异常");
|
|
|
|
- }
|
|
|
|
- return resultMap;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|