diff --git a/cweb/src/main/java/com/hfkj/controller/TakeOutController.java b/cweb/src/main/java/com/hfkj/controller/TakeOutController.java new file mode 100644 index 0000000..85409ce --- /dev/null +++ b/cweb/src/main/java/com/hfkj/controller/TakeOutController.java @@ -0,0 +1,55 @@ +package com.hfkj.controller; + +import com.alibaba.fastjson.JSONObject; +import com.hfkj.common.security.UserCenter; +import com.hfkj.common.utils.ResponseMsgUtil; +import com.hfkj.model.ResponseData; +import com.hfkj.model.UserSessionObject; +import com.hfkj.service.meituan.MeiTuanService; +import com.hfkj.service.user.BsUserAccountRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping(value="/takeOut") +@Api(value="外卖") +public class TakeOutController { + + private static Logger log = LoggerFactory.getLogger(TakeOutController.class); + + @Autowired + private UserCenter userCenter; + + @RequestMapping(value="/generateLink",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "自助取链接口 ") + public ResponseData generateLink(@RequestParam(value = "actId" , required = false) Long actId, + @RequestParam(value = "linkType" , required = false) Integer linkType + ) { + try { + // 用户session + UserSessionObject session = userCenter.getSessionModel(UserSessionObject.class); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("actId" , actId); + jsonObject.put("sid" , session.getUser().getId()); + jsonObject.put("linkType" , linkType); + + JSONObject object = MeiTuanService.generateLink(jsonObject); + + return ResponseMsgUtil.success(object); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + } +} diff --git a/cweb/src/main/java/com/hfkj/controller/TestController.java b/cweb/src/main/java/com/hfkj/controller/TestController.java index f56aa94..8644eca 100644 --- a/cweb/src/main/java/com/hfkj/controller/TestController.java +++ b/cweb/src/main/java/com/hfkj/controller/TestController.java @@ -8,6 +8,7 @@ import com.hfkj.common.exception.SysCode; import com.hfkj.common.utils.ResponseMsgUtil; import com.hfkj.model.ResponseData; +import com.hfkj.service.meituan.MeiTuanService; import com.hfkj.service.pdd.PddService; import com.hfkj.service.taobao.TaoBaoService; import com.hfkj.service.user.BsUserContributeService; @@ -38,6 +39,11 @@ import java.util.Map; public class TestController { private static Logger log = LoggerFactory.getLogger(TestController.class); + @Resource + private BsUserParentRelService userParentRelService; + + @Resource + private BsUserContributeService userContributeService; @RequestMapping(value="/material",method = RequestMethod.GET) @ResponseBody @@ -82,11 +88,30 @@ public class TestController { return ResponseMsgUtil.exception(e); } } - @Resource - private BsUserParentRelService userParentRelService; - @Resource - private BsUserContributeService userContributeService; + @RequestMapping(value="/generateLink",method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "自助取链接口 ") + public ResponseData generateLink(@RequestParam(value = "actId" , required = false) Long actId, + @RequestParam(value = "linkType" , required = false) Integer linkType + ) { + try { + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("actId" , actId); + jsonObject.put("sid" , "001"); + jsonObject.put("linkType" , linkType); + + JSONObject object = MeiTuanService.generateLink(jsonObject); + + return ResponseMsgUtil.success(object); + + } catch (Exception e) { + log.error("error!",e); + return ResponseMsgUtil.exception(e); + } + } + @RequestMapping(value="/getParent",method = RequestMethod.GET) @ResponseBody @@ -140,4 +165,5 @@ public class TestController { } + } diff --git a/cweb/src/main/resources/dev/logback.xml b/cweb/src/main/resources/dev/logback.xml index 830d878..b4356c0 100644 --- a/cweb/src/main/resources/dev/logback.xml +++ b/cweb/src/main/resources/dev/logback.xml @@ -113,4 +113,25 @@ + + + log/MeiTuanLog.log + + log/MeiTuanLog/MeiTuanLog.log.%d.%i + + + 64 MB + + + + + %d %p (%file:%line\)- %m%n + + UTF-8 + + + + + + diff --git a/service/src/main/java/com/hfkj/common/utils/SignatureUtil.java b/service/src/main/java/com/hfkj/common/utils/SignatureUtil.java new file mode 100644 index 0000000..b520658 --- /dev/null +++ b/service/src/main/java/com/hfkj/common/utils/SignatureUtil.java @@ -0,0 +1,118 @@ +package com.hfkj.common.utils; + +import com.alibaba.fastjson.JSONObject; +import com.hfkj.config.CommonSysConst; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.lang3.StringUtils; + +import javax.xml.bind.annotation.adapters.HexBinaryAdapter; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.stream.Collectors; + +public class SignatureUtil { + /** + * 参数签名 + * @param param 参数 + * @param secret 秘钥 + * @return + * @throws Exception + */ + public static String createSign(Object param, String secret) throws Exception { + Map map = JSONObject.parseObject(JSONObject.toJSONString(param), Map.class); + return md5Encode(paramSort(map, secret).getBytes()); + } + + /** + * 验证签名 + * @param checkSign 需验证的签名字符串 + * @param param 参数 + * @param secret 秘钥 + * @return + * @throws Exception + */ + public static Boolean checkSign(String checkSign,Object param, String secret) throws Exception { + Map map = JSONObject.parseObject(JSONObject.toJSONString(param), Map.class); + // 去除签名 + map.remove("sign"); + if (checkSign.equals(createSign(map, secret))) { + return true; + } + return false; + } + + /** + * 参数排序 + * @param param + * @return + */ + public static String paramSort(final Map param, String secret) throws Exception { + Set keySet = param.keySet(); + String[] keyArray = keySet.toArray(new String[keySet.size()]); + Arrays.sort(keyArray); + StringBuilder sb = new StringBuilder(); + for (String k : keyArray) { + if (StringUtils.isBlank(sb.toString())) { + sb.append(k).append("=").append(param.get(k)); + } else { + sb.append("&").append(k).append("=").append(param.get(k)); + } + } + sb.append(secret); + return sb.toString(); + } + + /** + * MD5加密 + * @param data + * @return + * @throws Exception + */ + public static String md5Encode(byte[] data) throws Exception { + // 初始化MessageDigest + MessageDigest md = MessageDigest.getInstance("MD5"); + // 执行摘要信息 + byte[] digest = md.digest(data); + // 将摘要信息转换为32位的十六进制字符串 + return new String(new HexBinaryAdapter().marshal(digest)); + } + + + public static String genSign(JSONObject object , String secret) throws Exception { + +// 转换为TreeMap + TreeMap params = new TreeMap<>(); + for (String key : object.keySet()) { + params.put(key, object.get(key)); + } + params.remove("sign"); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder + .append(secret) + .append(params.entrySet().stream() + .map(entry -> entry.getKey() + entry.getValue()) + .collect(Collectors.joining())) + .append(secret); + return md5(stringBuilder.toString()); + } + + public static String md5(String source) { + String md5Result = null; + try { + byte[] hash = org.apache.commons.codec.binary.StringUtils.getBytesUtf8(source); + MessageDigest messageDigest = MessageDigest.getInstance("MD5"); + messageDigest.update(hash); + hash = messageDigest.digest(); + md5Result = Hex.encodeHexString(hash); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return md5Result; + } +} + + diff --git a/service/src/main/java/com/hfkj/config/CommonSysConfig.java b/service/src/main/java/com/hfkj/config/CommonSysConfig.java index abdb265..36f3e48 100644 --- a/service/src/main/java/com/hfkj/config/CommonSysConfig.java +++ b/service/src/main/java/com/hfkj/config/CommonSysConfig.java @@ -27,5 +27,11 @@ public class CommonSysConfig { private String taoBaoPostUrl; private String taoBaoAppKey; private String taoBaoAppSecret; + /** + * 美团请求参数 + */ + private String meiTuanPostUrl; + private String meiTuanAppKey; + private String meiTuanAppSecret; } diff --git a/service/src/main/java/com/hfkj/service/meituan/MeiTuanService.java b/service/src/main/java/com/hfkj/service/meituan/MeiTuanService.java new file mode 100644 index 0000000..35c2ad6 --- /dev/null +++ b/service/src/main/java/com/hfkj/service/meituan/MeiTuanService.java @@ -0,0 +1,63 @@ +package com.hfkj.service.meituan; + +import com.alibaba.fastjson.JSONObject; +import com.hfkj.common.exception.ErrorCode; +import com.hfkj.common.exception.ErrorHelp; +import com.hfkj.common.exception.SysCode; +import com.hfkj.common.utils.HttpsUtils; +import com.hfkj.common.utils.SignatureUtil; +import com.hfkj.config.CommonSysConst; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MeiTuanService { + + private static Logger log = LoggerFactory.getLogger(MeiTuanService.class); + + + /** + * @MethodName generateLink + * @Description: 自助取链接口 + * @param param + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/10/11 下午4:35 + */ + public static JSONObject generateLink(JSONObject param)throws Exception { + JSONObject object = request("generateLink" , param); + + if (object.getInteger("status").equals(0)) { + return object; + } else { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, object.getString("des")); + } + } + + /** + * @MethodName request + * @Description: 统一请求 + * @param postUrl + * @param param + * @return: com.alibaba.fastjson.JSONObject + * @Author: Sum1Dream + * @Date: 2024/10/11 下午3:34 + */ + public static JSONObject request(String postUrl, JSONObject param) throws Exception { + + log.info("============ 美团请求-START ============="); + param.put("appkey", CommonSysConst.getSysConfig().getMeiTuanAppKey()); + param.put("sign" , SignatureUtil.genSign(param , CommonSysConst.getSysConfig().getMeiTuanAppSecret())); + + log.info("请求接口:" + postUrl); + log.info("请求参数:" + JSONObject.toJSONString(param)); + + + JSONObject response = HttpsUtils.doGet(CommonSysConst.getSysConfig().getMeiTuanPostUrl() + postUrl, param); + + log.info("响应参数:" + response.toJSONString()); + log.info("============ 美团请求-END =============="); + return response; + + } + +} diff --git a/service/src/main/java/com/hfkj/service/pdd/PddService.java b/service/src/main/java/com/hfkj/service/pdd/PddService.java index d5ce0fb..782de2b 100644 --- a/service/src/main/java/com/hfkj/service/pdd/PddService.java +++ b/service/src/main/java/com/hfkj/service/pdd/PddService.java @@ -20,7 +20,6 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; - public class PddService { private static Logger log = LoggerFactory.getLogger(PddService.class); diff --git a/service/src/main/java/com/hfkj/service/taobao/TaoBaoService.java b/service/src/main/java/com/hfkj/service/taobao/TaoBaoService.java index a8993dd..59f9bf5 100644 --- a/service/src/main/java/com/hfkj/service/taobao/TaoBaoService.java +++ b/service/src/main/java/com/hfkj/service/taobao/TaoBaoService.java @@ -181,4 +181,26 @@ public class TaoBaoService { return JSONObject.parseObject(JSON.toJSONString(response)); } + public static JSONObject officialActivity(String clickUrl) throws Exception { + + log.info("============ 淘口令生成-START ============="); + + TopApiClient client = new DefaultTopApiClient(appKey,appsecret,url); + Ability375 apiPackage = new Ability375(client); + // create domain + + // create request + TaobaoTbkTpwdCreateRequest request = new TaobaoTbkTpwdCreateRequest(); + request.setUrl(clickUrl); + + TaobaoTbkTpwdCreateResponse response = apiPackage.taobaoTbkTpwdCreate(request); + + log.info("请求接口:" + "taobaoTbkTpwdCreate"); + log.info("请求参数:" + JSONObject.toJSONString(request)); + log.info("响应参数:" + response); + log.info("============ 淘口令生成--END =============="); + return JSONObject.parseObject(JSON.toJSONString(response)); + + } + } diff --git a/service/src/main/resources/dev/commonConfig.properties b/service/src/main/resources/dev/commonConfig.properties index 0fef8ca..9d9e9f5 100644 --- a/service/src/main/resources/dev/commonConfig.properties +++ b/service/src/main/resources/dev/commonConfig.properties @@ -4,3 +4,8 @@ domain=http://47.92.163.212 taoBaoPostUrl = https://eco.taobao.com/router/rest taoBaoAppKey = 34807616 taoBaoAppSecret = f04baedca9cd794665dfa04a2fcbfd86 + + +meiTuanPostUrl = https://openapi.meituan.com/api/ +meiTuanAppKey = d876dc3766053f3cde609e5f11a26aba +meiTuanAppSecret = 7cdb8439a4c3fae7a092705bde95d4ef