From 5e7b0ed4a154ad067cbcf4aa1a1c7cce32f9864c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 26 四月 2024 18:02:17 +0800 Subject: [PATCH] 唯品会链接解析升级 --- fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java | 653 ++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 357 insertions(+), 296 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java index 3a98301..333d349 100644 --- a/fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java +++ b/fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopApiUtil.java @@ -1,296 +1,357 @@ -package com.yeshi.fanli.util.vipshop; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.Type; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.methods.PostMethod; -import org.yeshi.utils.StringUtil; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.yeshi.fanli.dto.vip.VIPConvertResultDTO; -import com.yeshi.fanli.dto.vip.VIPSearchFilter; -import com.yeshi.fanli.dto.vip.VIPSearchResult; -import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo; -import com.yeshi.fanli.dto.vipshop.VipShopOrderQueryModel; -import com.yeshi.fanli.dto.vipshop.VipShopQueryOrderResultDTO; -import com.yeshi.fanli.entity.vipshop.VipShopOrder; - -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; - -/** - * TODO 鏈畬鎴� 鍞搧浼氭帴鍙� - * - * @author Administrator - * - */ -public class VipShopApiUtil { - - private final static String appKey = "f9e7f22f"; - private final static String appSecret = "9B2291352497FAF42B2DF44BFCF62316"; - - /** - * 鑾峰彇绛惧悕 - * - * @param params - * @return - */ - private static String getSign(Map<String, String> systemParams, JSONObject taskParams) { - List<String> list = new ArrayList<>(); - for (Iterator<String> its = systemParams.keySet().iterator(); its.hasNext();) { - String key = its.next(); - String value = systemParams.get(key); - list.add(key + value); - } - Collections.sort(list); - String source = ""; - for (String st : list) - source += st; - source += taskParams.toString(); - return StringUtil.MD5Hmac(source, appSecret); - } - - private static Map<String, String> getSystemParams(String service, String method) { - Map<String, String> params = new HashMap<String, String>(); - params.put("service", service); - params.put("method", method); - params.put("version", "1.0"); - params.put("timestamp", System.currentTimeMillis() / 1000 + ""); - params.put("format", "json"); - params.put("appKey", appKey); - return params; - } - - /** - * 鍩虹璇锋眰 - * - * @param service - * @param method - * @param taskParams - * @return - */ - private static String baseRequest(String service, String method, JSONObject taskParams) { - Map<String, String> systemParams = getSystemParams(service, method); - String sign = getSign(systemParams, taskParams); - systemParams.put("sign", sign); - String baseUrl = "https://gw.vipapis.com"; - baseUrl += "?"; - for (Iterator<String> its = systemParams.keySet().iterator(); its.hasNext();) { - String key = its.next(); - String value = ""; - try { - value = URLEncoder.encode(systemParams.get(key), "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - baseUrl += key + "=" + value + "&"; - } - baseUrl = baseUrl.endsWith("&") ? baseUrl.substring(0, baseUrl.length() - 1) : baseUrl; - String result = post(baseUrl, taskParams.toString()); - return result; - } - - @SuppressWarnings("deprecation") - private static String post(String url, String body) { - HttpClient client = new HttpClient(); - PostMethod method = new PostMethod(url); - method.addRequestHeader("Content-Type", "application/json;charset=UTF-8"); - method.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); - method.setRequestBody(body); - try { - client.executeMethod(method); - return method.getResponseBodyAsString(); - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - /** - * 鎼滅储 - * @Title: search - * @Description: - * @param searchFilter - * @return - * VIPSearchResult 杩斿洖绫诲瀷 - * @throws - */ - public static VIPSearchResult search(VIPSearchFilter searchFilter) { - Map<String, String> taskParams = new HashMap<>(); - taskParams.put("keyword", searchFilter.getKeyword()); - taskParams.put("page", searchFilter.getPage() + ""); - taskParams.put("pageSize", searchFilter.getPageSize() + ""); - taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); - if (searchFilter.getPriceStart() != null) - taskParams.put("priceStart", searchFilter.getPriceStart()); - - if (searchFilter.getPriceEnd() != null) - taskParams.put("priceEnd", searchFilter.getPriceEnd()); - if (searchFilter.getOrder() != null) - taskParams.put("order", searchFilter.getOrder() + ""); - if (searchFilter.getFieldName() != null) - taskParams.put("fieldName", searchFilter.getFieldName() + ""); - - JSONObject root = new JSONObject(); - root.put("request", JSONObject.fromObject(taskParams)); - String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "query", root); - System.out.println(result); - List<VIPGoodsInfo> goodsList = new ArrayList<>(); - JSONObject resultJson = JSONObject.fromObject(result); - Gson gson = new Gson(); - if (resultJson.optInt("returnCode") == 0) { - resultJson = resultJson.optJSONObject("result"); - int count = resultJson.optInt("total"); - - JSONArray array = resultJson.optJSONArray("goodsInfoList"); - if (array != null && array.size() > 0) { - for (int i = 0; i < array.size(); i++) { - JSONObject optJSONObject = array.optJSONObject(i); - if (optJSONObject == null) { - continue; - } - VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); - if (info != null) - goodsList.add(info); - } - } - - return new VIPSearchResult(goodsList, count); - } - return null; - } - - - - public static VIPSearchResult getGoodsList(int channelType,int page) { - Map<String, String> taskParams = new HashMap<>(); - taskParams.put("channelType",channelType+""); - taskParams.put("page", page+ ""); - taskParams.put("pageSize", 20 + ""); - taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); - - - JSONObject root = new JSONObject(); - root.put("request", JSONObject.fromObject(taskParams)); - String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "goodsList", root); - System.out.println(result); - List<VIPGoodsInfo> goodsList = new ArrayList<>(); - JSONObject resultJson = JSONObject.fromObject(result); - Gson gson = new Gson(); - if (resultJson.optInt("returnCode") == 0) { - resultJson = resultJson.optJSONObject("result"); - int count = resultJson.optInt("total"); - JSONArray array = resultJson.optJSONArray("goodsInfoList"); - for (int i = 0; i < array.size(); i++) { - VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); - if (info != null) - goodsList.add(info); - } - return new VIPSearchResult(goodsList, count); - } - return null; - } - - /** - * 鍟嗗搧ID杞摼 - * - * @param goodsId - */ - public static VIPConvertResultDTO convertLink(String goodsId, String tag) { - JSONObject taskParams = new JSONObject(); - JSONArray goodsIdArray = new JSONArray(); - goodsIdArray.add(goodsId); - taskParams.put("goodsIdList", goodsIdArray); - taskParams.put("chanTag", tag); - taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); - String result = baseRequest("com.vip.adp.api.open.service.UnionUrlService", "genByGoodsId", - JSONObject.fromObject(taskParams)); - System.out.println(result); - JSONObject resultJSON = JSONObject.fromObject(result); - if (resultJSON.optInt("returnCode") == 0) { - String re = resultJSON.optJSONObject("result").optJSONArray("urlInfoList").optJSONObject(0).toString(); - return new Gson().fromJson(re, VIPConvertResultDTO.class); - } - return null; - } - - /** - * 鏍规嵁鍟嗗搧ID鑾峰彇鍟嗗搧璇︽儏 - * - * @param goodsIdList - * @return - */ - public static List<VIPGoodsInfo> getGoodsDetail(List<String> goodsIdList) { - JSONObject params = new JSONObject(); - params.put("goodsIdList", goodsIdList); - params.put("requestId", UUID.randomUUID()); - String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "getByGoodsIds", - JSONObject.fromObject(params)); - System.out.println(result); - JSONObject resultJson = JSONObject.fromObject(result); - Gson gson = new Gson(); - List<VIPGoodsInfo> goodsList = new ArrayList<>(); - if (resultJson.optInt("returnCode") == 0) { - JSONArray array = resultJson.optJSONArray("result"); - for (int i = 0; i < array.size(); i++) { - VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); - if (info != null) - goodsList.add(info); - } - return goodsList; - } - return null; - } - - /** - * 鑾峰彇鍟嗗搧璇︽儏 - * - * @param goodsId - * @return - */ - public static VIPGoodsInfo getGoodsDetail(String goodsId) { - List<String> goodsIdList = new ArrayList<>(); - goodsIdList.add(goodsId); - List<VIPGoodsInfo> goodsList = getGoodsDetail(goodsIdList); - if (goodsList == null || goodsList.size() == 0) - return null; - return goodsList.get(0); - } - - public static VipShopQueryOrderResultDTO getOrderList(VipShopOrderQueryModel query) { - JSONObject params = JSONObject.fromObject(new Gson().toJson(query)); - params.put("requestId", UUID.randomUUID()); - JSONObject root = new JSONObject(); - root.put("queryModel", params); - String result = baseRequest("com.vip.adp.api.open.service.UnionOrderService", "orderList", root); - System.out.println(result); - JSONObject json = JSONObject.fromObject(result); - if (json.optInt("returnCode") == 0) { - JSONObject resultJson = json.optJSONObject("result"); - int total = resultJson.optInt("total"); - JSONArray array = JSONArray.fromObject(resultJson.optJSONArray("orderInfoList")); - if (array != null) { - Type type = new TypeToken<ArrayList<VipShopOrder>>() { - }.getType(); - List<VipShopOrder> orderList = new Gson().fromJson(array.toString(), type); - return new VipShopQueryOrderResultDTO(orderList, total); - } - } - return null; - } - -} +package com.yeshi.fanli.util.vipshop; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Type; +import java.net.URLEncoder; +import java.util.*; + +import com.yeshi.fanli.util.Constant; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.methods.PostMethod; +import org.yeshi.utils.StringUtil; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.yeshi.fanli.dto.vip.VIPConvertResultDTO; +import com.yeshi.fanli.dto.vip.VIPSearchFilter; +import com.yeshi.fanli.dto.vip.VIPSearchResult; +import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo; +import com.yeshi.fanli.dto.vipshop.VipShopOrderQueryModel; +import com.yeshi.fanli.dto.vipshop.VipShopQueryOrderResultDTO; +import com.yeshi.fanli.entity.vipshop.VipShopOrder; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +/** + * TODO 鏈畬鎴� 鍞搧浼氭帴鍙� + * 鍟嗗搧鎺ュ彛閾炬帴锛歨ttps://vop.vip.com/home#/api/method/detail/com.vip.adp.api.open.service.UnionGoodsService-1.3.0/getByGoodsIds + * @author Administrator + */ +public class VipShopApiUtil { + + private final static String appKey = "f9e7f22f"; + private final static String appSecret = "9B2291352497FAF42B2DF44BFCF62316"; + + //鏄惁閲囩敤璁㈠崟渚犺浆閾� + private final static boolean CONVERT_DINGDANXIA = true; + + /** + * 鑾峰彇绛惧悕 + * + * @param systemParams + * @param taskParams + * @return + */ + private static String getSign(Map<String, String> systemParams, JSONObject taskParams) { + List<String> list = new ArrayList<>(); + for (Iterator<String> its = systemParams.keySet().iterator(); its.hasNext(); ) { + String key = its.next(); + String value = systemParams.get(key); + list.add(key + value); + } + Collections.sort(list); + String source = ""; + for (String st : list) + source += st; + source += taskParams.toString(); + return StringUtil.MD5Hmac(source, appSecret); + } + + private static Map<String, String> getSystemParams(String service, String method) { + Map<String, String> params = new HashMap<String, String>(); + params.put("service", service); + params.put("method", method); + params.put("version", "1.0"); + params.put("timestamp", System.currentTimeMillis() / 1000 + ""); + params.put("format", "json"); + params.put("appKey", appKey); + return params; + } + + /** + * 鍩虹璇锋眰 + * + * @param service + * @param method + * @param taskParams + * @return + */ + private static String baseRequest(String service, String method, JSONObject taskParams) { + Map<String, String> systemParams = getSystemParams(service, method); + String sign = getSign(systemParams, taskParams); + systemParams.put("sign", sign); + String baseUrl = "https://gw.vipapis.com"; + baseUrl += "?"; + for (Iterator<String> its = systemParams.keySet().iterator(); its.hasNext(); ) { + String key = its.next(); + String value = ""; + try { + value = URLEncoder.encode(systemParams.get(key), "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + baseUrl += key + "=" + value + "&"; + } + baseUrl = baseUrl.endsWith("&") ? baseUrl.substring(0, baseUrl.length() - 1) : baseUrl; + String result = post(baseUrl, taskParams.toString()); + return result; + } + + @SuppressWarnings("deprecation") + private static String post(String url, String body) { + HttpClient client = new HttpClient(); + PostMethod method = new PostMethod(url); + method.addRequestHeader("Content-Type", "application/json;charset=UTF-8"); + method.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); + method.setRequestBody(body); + try { + client.executeMethod(method); + return method.getResponseBodyAsString(); + } catch (HttpException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 鎼滅储 + * + * @param searchFilter + * @return VIPSearchResult 杩斿洖绫诲瀷 + * @throws + * @Title: search + * @Description: + */ + public static VIPSearchResult search(VIPSearchFilter searchFilter) { + Map<String, String> taskParams = new HashMap<>(); + taskParams.put("keyword", searchFilter.getKeyword()); + taskParams.put("page", searchFilter.getPage() + ""); + taskParams.put("pageSize", searchFilter.getPageSize() + ""); + taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); + if (searchFilter.getPriceStart() != null) + taskParams.put("priceStart", searchFilter.getPriceStart()); + + if (searchFilter.getPriceEnd() != null) + taskParams.put("priceEnd", searchFilter.getPriceEnd()); + if (searchFilter.getOrder() != null) + taskParams.put("order", searchFilter.getOrder() + ""); + if (searchFilter.getFieldName() != null) + taskParams.put("fieldName", searchFilter.getFieldName() + ""); + + //鏂板鍙傛暟 + taskParams.put("chanTag", "default_pid"); + taskParams.put("openId", "default_open_id"); + taskParams.put("realCall", "true"); + + + + + JSONObject root = new JSONObject(); + root.put("request", JSONObject.fromObject(taskParams)); + String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "query", root); + System.out.println(result); + List<VIPGoodsInfo> goodsList = new ArrayList<>(); + JSONObject resultJson = JSONObject.fromObject(result); + Gson gson = new Gson(); + if (resultJson.optInt("returnCode") == 0) { + resultJson = resultJson.optJSONObject("result"); + int count = resultJson.optInt("total"); + + JSONArray array = resultJson.optJSONArray("goodsInfoList"); + if (array != null && array.size() > 0) { + for (int i = 0; i < array.size(); i++) { + JSONObject optJSONObject = array.optJSONObject(i); + if (optJSONObject == null) { + continue; + } + VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); + if (info != null) + goodsList.add(info); + } + } + + return new VIPSearchResult(goodsList, count); + } + return null; + } + + + public static VIPSearchResult getGoodsList(int channelType, int page) { + Map<String, String> taskParams = new HashMap<>(); + taskParams.put("channelType", channelType + ""); + taskParams.put("page", page + ""); + taskParams.put("pageSize", 20 + ""); + taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); + + //鏂板鍙傛暟 + taskParams.put("chanTag", "default_pid"); + taskParams.put("openId", "default_open_id"); + taskParams.put("realCall", "true"); + + + JSONObject root = new JSONObject(); + root.put("request", JSONObject.fromObject(taskParams)); + String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "goodsList", root); + System.out.println(result); + List<VIPGoodsInfo> goodsList = new ArrayList<>(); + JSONObject resultJson = JSONObject.fromObject(result); + Gson gson = new Gson(); + if (resultJson.optInt("returnCode") == 0) { + resultJson = resultJson.optJSONObject("result"); + int count = resultJson.optInt("total"); + JSONArray array = resultJson.optJSONArray("goodsInfoList"); + for (int i = 0; i < array.size(); i++) { + VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); + if (info != null) + goodsList.add(info); + } + return new VIPSearchResult(goodsList, count); + } + return null; + } + + /** + * 鍟嗗搧ID杞摼 + * + * @param goodsId + */ + public static VIPConvertResultDTO convertLink(String goodsId, String tag) { + + if (CONVERT_DINGDANXIA) { + return DingDanXiaApiUtil.convertLink(goodsId, tag); + } + + JSONObject taskParams = new JSONObject(); + JSONArray goodsIdArray = new JSONArray(); + goodsIdArray.add(goodsId); + taskParams.put("goodsIdList", goodsIdArray); + taskParams.put("chanTag", tag); + taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); + String result = baseRequest("com.vip.adp.api.open.service.UnionUrlService", "genByGoodsId", + JSONObject.fromObject(taskParams)); + System.out.println(result); + JSONObject resultJSON = JSONObject.fromObject(result); + if (resultJSON.optInt("returnCode") == 0) { + String re = resultJSON.optJSONObject("result").optJSONArray("urlInfoList").optJSONObject(0).toString(); + return new Gson().fromJson(re, VIPConvertResultDTO.class); + } + return null; + } + + + public static VIPConvertResultDTO convertLinkByUrl(String url, String tag) { + + if (CONVERT_DINGDANXIA) { + return DingDanXiaApiUtil.convertLinkByUrl(url, tag); + } + JSONObject taskParams = new JSONObject(); + JSONArray urlArray = new JSONArray(); + urlArray.add(url); + taskParams.put("urlList", urlArray); + if (tag != null) { + taskParams.put("chanTag", tag); + } + taskParams.put("requestId", System.currentTimeMillis() + "_" + UUID.randomUUID()); + String result = baseRequest("com.vip.adp.api.open.service.UnionUrlService", "genByVIPUrl", + JSONObject.fromObject(taskParams)); + System.out.println(result); + JSONObject resultJSON = JSONObject.fromObject(result); + if (resultJSON.optInt("returnCode") == 0) { + String re = resultJSON.optJSONObject("result").optJSONArray("urlInfoList").optJSONObject(0).toString(); + return new Gson().fromJson(re, VIPConvertResultDTO.class); + } + return null; + } + + /** + * 鏍规嵁鍟嗗搧ID鑾峰彇鍟嗗搧璇︽儏 + * + * @param goodsIdList + * @return + */ + public static List<VIPGoodsInfo> getGoodsDetail(List<String> goodsIdList) { + JSONObject params = new JSONObject(); + params.put("goodsIdList", goodsIdList); + params.put("requestId", UUID.randomUUID()); + //鏂板鍙傛暟 + params.put("chanTag", "default_pid"); + JSONObject request = new JSONObject(); + request.put("openId", "default_open_id"); + request.put("realCall", "true"); + params.put("request", request); + + String result = baseRequest("com.vip.adp.api.open.service.UnionGoodsService", "getByGoodsIds", + JSONObject.fromObject(params)); + System.out.println(result); + JSONObject resultJson = JSONObject.fromObject(result); + Gson gson = new Gson(); + List<VIPGoodsInfo> goodsList = new ArrayList<>(); + if (resultJson.optInt("returnCode") == 0) { + JSONArray array = resultJson.optJSONArray("result"); + for (int i = 0; i < array.size(); i++) { + VIPGoodsInfo info = gson.fromJson(array.optJSONObject(i).toString(), VIPGoodsInfo.class); + if (info != null) + goodsList.add(info); + } + return goodsList; + } + return null; + } + + /** + * 鑾峰彇鍟嗗搧璇︽儏 + * + * @param goodsId + * @return + */ + public static VIPGoodsInfo getGoodsDetail(String goodsId) { + List<String> goodsIdList = new ArrayList<>(); + goodsIdList.add(goodsId); + List<VIPGoodsInfo> goodsList = getGoodsDetail(goodsIdList); + if (goodsList == null || goodsList.size() == 0) + return null; + return goodsList.get(0); + } + + public static VipShopQueryOrderResultDTO getOrderList(VipShopOrderQueryModel query) { + JSONObject params = JSONObject.fromObject(new Gson().toJson(query)); + params.put("requestId", UUID.randomUUID()); + JSONObject root = new JSONObject(); + root.put("queryModel", params); + String result = baseRequest("com.vip.adp.api.open.service.UnionOrderService", "orderList", root); + System.out.println(result); + JSONObject json = JSONObject.fromObject(result); + if (json.optInt("returnCode") == 0) { + JSONObject resultJson = json.optJSONObject("result"); + int total = resultJson.optInt("total"); + JSONArray array = JSONArray.fromObject(resultJson.optJSONArray("orderInfoList")); + if (array != null) { + Type type = new TypeToken<ArrayList<VipShopOrder>>() { + }.getType(); + List<VipShopOrder> orderList = new Gson().fromJson(array.toString(), type); + return new VipShopQueryOrderResultDTO(orderList, total); + } + } + return null; + } + + public static void main(String[] args) { +// VIPSearchFilter sf=new VIPSearchFilter(); +// sf.setKeyword("鑺卞崏"); +// sf.setPage(1); +// sf.setPageSize(Constant.PAGE_SIZE); +// search(sf); + + getGoodsDetail("6920553939593155215"); + +// convertLinkByUrl("https://t.vip.com/T7RyKKCJLj9", "437032"); +// convertLink("560392904","437032"); +// getOrderList(VipShopOrderQueryModel.createOrderSn(Arrays.asList(new String[]{"23090254293903"}),1)); + } + +} -- Gitblit v1.8.0