Commit f57681b8 authored by 曾水平's avatar 曾水平

通过用户pin加入购物车;接口优化

parent 41b418cd
...@@ -14,6 +14,9 @@ import cn.com.duiba.jdactivity.developer.jd.constant.JdTokenSourceEnum; ...@@ -14,6 +14,9 @@ import cn.com.duiba.jdactivity.developer.jd.constant.JdTokenSourceEnum;
import cn.com.duiba.jdactivity.developer.jd.utils.AccessTokenUtils; import cn.com.duiba.jdactivity.developer.jd.utils.AccessTokenUtils;
import cn.com.duiba.jdactivity.developer.jd.utils.JdApiUtil; import cn.com.duiba.jdactivity.developer.jd.utils.JdApiUtil;
import cn.com.duiba.jdactivity.dto.AutologinParam; import cn.com.duiba.jdactivity.dto.AutologinParam;
import cn.com.duiba.jdactivity.dto.DuibaAddCartParam;
import cn.com.duiba.jdactivity.dto.DuibaSendCouponParam;
import cn.com.duiba.jdactivity.dto.DuibaUserParam;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto; import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import cn.com.duiba.jdactivity.exception.BizException; import cn.com.duiba.jdactivity.exception.BizException;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
...@@ -240,6 +243,19 @@ public class Open2DuibaController { ...@@ -240,6 +243,19 @@ public class Open2DuibaController {
} }
} }
public static String convert2Pin(JdAppEnum appByAppKey, String accessToken, String uid) throws BizException {
try {
String pin = AESCS7Util.AES256Decrypt(uid, ENCRYPT_KEY);
LOGGER.info("uid解密,pin={},uid={}", pin, uid);
return pin;
} catch (Exception e) {
LOGGER.error("uid解密失败,uid={}", uid, e);
throw new BizException("uid解密失败");
}
}
/** /**
* 关注店铺 * 关注店铺
*/ */
...@@ -263,6 +279,17 @@ public class Open2DuibaController { ...@@ -263,6 +279,17 @@ public class Open2DuibaController {
} }
} }
public static String convert2Uid(JdAppEnum appByAppKey, String accessToken, String pin) throws BizException {
try {
String uid = AESCS7Util.AESEncrypt(pin, ENCRYPT_KEY);
LOGGER.info("pin加密,pin={},uid={}", pin, uid);
return uid;
} catch (Exception e) {
LOGGER.error("pin加密失败,uid={}", pin, e);
throw new BizException("pin加密失败");
}
}
/** /**
* 是否是会员 * 是否是会员
*/ */
...@@ -288,6 +315,30 @@ public class Open2DuibaController { ...@@ -288,6 +315,30 @@ public class Open2DuibaController {
} }
} }
/**
* 是否关注店铺
*/
@PostMapping("/isFollowShop/v2")
public Result<Boolean> isFollowShopV2(@RequestBody DuibaUserParam duibaUserParam) {
try {
String uid = duibaUserParam.getUid();
uid = uid.replaceAll(" ", "+");
signVerify("是否关注店铺");
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessTokenWithCache(duibaUserParam);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
String pin = convert2Pin(appEnum, accessToken.getAccessToken(), uid);
Result<Boolean> follow = jdApiUtil.isFollowByPinAndVid(appEnum, pin, duibaUserParam.getShopId());
LOGGER.info("是否关注店铺,follow={},uid={},pin={}", JSON.toJSONString(follow), uid, pin);
return follow;
} catch (BizException e) {
return ResultBuilder.fail(e.getMessage());
} catch (Exception e) {
LOGGER.error("isFollowShop 异常", e);
return ResultBuilder.fail("发生异常");
}
}
/** /**
* 发放优惠券 * 发放优惠券
...@@ -315,30 +366,111 @@ public class Open2DuibaController { ...@@ -315,30 +366,111 @@ public class Open2DuibaController {
LOGGER.error("发券异常", e); LOGGER.error("发券异常", e);
return ResultBuilder.fail("发券失败"); return ResultBuilder.fail("发券失败");
} }
} }
/**
* 关注店铺
*/
@PostMapping("/followShop/v2")
public Result<Boolean> followShopV2(@RequestBody DuibaUserParam duibaUserParam) {
try {
String uid = duibaUserParam.getUid();
uid = uid.replaceAll(" ", "+");
signVerify("关注店铺");
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessTokenWithCache(duibaUserParam);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
String pin = convert2Pin(appEnum, accessToken.getAccessToken(), uid);
Result<Boolean> follow = jdApiUtil.followByPinAndVid(appEnum, pin, duibaUserParam.getShopId(), accessToken.getAccessToken());
LOGGER.info("关注店铺,follow={},uid={},pin={}", JSON.toJSONString(follow), uid, pin);
return follow;
} catch (BizException e) {
return ResultBuilder.fail(e.getMessage());
} catch (Exception e) {
LOGGER.error("isMember 异常", e);
return ResultBuilder.fail("发生异常");
}
}
public String convert2Pin(JdAppEnum appByAppKey, String accessToken, String uid) throws BizException { /**
* 是否是会员
*/
@PostMapping("/isMember/v2")
public Result<Boolean> isMemberV2(@RequestBody DuibaUserParam duibaUserParam) {
try { try {
String pin = AESCS7Util.AES256Decrypt(uid, ENCRYPT_KEY); String uid = duibaUserParam.getUid();
LOGGER.info("uid解密,pin={},uid={}", pin, uid); uid = uid.replaceAll(" ", "+");
return pin; signVerify("是否是会员");
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessTokenWithCache(duibaUserParam);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
String pin = convert2Pin(appEnum, accessToken.getAccessToken(), uid);
Result<EssentialCustomerInfo> result = jdApiUtil.getCustomer(appEnum, accessToken.getAccessToken(), pin);
boolean isMember = result.getSuccess() && result.getData() != null &&
(result.getData().getLevelAtShop() != null || result.getData().getCustomerPin() != null);
LOGGER.info("是否是会员,isMember={},uid={},pin={}", isMember, uid, pin);
return ResultBuilder.success(isMember);
} catch (BizException e) {
return ResultBuilder.fail(e.getMessage());
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("uid解密失败,uid={}", uid, e); LOGGER.error("isMember 异常", e);
throw new BizException("uid解密失败"); return ResultBuilder.fail("发生异常");
} }
}
/**
* 发放优惠券
*/
@PostMapping("/sendCouponId/v2")
public Result<Boolean> sendCouponId(@RequestBody DuibaSendCouponParam param) {
try {
String uid = param.getUid();
Long couponId = param.getCouponId();
String uuid = param.getUuid();
uid = uid.replaceAll(" ", "+");
signVerify("发放优惠券");
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessTokenWithCache(param);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
String pin = convert2Pin(appEnum, accessToken.getAccessToken(), uid);
Result<Boolean> sendCouponResult = jdApiUtil.pushCoupon(appEnum, accessToken.getAccessToken(), couponId, pin, uuid);
LOGGER.info("发放优惠券,sendCouponResult={},uid={},pin={},uuid={}", JSON.toJSONString(sendCouponResult), uid, pin, uuid);
return sendCouponResult;
} catch (BizException e) {
return ResultBuilder.fail(e.getMessage());
} catch (Exception e) {
LOGGER.error("发券异常", e);
return ResultBuilder.fail("发券失败");
}
} }
public String convert2Uid(JdAppEnum appByAppKey, String accessToken, String pin) throws BizException { /**
* 通过用户pin加入购物车
*/
@PostMapping("/addCartItemByPin")
public Result<Boolean> addCartItemByPin(@RequestBody DuibaAddCartParam param) {
try { try {
String uid = AESCS7Util.AESEncrypt(pin, ENCRYPT_KEY); String uid = param.getUid();
LOGGER.info("pin加密,pin={},uid={}", pin, uid); Integer num = param.getNum();
return uid; String itemId = param.getItemId();
uid = uid.replaceAll(" ", "+");
signVerify("通过用户pin加入购物车");
TbShopAccessTokenDto accessToken = accessTokenUtils.getAccessTokenWithCache(param);
JdAppEnum appEnum = JdAppEnum.getAppByAppKey(accessToken.getAppKey());
String pin = convert2Pin(appEnum, accessToken.getAccessToken(), uid);
Result<Boolean> sendCouponResult = jdApiUtil.addCartItemByPin(appEnum, pin, itemId, num, accessToken.getAccessToken());
LOGGER.info("通过用户pin加入购物车,sendCouponResult={}", JSON.toJSONString(sendCouponResult));
return sendCouponResult;
} catch (BizException e) {
return ResultBuilder.fail(e.getMessage());
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("pin加密失败,uid={}", pin, e); LOGGER.error("发券异常", e);
throw new BizException("pin加密失败"); return ResultBuilder.fail("发券失败");
} }
} }
} }
...@@ -5,6 +5,7 @@ import cn.com.duiba.jdactivity.common.utils.UrlUtils; ...@@ -5,6 +5,7 @@ import cn.com.duiba.jdactivity.common.utils.UrlUtils;
import cn.com.duiba.jdactivity.developer.jd.constant.JdAppEnum; import cn.com.duiba.jdactivity.developer.jd.constant.JdAppEnum;
import cn.com.duiba.jdactivity.developer.jd.constant.JdServerUrlEnum; import cn.com.duiba.jdactivity.developer.jd.constant.JdServerUrlEnum;
import cn.com.duiba.jdactivity.developer.jd.domain.AccessTokenResponse; import cn.com.duiba.jdactivity.developer.jd.domain.AccessTokenResponse;
import cn.com.duiba.jdactivity.dto.ShopParam;
import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto; import cn.com.duiba.jdactivity.dto.TbShopAccessTokenDto;
import cn.com.duiba.jdactivity.exception.BizException; import cn.com.duiba.jdactivity.exception.BizException;
import cn.com.duiba.jdactivity.service.TbShopAccessTokenService; import cn.com.duiba.jdactivity.service.TbShopAccessTokenService;
...@@ -154,6 +155,10 @@ public class AccessTokenUtils { ...@@ -154,6 +155,10 @@ public class AccessTokenUtils {
return tbShopAccessTokenDto; return tbShopAccessTokenDto;
} }
public TbShopAccessTokenDto getAccessTokenWithCache(ShopParam param) throws BizException {
return getAccessTokenWithCache(param.getVenderId(), param.getShopId());
}
private TbShopAccessTokenDto getAccessTokenWithoutCache(Long venderId, Long shopId) throws BizException { private TbShopAccessTokenDto getAccessTokenWithoutCache(Long venderId, Long shopId) throws BizException {
if (venderId == null || shopId == null || venderId == 0L || shopId == 0L) { if (venderId == null || shopId == null || venderId == 0L || shopId == 0L) {
throw new BizException("店铺参数不存在"); throw new BizException("店铺参数不存在");
......
...@@ -17,6 +17,7 @@ import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVe ...@@ -17,6 +17,7 @@ import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVe
import com.jd.open.api.sdk.domain.user.CrmCustomerService.response.getMemberInVender.CustomerInfoEs; 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.domain.user.UserRelatedRpcService.response.getUserInfoByOpenId.OAuthUserInfo;
import com.jd.open.api.sdk.request.crm.PopCrmCustomerGetCustomerRequest; import com.jd.open.api.sdk.request.crm.PopCrmCustomerGetCustomerRequest;
import com.jd.open.api.sdk.request.gongzhonghao.JzoneAddCartItemByPinRequest;
import com.jd.open.api.sdk.request.market.GetPurchaseInfoRequest; import com.jd.open.api.sdk.request.market.GetPurchaseInfoRequest;
import com.jd.open.api.sdk.request.openid.JosTokenSourceToOpenIdRequest; import com.jd.open.api.sdk.request.openid.JosTokenSourceToOpenIdRequest;
import com.jd.open.api.sdk.request.promotion.SellerCouponWriteCreateRequest; import com.jd.open.api.sdk.request.promotion.SellerCouponWriteCreateRequest;
...@@ -30,6 +31,7 @@ import com.jd.open.api.sdk.request.user.PopJmCenterUserGetEncryptPinNewRequest; ...@@ -30,6 +31,7 @@ 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.PopJmCenterUserGetOpenIdRequest;
import com.jd.open.api.sdk.request.user.UserGetUserInfoByOpenIdRequest; import com.jd.open.api.sdk.request.user.UserGetUserInfoByOpenIdRequest;
import com.jd.open.api.sdk.response.crm.PopCrmCustomerGetCustomerResponse; import com.jd.open.api.sdk.response.crm.PopCrmCustomerGetCustomerResponse;
import com.jd.open.api.sdk.response.gongzhonghao.JzoneAddCartItemByPinResponse;
import com.jd.open.api.sdk.response.market.GetPurchaseInfoResponse; import com.jd.open.api.sdk.response.market.GetPurchaseInfoResponse;
import com.jd.open.api.sdk.response.openid.JosTokenSourceToOpenIdResponse; import com.jd.open.api.sdk.response.openid.JosTokenSourceToOpenIdResponse;
import com.jd.open.api.sdk.response.promotion.SellerCouponWriteCreateResponse; import com.jd.open.api.sdk.response.promotion.SellerCouponWriteCreateResponse;
...@@ -284,6 +286,8 @@ public class JdApiUtil { ...@@ -284,6 +286,8 @@ public class JdApiUtil {
// 已关注情况,会返回false,要手动修复为true // 已关注情况,会返回false,要手动修复为true
if (Objects.equals(code, "F0402") || Objects.equals(msg, "已关注")) { if (Objects.equals(code, "F0402") || Objects.equals(msg, "已关注")) {
return ResultBuilder.success(Boolean.TRUE); return ResultBuilder.success(Boolean.TRUE);
} else if (Objects.equals(code, "F0410")) {
return ResultBuilder.fail("用户关注店铺数量已达上限500");
} else { } else {
return ResultBuilder.fail(code, msg); return ResultBuilder.fail(code, msg);
} }
...@@ -298,6 +302,30 @@ public class JdApiUtil { ...@@ -298,6 +302,30 @@ public class JdApiUtil {
} }
} }
/**
* 通过用户pin加入购物车
*/
public Result<Boolean> addCartItemByPin(JdAppEnum jdAppEnum, String pin, String itemId, Integer num, String accessToken) {
try {
JdClient client = getJdClient(jdAppEnum, accessToken);
JzoneAddCartItemByPinRequest request = new JzoneAddCartItemByPinRequest();
request.setPin(pin);
request.setItemId(itemId);
request.setNum(num);
JzoneAddCartItemByPinResponse response = client.execute(request);
LOGGER.info("通过用户pin加入购物车,pin={},itemId={},num={},response={}",
pin, itemId, num, JSON.toJSONString(response));
return Optional.ofNullable(response)
.map(JzoneAddCartItemByPinResponse::getReturnType)
.map(resultData -> ResultBuilder.success(Objects.equals("0", resultData.getCode())))
.orElse(ResultBuilder.fail(JSON.toJSONString(response)));
} catch (Exception e) {
LOGGER.warn("followByPinAndVid,exception", e);
return ResultBuilder.fail("发生异常");
}
}
/** /**
* 获取当前服务当前用户的有效订购记录 * 获取当前服务当前用户的有效订购记录
*/ */
......
package cn.com.duiba.jdactivity.dto;
/**
* @author zsp (zengshuiping@duiba.com.cn)
* @date 2021/6/22 19:28
*/
public class DuibaAddCartParam extends DuibaUserParam {
private static final long serialVersionUID = -4259477583618473087L;
private String itemId;
private Integer num;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
package cn.com.duiba.jdactivity.dto;
/**
* @author zsp (zengshuiping@duiba.com.cn)
* @date 2021/6/22 15:48
*/
public class DuibaSendCouponParam extends DuibaUserParam {
private static final long serialVersionUID = -8717582609109656537L;
/**
* 京东优惠券Id
*/
private Long couponId;
private String uuid;
public Long getCouponId() {
return couponId;
}
public void setCouponId(Long couponId) {
this.couponId = couponId;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
}
package cn.com.duiba.jdactivity.dto;
/**
* 来自兑吧的用户参数
*
* @author zsp (zengshuiping@duiba.com.cn)
* @date 2021/6/3 17:37
*/
public class DuibaUserParam extends ShopParam {
private static final long serialVersionUID = 6330808281456786011L;
private String uid;
// 签名用
private Long timestamp;
private String appKey;
private String sign;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}
package cn.com.duiba.jdactivity.dto;
import java.io.Serializable;
/**
* 店铺参数
*
* @author zsp (zengshuiping@duiba.com.cn)
* @date 2021/6/3 17:36
*/
public class ShopParam implements Serializable {
private static final long serialVersionUID = 7718649773334863768L;
private Long shopId;
private Long venderId;
public Long getShopId() {
return shopId;
}
public void setShopId(Long shopId) {
this.shopId = shopId;
}
public Long getVenderId() {
return venderId;
}
public void setVenderId(Long venderId) {
this.venderId = venderId;
}
}
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