123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- package com.kmall.admin.haikong.client;
- import cn.hutool.core.map.MapUtil;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.kmall.admin.haikong.config.HaiKongProperties;
- import com.kmall.admin.haikong.constant.Constants;
- import com.kmall.admin.haikong.dto.AccessTokenDTO;
- import com.kmall.admin.haikong.dto.MemberInfoDTO;
- import com.kmall.admin.haikong.task.MemberSysAccessTokenRefreshTask;
- import com.kmall.admin.haikong.utils.*;
- import com.kmall.admin.haikong.constant.HaiKongMemberSystemUrlEnum;
- import com.kmall.admin.utils.jackson.JacksonUtil;
- import com.kmall.manager.manager.redis.JedisUtil;
- import okhttp3.MediaType;
- import okhttp3.Request;
- import okhttp3.RequestBody;
- import org.apache.http.HttpEntity;
- import org.apache.http.entity.ContentType;
- import org.apache.http.entity.StringEntity;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import org.springframework.util.StringUtils;
- import java.math.BigDecimal;
- import java.util.Map;
- /**
- *
- * @author lhm
- * @createDate 2021-10-27
- */
- @Component
- public class HaiKongMemberTemplate {
- private static final Logger log = LoggerFactory.getLogger(HaiKongMemberTemplate.class);
- @Autowired
- private HaiKongProperties haiKongProperties;
- @Autowired
- private MemberSysAccessTokenRefreshTask memberSysAccessTokenRefreshTask;
- public void setHaiKongProperties(HaiKongProperties haiKongProperties) {
- this.haiKongProperties = haiKongProperties;
- }
- private RequestBody requestBody(String body) {
- return RequestBody.create(MediaType.parse(org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE), body);
- }
- private String getCacheAccessToken() throws Exception {
- return memberSysAccessTokenRefreshTask.getAccessToken();
- }
- /**
- * 拼接通用查询参数
- * @param url 接口地址
- * @param accessToken 凭证
- * @return 拼接后的url
- */
- private String appendQueryParam(String url, String accessToken) {
- return url + "?access_token=" + accessToken +
- "×tamp=" + System.currentTimeMillis();
- }
- private String appendSign(String url, String sign) {
- return url + "&sign=" + sign;
- }
- private Map<String, String> formatUrl(String url) {
- Map<String, String> map = MapUtil.newHashMap();
- if (StringUtils.isEmpty(url)) {
- return map;
- }
- int i = url.lastIndexOf("?");
- String paramStr = url.substring(i+1);
- String[] strings = paramStr.split("&");
- for (String string : strings) {
- int j = string.indexOf("=");
- String key = string.substring(0, j);
- if (!"sign".equalsIgnoreCase(key)) {
- String value = string.substring(j + 1);
- map.put(key, value);
- }
- }
- return map;
- }
- private String getSignUrl(String url, String body) throws Exception {
- return appendSign(url, MemberSysSignUtils.encryptParam(formatUrl(url), body, haiKongProperties.getMemberAppSecret()));
- }
- /**
- * 获取accessToken
- * @return accessToken
- */
- public String getAccessToken() throws Exception {
- log.info("请求获取accessToken接口......");
- String url = haiKongProperties.getMemberUrl() + HaiKongMemberSystemUrlEnum.QUERY_ACCESS_TOKEN.getUrl() + "?app_id=" + haiKongProperties.getMemberAppId() + "×tamp=" + System.currentTimeMillis();
- url = getSignUrl(url, "");
- Request request = new Request.Builder()
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求获取accessToken接口成功......");
- return response;
- }
- /**
- * 刷新accessToken
- * @param refreshToken 刷新token
- * @return accessToken
- */
- public String refreshAccessToken(String refreshToken) throws Exception {
- log.info("请求刷新accessToken接口......");
- String url = haiKongProperties.getMemberUrl() + HaiKongMemberSystemUrlEnum.REFRESH_ACCESS_TOKEN.getUrl() + "?refresh_token=" + refreshToken + "×tamp=" + System.currentTimeMillis();
- url = getSignUrl(url, "");
- Request request = new Request.Builder()
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求刷新accessToken接口成功......");
- return response;
- }
- /**
- * 根据手机号获取会员信息
- * 可根据会员码或手机号或会员的open_id来获取会员信息
- * @param body 请求体
- * @return 会员信息
- */
- public String getMemberInfoByPhone(String body) throws Exception {
- log.info("请求根据手机号获取会员信息接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_PHONE.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- Request request = new Request.Builder()
- .post(requestBody(body))
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求根据手机号获取会员信息接口成功......");
- return response;
- }
- /**
- * 根据会员码获取会员信息
- * 可根据会员码或手机号或会员的open_id来获取会员信息
- * @param body 请求体
- * @return 会员信息
- */
- public String getMemberInfoByCode(String body) throws Exception {
- log.info("请求根据会员码获取会员信息接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_CODE.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- Request request = new Request.Builder()
- .post(requestBody(body))
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求根据会员码获取会员信息接口成功......");
- return response;
- }
- /**
- * 获取会员优惠券详细信息
- * TODO 有问题,待询问
- * @param body 请求体
- * @return 优惠券信息
- */
- public String getMemberCouponInfo(String body) throws Exception {
- log.info("请求获取会员优惠券详细信息接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_COUPON.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- HttpGetWithEntity httpGet = new HttpGetWithEntity(url);
- HttpEntity httpEntity = new StringEntity(body, ContentType.APPLICATION_JSON);
- httpGet.setEntity(httpEntity);
- String response = ApacheHttpUtils.retry(httpGet, haiKongProperties.getRetry());
- log.info("请求获取会员优惠券详细信息接口成功......");
- return response;
- }
- /**
- * 积分变动接口
- * @param body 请求体
- * @return 响应数据
- */
- public String changeMemberScore(String body) throws Exception {
- log.info("请求会员积分变动接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.CHANGE_MEMBER_SCORE.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- Request request = new Request.Builder()
- .post(requestBody(body))
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求会员积分变动接口成功......");
- return response;
- }
- /**
- * 消费订单同步会员系统
- * @param body 请求体
- * @return 结果
- */
- public String memberOrderSync(String body) throws Exception {
- log.info("请求同步会员订单消费信息接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.MEMBER_ORDER_SYNC.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- Request request = new Request.Builder()
- .post(requestBody(body))
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求同步会员订单消费信息接口成功......");
- return response;
- }
- /**
- * 会员积分回退接口
- * @param body 请求体
- * @return 结果
- */
- public String rollbackMemberScore(String body) throws Exception {
- log.info("请求会员积分回退接口......");
- String url = haiKongProperties.getMemberUrl() + appendQueryParam(HaiKongMemberSystemUrlEnum.ROLLBACK_MEMBER_SCORE.getUrl(), getCacheAccessToken());
- url = getSignUrl(url, body);
- Request request = new Request.Builder()
- .post(requestBody(body))
- .url(url)
- .build();
- String response = OkHttpUtils.retry(request, haiKongProperties.getRetry());
- log.info("请求会员积分回退接口......");
- return response;
- }
- public static void main(String[] args) throws Exception {
- HaiKongMemberTemplate haiKongMemberTemplate = new HaiKongMemberTemplate();
- HaiKongProperties haiKongProperties = new HaiKongProperties();
- haiKongProperties.setMemberUrl("https://test-ump.greedc.com");
- haiKongProperties.setMemberAppId("mianshuitestzhanxiao");
- haiKongProperties.setMemberAppSecret("mianshuitestzhanxiao1029");
- haiKongProperties.setRetry(3);
- haiKongMemberTemplate.setHaiKongProperties(haiKongProperties);
- // String accessToken = haiKongMemberTemplate.getAccessToken();
- // System.out.println(accessToken);
- String accessToken = "at9528E3271080F8A3C5AE9FD9C8EBC9D9";
- String refreshToken = "rt6D6F3077B2CDFA31BB294CF0662194F3";
- String body = "{\"phone\": \"13726271499\"}";
- // String refreshAccessToken = haiKongMemberTemplate.refreshAccessToken(refreshToken);
- // System.out.println(refreshAccessToken);
- log.info("请求获取会员优惠券详细信息接口......");
- String url = haiKongProperties.getMemberUrl() + haiKongMemberTemplate.appendQueryParam(HaiKongMemberSystemUrlEnum.QUERY_MEMBER_INFO_BY_PHONE.getUrl(), accessToken);
- url = haiKongMemberTemplate.getSignUrl(url, body);
- Request build = new Request.Builder().url(url).post(haiKongMemberTemplate.requestBody(body)).build();
- String retry = OkHttpUtils.retry(build, 3);
- System.out.println(retry);
- Response<MemberInfoDTO> response = JacksonUtil.fromListJson(retry, new TypeReference<Response<MemberInfoDTO>>() {
- });
- System.out.println("会员积分========>" + response.getData().getScore() + "会员码========>" + response.getData().getOpenId());
- // HttpGetWithEntity httpGet = new HttpGetWithEntity(url);
- // HttpEntity httpEntity = new StringEntity(body, ContentType.APPLICATION_JSON);
- // httpGet.setEntity(httpEntity);
- //
- // String response = ApacheHttpUtils.retry(httpGet, haiKongProperties.getRetry());
- // System.out.println(response);
- // log.info("请求获取会员优惠券详细信息接口成功......");
- }
- }
|