Commit 19bf8f29 authored by 曾水平's avatar 曾水平

优化

parent c664cd5f
......@@ -6,7 +6,7 @@ import cn.com.duiba.jdactivity.developer.jd.JdAppEnum;
import cn.com.duiba.jdactivity.developer.jd.domain.AccessTokenResponse;
import cn.com.duiba.jdactivity.developer.jd.domain.JosParameters;
import cn.com.duiba.jdactivity.developer.jd.utils.AccessTokenUtils;
import cn.com.duiba.jdactivity.developer.jd.utils.ApiUtil;
import cn.com.duiba.jdactivity.developer.jd.utils.JdApiUtil;
import cn.com.duiba.jdactivity.developer.jd.utils.LoginUtils;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import com.alibaba.fastjson.JSONObject;
......@@ -35,7 +35,7 @@ public class AppController {
private AccessTokenUtils accessTokenUtils;
@Resource
private ApiUtil apiUtil;
private JdApiUtil jdApiUtil;
/**
* 应用插件启动唤起页
......@@ -62,8 +62,8 @@ public class AppController {
}
AccessTokenResponse accessTokenByCode = accessTokenUtils.getAccessTokenByCode(jdAppEnum, code);
if (!accessTokenByCode.isOk()) {
Result<ShopJosResult> shopJosResultResult = apiUtil.venderShopQuery(jdAppEnum, accessTokenByCode.getAccess_token());
if (accessTokenByCode != null && !accessTokenByCode.isOk()) {
Result<ShopJosResult> shopJosResultResult = jdApiUtil.venderShopQuery(jdAppEnum, accessTokenByCode.getAccess_token());
if (shopJosResultResult.getSuccess()) {
ShopJosResult data = shopJosResultResult.getData();
Long id = accessTokenUtils.saveAccessToken(jdAppEnum, accessTokenByCode, data);
......@@ -79,17 +79,14 @@ public class AppController {
@RequestMapping("/getShopInfoVO")
public Result<JSONObject> getShopInfoVO(Long venderId, Long shopId) {
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessToken(venderId, shopId);
if (accessToken == null) {
return ResultBuilder.fail("未授权");
}
JdAppEnum jdAppEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
Result<ShopJosResult> shopJosResultResult = apiUtil.venderShopQuery(jdAppEnum, accessToken.getAccessToken());
Result<ShopJosResult> shopJosResultResult = jdApiUtil.venderShopQuery(jdAppEnum, accessToken.getAccessToken());
JSONObject jsonObject = new JSONObject();
jsonObject.put("accessToken", accessToken);
jsonObject.put("shop", shopJosResultResult.getData());
return ResultBuilder.success(jsonObject);
}
@RequestMapping("/index")
public String index() {
return null;
}
}
......@@ -3,7 +3,7 @@ package cn.com.duiba.jdactivity.controller;
import cn.com.duiba.jdactivity.common.vo.Result;
import cn.com.duiba.jdactivity.developer.jd.JdAppEnum;
import cn.com.duiba.jdactivity.developer.jd.utils.AccessTokenUtils;
import cn.com.duiba.jdactivity.developer.jd.utils.ApiUtil;
import cn.com.duiba.jdactivity.developer.jd.utils.JdApiUtil;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import cn.com.duiba.jdactivity.interceptor.UnloginAccess;
import org.apache.commons.lang3.StringUtils;
......@@ -28,7 +28,7 @@ public class LoginController {
public static final String REDIRECT = "redirect";
@Resource
private ApiUtil apiUtil;
private JdApiUtil jdApiUtil;
@Resource
private AccessTokenUtils accessTokenUtils;
......@@ -48,8 +48,8 @@ public class LoginController {
JdAppEnum appByAppKey = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
Result<String> pinByToken = apiUtil.getPinByToken(appByAppKey, accessToken.getAccessToken(), source, token);
Result<String> pinByToken = jdApiUtil.getPinByToken(appByAppKey, accessToken.getAccessToken(), source, token);
if (StringUtils.isBlank(token)) {
return "不能为空";
}
......
package cn.com.duiba.jdactivity.controller;
import cn.com.duiba.jdactivity.common.vo.Result;
import cn.com.duiba.jdactivity.common.vo.ResultBuilder;
import cn.com.duiba.jdactivity.developer.jd.JdAppEnum;
import cn.com.duiba.jdactivity.developer.jd.utils.AccessTokenUtils;
import cn.com.duiba.jdactivity.developer.jd.utils.JdApiUtil;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import com.alibaba.fastjson.JSON;
import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVender.CustomerInfoEs;
import com.jd.open.api.sdk.domain.user.UserRelatedRpcService.response.getUserInfoByOpenId.OAuthUserInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 开放给星速台的接口
* // TODO 每个接口都要有签名校验
*
* @author zsp (zengshuiping@duiba.com.cn)
* @date 2021/5/17 13:26
*/
@RestController
@RequestMapping("/open2Duiba")
public class Open2DuibaController {
public static final Logger LOGGER = LoggerFactory.getLogger(Open2DuibaController.class);
@Resource
private JdApiUtil jdApiUtil;
@Resource
private AccessTokenUtils accessTokenUtils;
/**
* 微信、京东端 用户登陆后跳转到星速台
*
* @param venderId
* @param shopId
* @param token
* @param source
* @param redirectUrl
* @return
*/
Result<Boolean> isFollowShop() {
@GetMapping("/autologin")
void autologin(
Long venderId,
Long shopId,
String token,
String source,
@RequestParam(required = false) String redirectUrl) {
LOGGER.info("autologin,venderId={},shopId={},token={},source={}", venderId, shopId, token, source);
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessToken(venderId, shopId);
LOGGER.info("获取accessToken,结果={}", JSON.toJSONString(accessToken));
JdAppEnum appByAppKey = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
Result<String> pinByToken = jdApiUtil.getPinByToken(appByAppKey, accessToken.getAccessToken(), source, token);
LOGGER.info("获取pin,结果={}", JSON.toJSONString(pinByToken));
Result<String> openIdByToken = jdApiUtil.getOpenIdByToken(appByAppKey, source, token);
LOGGER.info("获取openId,结果={}", JSON.toJSONString(openIdByToken));
Result<OAuthUserInfo> userInfoByOpenId = jdApiUtil.getUserInfoByOpenId(appByAppKey, accessToken.getAccessToken(), openIdByToken.getData());
LOGGER.info("获取userInfo,结果={}", JSON.toJSONString(userInfoByOpenId));
String uid = convert2Uid(pinByToken.getData());
String nickName = userInfoByOpenId.getData().getNickName();
String avator = userInfoByOpenId.getData().getImageUrl();
autologin(uid, nickName, avator, redirectUrl);
}
private void autologin(String uid, String nickName, String avator, String redirectUrl) {
// TODO 兑吧免登录
}
/**
* 是否关注店铺
*/
@GetMapping("/isFollowShop")
Result<Boolean> isFollowShop(String uid, Long shopId, Long venderId) {
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessToken(venderId, shopId);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
return jdApiUtil.isFollowByPinAndVid(appEnum, convert2Pin(uid), shopId);
}
/**
* 关注店铺
*/
@GetMapping("/followShop")
Result<Boolean> followShop(String uid, Long shopId, Long venderId) {
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessToken(venderId, shopId);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
return jdApiUtil.followByPinAndVid(appEnum, convert2Pin(uid), shopId, accessToken.getAccessToken());
}
/**
* 是否是会员
*/
@GetMapping("/isMember")
Result<Boolean> isMember(String uid, Long shopId, Long venderId) {
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessToken(venderId, shopId);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
Result<CustomerInfoEs> memberInVender = jdApiUtil.getMemberInVender(appEnum, convert2Pin(uid), accessToken.getAccessToken());
return ResultBuilder.success(memberInVender.getSuccess() && memberInVender.getData() != null);
}
// TODO 发券
public String convert2Pin(String uid) {
// TODO 解密方式
return uid;
}
return null;
public String convert2Uid(String pin) {
// TODO 加密方式
return pin;
}
}
......@@ -51,4 +51,8 @@ public enum JdAppEnum {
return null;
}
public static JdAppEnum getDefault() {
return JdAppEnum.DUIBA;
}
}
......@@ -63,7 +63,7 @@ public class AccessTokenUtils {
String url = UrlUtils.assembleUrl(urlConstants.getOauthUrl() + ACCESS_TOKEN_SUFFIX, param);
String s = httpClientUtil.sendGet(url);
LOGGER.info("getAccessTokenByCode,code={},s={}", code, s);
LOGGER.info("getAccessTokenByCode,code={},url={},s={}", code, url, s);
if (StringUtils.isNotBlank(s)
&& !StringUtils.equalsIgnoreCase(NULL, s)
......
......@@ -9,11 +9,15 @@ import com.jd.open.api.sdk.DefaultJdClient;
import com.jd.open.api.sdk.JdClient;
import com.jd.open.api.sdk.domain.crm.VenderCustomerClientJsfService.response.getCustomer.EssentialCustomerInfo;
import com.jd.open.api.sdk.domain.seller.ShopSafService.response.query.ShopJosResult;
import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVender.CommonResult;
import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVender.CustomerInfoEs;
import com.jd.open.api.sdk.domain.user.UserRelatedRpcService.response.getUserInfoByOpenId.OAuthUserInfo;
import com.jd.open.api.sdk.request.crm.PopCrmCustomerGetCustomerRequest;
import com.jd.open.api.sdk.request.openid.JosTokenSourceToOpenIdRequest;
import com.jd.open.api.sdk.request.seller.VenderShopQueryRequest;
import com.jd.open.api.sdk.request.user.FollowVenderReadIsFollowByPinAndVidRequest;
import com.jd.open.api.sdk.request.user.FollowVenderWriteFollowByPinAndVidRequest;
import com.jd.open.api.sdk.request.user.PopCrmGetMemberInVenderRequest;
import com.jd.open.api.sdk.request.user.PopJmCenterUserGetEncryptPinNewRequest;
import com.jd.open.api.sdk.request.user.PopJmCenterUserGetOpenIdRequest;
import com.jd.open.api.sdk.request.user.UserGetUserInfoByOpenIdRequest;
......@@ -21,6 +25,8 @@ import com.jd.open.api.sdk.response.crm.PopCrmCustomerGetCustomerResponse;
import com.jd.open.api.sdk.response.openid.JosTokenSourceToOpenIdResponse;
import com.jd.open.api.sdk.response.seller.VenderShopQueryResponse;
import com.jd.open.api.sdk.response.user.FollowVenderReadIsFollowByPinAndVidResponse;
import com.jd.open.api.sdk.response.user.FollowVenderWriteFollowByPinAndVidResponse;
import com.jd.open.api.sdk.response.user.PopCrmGetMemberInVenderResponse;
import com.jd.open.api.sdk.response.user.PopJmCenterUserGetEncryptPinNewResponse;
import com.jd.open.api.sdk.response.user.PopJmCenterUserGetOpenIdResponse;
import com.jd.open.api.sdk.response.user.UserGetUserInfoByOpenIdResponse;
......@@ -37,8 +43,8 @@ import java.util.Optional;
* @date 2021/5/13 15:08
*/
@Component
public class ApiUtil {
public static final Logger LOGGER = LoggerFactory.getLogger(ApiUtil.class);
public class JdApiUtil {
public static final Logger LOGGER = LoggerFactory.getLogger(JdApiUtil.class);
private static final String CODE_SUCCESS = "0";
@Resource
private UrlConstants urlConstants;
......@@ -165,7 +171,7 @@ public class ApiUtil {
/**
* 是否已关注该店铺
*/
Result<Boolean> isFollowByPinAndVid(JdAppEnum jdAppEnum, String pin, Long shopId) {
public Result<Boolean> isFollowByPinAndVid(JdAppEnum jdAppEnum, String pin, Long shopId) {
try {
JdClient client = new DefaultJdClient(urlConstants.getApiServerUrl(), null, jdAppEnum.getAppKey(), jdAppEnum.getAppSecret());
FollowVenderReadIsFollowByPinAndVidRequest request = new FollowVenderReadIsFollowByPinAndVidRequest();
......@@ -187,48 +193,48 @@ public class ApiUtil {
LOGGER.warn("isFollowByPinAndVid,exception", e);
return ResultBuilder.fail("发生异常");
}
}
/**
* 关注该店铺
*/
public Result<Boolean> followByPinAndVid(JdAppEnum jdAppEnum, String pin, Long shopId, String accessToken) {
try {
JdClient client = new DefaultJdClient(urlConstants.getApiServerUrl(), accessToken, jdAppEnum.getAppKey(), jdAppEnum.getAppSecret());
FollowVenderWriteFollowByPinAndVidRequest request = new FollowVenderWriteFollowByPinAndVidRequest();
request.setPin(pin);
request.setShopId(shopId);
request.setOpenIdBuyer(pin);
FollowVenderWriteFollowByPinAndVidResponse response = client.execute(request);
return Optional.ofNullable(response)
.map(FollowVenderWriteFollowByPinAndVidResponse::getFollowbypinandvidResult)
.map(result -> ResultBuilder.success(result.getData()))
.orElse(ResultBuilder.fail(JSON.toJSONString(response)));
} catch (Exception e) {
LOGGER.warn("followByPinAndVid,exception", e);
return ResultBuilder.fail("发生异常");
}
}
public Result<CustomerInfoEs> getMemberInVender(JdAppEnum jdAppEnum, String pin, String accessToken) {
try {
JdClient client = new DefaultJdClient(urlConstants.getApiServerUrl(), accessToken, jdAppEnum.getAppKey(), jdAppEnum.getAppSecret());
PopCrmGetMemberInVenderRequest request = new PopCrmGetMemberInVenderRequest();
request.setCustomerPin(pin);
request.setOpenIdBuyer(pin);
PopCrmGetMemberInVenderResponse response = client.execute(request);
return Optional.ofNullable(response)
.map(PopCrmGetMemberInVenderResponse::getGetmemberinvenderResult)
.map(CommonResult::getCustomerInfoEs)
.map(ResultBuilder::success)
.orElse(ResultBuilder.fail(JSON.toJSONString(response)));
} catch (Exception e) {
LOGGER.warn("getMemberInVender,exception", e);
return ResultBuilder.fail("发生异常");
}
}
// private void test() {
// try {
// String accessToken = "";
// JdClient client = new DefaultJdClient(urlConstants.getApiServerUrl(), accessToken, appKey, appSecret);
// JosTokenSourceToOpenIdRequest request = new JosTokenSourceToOpenIdRequest();
// request.setToken("36A9C36584F3519B8FA4C5072B9211DFD6D8A7B4778C7184EE59A9BC9B582914");
// request.setSource("02");
// request.setAppKey("B0F491866BC8C8BA5954B4DFCCF283CC");
// JosTokenSourceToOpenIdResponse response = client.execute(request);
// System.out.println(JSON.toJSONString(response));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
//
// public static void testDataEncryptOrDecrypt() {
// try {
// /*
// * 请求宙斯网关获取凭证和密钥
// * 1、凭证和密钥缓存本地(用于数据加解密)
// * 2、数据来源于请求宙斯网关 API 敏感字段值
// * 3、数据加解密案例如下
// */
// TDEClient tdeClient = SecretJdClient.
// getInstance(SERVER_URL, accessToken, appKey, appSecret);
// String type = "phone";
// String plaintext = "16612341234";
// // 加密手机号
// String ciphertext = tdeClient.encryptString(plaintext);
// System.out.println(type + "明文:" + plaintext + "—> 密文:" + ciphertext);
// // 判断是否为加密手机号码数据
//
// if (tdeClient.isEncryptData(ciphertext)) {
// // 解密手机号
// plaintext = tdeClient.decryptString(ciphertext);
// System.out.println(type + "密文:" + ciphertext + "—> 明文:" + plaintext);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
......@@ -4,10 +4,12 @@ import cn.com.duiba.jdactivity.dao.TbShopAccessTokenDao;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import cn.com.duiba.jdactivity.entity.TbShopAccessTokenEntity;
import cn.com.duiba.jdactivity.service.TbShopAccessTokenService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
......@@ -23,18 +25,12 @@ public class TbShopAccessTokenServiceImpl implements TbShopAccessTokenService {
private TbShopAccessTokenDao tbShopAccessTokenDao;
private static TbShopAccessTokenDto convert2Dto(TbShopAccessTokenEntity entity) {
if (entity == null) {
return null;
}
TbShopAccessTokenDto tbShopAccessTokenDto = new TbShopAccessTokenDto();
BeanUtils.copyProperties(entity, tbShopAccessTokenDto);
return tbShopAccessTokenDto;
}
private static TbShopAccessTokenEntity convert2Entity(TbShopAccessTokenDto accessTokenDto) {
if (accessTokenDto == null) {
return null;
}
TbShopAccessTokenEntity tokenEntity = new TbShopAccessTokenEntity();
BeanUtils.copyProperties(accessTokenDto, tokenEntity);
return tokenEntity;
......@@ -48,12 +44,19 @@ public class TbShopAccessTokenServiceImpl implements TbShopAccessTokenService {
*/
@Override
public TbShopAccessTokenDto queryById(Long id) {
return convert2Dto(tbShopAccessTokenDao.queryById(id));
TbShopAccessTokenEntity entity = tbShopAccessTokenDao.queryById(id);
if (entity == null) {
return null;
}
return convert2Dto(entity);
}
@Override
public List<TbShopAccessTokenDto> queryByVenderIdShopId(Long venderId, Long shopId) {
List<TbShopAccessTokenEntity> entities = tbShopAccessTokenDao.queryByVenderIdShopId(venderId, shopId);
if (CollectionUtils.isEmpty(entities)) {
return Collections.emptyList();
}
return entities.stream().map(TbShopAccessTokenServiceImpl::convert2Dto).collect(Collectors.toList());
}
......@@ -66,6 +69,9 @@ public class TbShopAccessTokenServiceImpl implements TbShopAccessTokenService {
*/
@Override
public Long insert(TbShopAccessTokenDto tbShopAccessTokenDto) {
if (tbShopAccessTokenDto == null) {
return 0L;
}
TbShopAccessTokenEntity entity = convert2Entity(tbShopAccessTokenDto);
tbShopAccessTokenDao.insertOrUpdate(entity);
return entity.getId();
......@@ -79,6 +85,9 @@ public class TbShopAccessTokenServiceImpl implements TbShopAccessTokenService {
*/
@Override
public int update(TbShopAccessTokenDto tbShopAccessTokenDto) {
if (tbShopAccessTokenDto == null) {
return 0;
}
return tbShopAccessTokenDao.update(convert2Entity(tbShopAccessTokenDto));
}
......
package cn.com.duiba.jdactivity;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
@SpringBootTest
@ActiveProfiles(profiles = "dev")
public class BaseTest {
}
......@@ -25,7 +25,7 @@ class AccessTokenUtilsTest extends BaseTest {
@Test
void getAccessTokenByCode() {
AccessTokenResponse tokenByCode = accessTokenUtils.getAccessTokenByCode(JdAppEnum.DUIBA, "yj6CrO");
AccessTokenResponse tokenByCode = accessTokenUtils.getAccessTokenByCode(JdAppEnum.DUIBA, "SknvJy");
Assert.assertNotNull(tokenByCode);
System.out.println(JSON.toJSONString(tokenByCode));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment