From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java | 275 +++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 216 insertions(+), 59 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java index 3664dc0..2a38815 100644 --- a/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java +++ b/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java @@ -3,14 +3,11 @@ import java.io.UnsupportedEncodingException; import java.lang.reflect.Type; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; +import com.google.gson.JsonObject; +import com.yeshi.fanli.exception.pdd.PDDApiException; +import com.yeshi.fanli.vo.pdd.PDDConvertLinkResultVO; import org.yeshi.utils.HttpUtil; import com.google.gson.Gson; @@ -32,9 +29,11 @@ import net.sf.json.JSONObject; public class PinDuoDuoApiUtil { - public final static String PID_FANLI = "8590899_72067894"; - public final static String PID_SHARE = "8590899_72067895"; - public final static String PID_COUPON = "8590899_102657575"; +// public final static String PID_FANLI = "8590899_72067894"; +// public final static String PID_SHARE = "8590899_72067895"; +// public final static String PID_COUPON = "8590899_102657575"; + + public final static String PID_DEFAULT = "8590899_72067894"; private final static String CLIENT_ID = "9f6ee5ebd3b94c2080c4d51c2427e9fa"; private final static String CLIENT_SECRET = "95e1f1904385664bf4b87d4b34de12f9f31c505d"; @@ -52,6 +51,15 @@ org += key + map.get(key); } return StringUtil.Md5(CLIENT_SECRET + org + CLIENT_SECRET).toUpperCase(); + } + + private static String getFormatCustomParameters(String customParameters){ + customParameters=customParameters.replace("_",""); + JSONObject data=new JSONObject(); + data.put("uid",customParameters); + String custom = data.toString(); + System.out.println("鑷畾涔夊弬鏁帮細"+custom); + return custom; } private static String baseRequest(Map<String, String> map) { @@ -79,11 +87,11 @@ * @param sf * @return */ - public static PDDGoodsResult searchGoods(PDDSearchFilter sf, String customerParamters) { + public static PDDGoodsResult searchGoods(PDDSearchFilter sf, String customerParamters) throws PDDApiException { Gson gson = new GsonBuilder().disableHtmlEscaping().create(); Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.goods.search"); - map.put("custom_parameters", customerParamters); + map.put("custom_parameters", getFormatCustomParameters(customerParamters)); if (sf.getOptId() != null) map.put("opt_id", sf.getOptId() + ""); if (sf.getPage() != null) @@ -109,10 +117,15 @@ map.put("range_list", gson.toJson(sf.getRangeList()).toString()); } - map.put("pid", PID_FANLI); + map.put("pid", PID_DEFAULT); String result = baseRequest(map); System.out.println(result); JSONObject json = JSONObject.fromObject(result); + if (json.optJSONObject("error_response") != null) { + int errorCode = json.optJSONObject("error_response").optInt("sub_code"); + throw new PDDApiException(errorCode, json.optJSONObject("error_response").optString("sub_msg")); + } + JSONObject root = json.optJSONObject("goods_search_response"); if (root == null) { return null; @@ -136,7 +149,12 @@ Long[] ids = new Long[goodsIds.size()]; goodsIds.toArray(ids); filter.setGoodsIdList(ids); - PDDGoodsResult result = searchGoods(filter, Constant.PDD_SEARCH_CUSTOMER_PARAMS); + PDDGoodsResult result = null; + try { + result = searchGoods(filter, Constant.PDD_SEARCH_CUSTOMER_PARAMS); + } catch (PDDApiException e) { + e.printStackTrace(); + } if (result != null) return result.getGoodsList(); return null; @@ -150,7 +168,7 @@ * @param channelType 棰戦亾绫诲瀷锛�0, "1.9鍖呴偖", 1, "浠婃棩鐖嗘", 2, "鍝佺墝娓呬粨", 闈炲繀濉� ,榛樿鏄�1 * @return */ - public static PDDGoodsResult searchByChannelType(Integer page, Integer pageSize, String channelType) { + public static PDDGoodsResult searchByChannelType(Integer page, Integer pageSize, String channelType, Integer[] activityTags) { Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.goods.recommend.get"); map.put("offset", (page == null ? 0 : page) + ""); @@ -158,8 +176,11 @@ if (channelType != null) map.put("channel_type", channelType); + if (activityTags != null) { + map.put("activity_tags", JSONArray.fromObject(Arrays.asList(activityTags)).toString()); + } - map.put("pid", PID_FANLI); + map.put("pid", PID_DEFAULT); String result = baseRequest(map); JSONObject json = JSONObject.fromObject(result); @@ -269,24 +290,26 @@ /** * 鍟嗗搧杞摼 * - * @param goodsId + * @param goodsSign * @param pid * @param customParams * @return */ - public static PDDPromotionUrl convert(Long goodsId, String pid, String customParams, boolean withAuthLink) { + public static PDDConvertLinkResultVO convert(String goodsSign, String pid, String customParams, boolean withAuthLink) { Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.goods.promotion.url.generate"); map.put("p_id", pid); map.put("multi_group", "true"); + map.put("generate_schema_url","true"); map.put("generate_weapp_webview", "true"); + map.put("generate_we_app", "true"); // map.put("generate_weiboapp_webview", "true"); JSONArray array = new JSONArray(); - array.add(goodsId); - map.put("goods_id_list", array.toString()); + array.add(goodsSign); + map.put("goods_sign_list", array.toString()); if (!StringUtil.isNullOrEmpty(customParams)) { - map.put("custom_parameters", customParams); + map.put("custom_parameters", getFormatCustomParameters(customParams)); } //鏄惁鐢熸垚甯︽巿鏉冪殑鍗曞搧閾炬帴 @@ -294,6 +317,7 @@ map.put("generate_authority_url", true + ""); String result = baseRequest(map); + System.out.println(result); JSONObject root = JSONObject.fromObject(result); JSONObject json = root.optJSONObject("goods_promotion_url_generate_response"); if (json == null) { @@ -301,7 +325,7 @@ } JSONArray resultArray = json.optJSONArray("goods_promotion_url_list"); if (resultArray != null && resultArray.size() > 0) { - Type type = new TypeToken<PDDPromotionUrl>() { + Type type = new TypeToken<PDDConvertLinkResultVO>() { }.getType(); Gson gson = new GsonBuilder().disableHtmlEscaping().create(); return gson.fromJson(resultArray.optJSONObject(0).toString(), type); @@ -310,22 +334,97 @@ } - public static PDDPromotionUrl convertResourceUrl(String pid) { + /** + * 娲诲姩杞摼 https://open.pinduoduo.com/application/document/api?id=pdd.ddk.resource.url.gen + * + * @param resourceType + * @param url + * @param pid + * @param customParams + * @return + */ + public static PDDConvertLinkResultVO convertActivity(String resourceType, String url, String pid, String customParams) { Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.resource.url.gen"); + map.put("generate_schema_url","true"); map.put("pid", pid); - map.put("resource_type", "39998"); - map.put("url", "https://mobile.yangkeduo.com/attendance.html?_pdd_fs=1&_pdd_tc=ffffff&_pdd_sbs=1&type=1&id=155075"); + if (customParams != null) { + map.put("custom_parameters", getFormatCustomParameters(customParams)); + } + map.put("resource_type", resourceType); + if (url != null) { + map.put("url", url); + } + + String result = baseRequest(map); + JSONObject root = JSONObject.fromObject(result); + JSONObject json = root.optJSONObject("resource_url_response"); + if (json == null) { + return null; + } + JSONObject urlJSON = json.optJSONObject("single_url_list"); + PDDConvertLinkResultVO vo = null; + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + if (urlJSON != null) { + + vo = gson.fromJson(urlJSON.toString(), PDDConvertLinkResultVO.class); + } + JSONObject weAppInfo = json.optJSONObject("we_app_info"); + if (weAppInfo != null && vo != null) { + PDDConvertLinkResultVO.WeAppInfoBean weAppInfoBean = gson.fromJson(weAppInfo.toString(), PDDConvertLinkResultVO.WeAppInfoBean.class); + vo.setWe_app_info(weAppInfoBean); + } + + return vo; + } + + + /** + * 棰戦亾鎺ㄥ箍锛坔ttps://open.pinduoduo.com/application/document/api?id=pdd.ddk.cms.prom.url.generate锛� + * + * @param channelType + * @param pid + * @param customParams + * @return + */ + + public static PDDConvertLinkResultVO convertChannel(String channelType, String pid, String customParams) { + Map<String, String> map = new HashMap<>(); + map.put("type", "pdd.ddk.cms.prom.url.generate"); + map.put("p_id_list", "[\"" + pid + "\"]"); + if (customParams != null) { + map.put("custom_parameters", getFormatCustomParameters(customParams)); + } + map.put("channel_type", channelType); + map.put("generate_mobile", true+""); + map.put("generate_short_url", true+""); + map.put("generate_we_app", true+""); + + + String result = baseRequest(map); System.out.println(result); - return null; + JSONObject root = JSONObject.fromObject(result); + JSONObject json = root.optJSONObject("cms_promotion_url_generate_response"); + if (json == null) { + return null; + } + JSONObject urlJSON = json.optJSONArray("url_list").optJSONObject(0); + PDDConvertLinkResultVO vo = null; + Gson gson = new GsonBuilder().disableHtmlEscaping().create(); + if (urlJSON != null) { + vo = gson.fromJson(urlJSON.toString(), PDDConvertLinkResultVO.class); + } + + return vo; } + /** * 寰俊灏忕▼搴忚浆閾� @Title: convertWXMP @Description: @param goodsId @param * pid @param customParams @return PDDPromotionUrl 杩斿洖绫诲瀷 @throws */ - public static String convertWXMP(Long goodsId, String pid, String customParams) { + public static String convertWXMP(String goodsId, String pid, String customParams) { Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.goods.promotion.url.generate"); map.put("p_id", pid); @@ -336,7 +435,7 @@ array.add(goodsId); map.put("goods_id_list", array.toString()); if (!StringUtil.isNullOrEmpty(customParams)) { - map.put("custom_parameters", customParams); + map.put("custom_parameters", getFormatCustomParameters(customParams)); } String result = baseRequest(map); @@ -357,15 +456,15 @@ /** * 鍟嗗搧杞摼 * - * @param goodsId + * @param goodsSign * @param pid * @param customParams * @return */ - public static String getPromotionUrl(Long goodsId, String pid, String customParams) { - PDDPromotionUrl promotion = convert(goodsId, pid, customParams, false); + public static String getPromotionUrl(String goodsSign, String pid, String customParams) { + PDDConvertLinkResultVO promotion = convert(goodsSign, pid, customParams, false); if (promotion != null) { - return promotion.getShortUrl(); + return promotion.getShort_url(); } return null; } @@ -401,14 +500,21 @@ map.put("page_size", pageSize + ""); String result = baseRequest(map); System.out.println(result); - JSONObject json = JSONObject.fromObject(result); - JSONObject root = json.optJSONObject("order_list_get_response"); + com.alibaba.fastjson.JSONObject json = com.alibaba.fastjson.JSONObject.parseObject(result); + com.alibaba.fastjson.JSONObject root = json.getJSONObject("order_list_get_response"); if (root != null) { - int totalCount = root.optInt("total_count"); - JSONArray array = root.optJSONArray("order_list"); - Type type = new TypeToken<List<PDDOrder>>() { - }.getType(); - List<PDDOrder> orderList = new Gson().fromJson(array.toString(), type); + int totalCount = root.getInteger("total_count"); + com.alibaba.fastjson.JSONArray array = root.getJSONArray("order_list"); + Type type=new TypeToken<List<PDDOrder>>(){}.getType(); + List<PDDOrder> orderList = new Gson().fromJson( array.toJSONString(), type); + // 澶勭悊custom_params + for(PDDOrder order:orderList){ + String params=order.getCustomParameters(); + if(params.contains("{")) { + JSONObject jsonp = JSONObject.fromObject(params); + order.setCustomParameters(jsonp.optString("uid")); + } + } return new PDDOrderResult(totalCount, orderList); } return null; @@ -419,10 +525,16 @@ map.put("type", "pdd.ddk.order.detail.get"); map.put("order_sn", orderSn); String result = baseRequest(map); - JSONObject json = JSONObject.fromObject(result); - JSONObject root = json.optJSONObject("order_detail_response"); + com.alibaba.fastjson.JSONObject json = com.alibaba.fastjson.JSONObject.parseObject(result); + com.alibaba.fastjson.JSONObject root = json.getJSONObject("order_detail_response"); if (root != null) { - return new Gson().fromJson(root.toString(), PDDOrder.class); + PDDOrder order = new Gson().fromJson(root.toString(), PDDOrder.class); + String params=order.getCustomParameters(); + if(params.contains("{")) { + JSONObject jsonp = JSONObject.fromObject(params); + order.setCustomParameters(jsonp.optString("uid")); + } + return order; } return null; } @@ -430,24 +542,34 @@ /** * 鑾峰彇鍟嗗搧璇︽儏 * - * @param goodsId + * @param goodsSign */ - public static PDDGoodsDetail getGoodsDetail(Long goodsId) { - return getGoodsDetail(goodsId, null, null); + public static PDDGoodsDetail getGoodsDetail(String goodsSign) { + try { + return getGoodsDetail(goodsSign, PID_DEFAULT, "437031"); + } catch (PDDApiException e) { + e.printStackTrace(); + } + + return null; } - public static PDDGoodsDetail getGoodsDetail(Long goodsId, String pid, String customParameters) { + public static PDDGoodsDetail getGoodsDetail(String goodsSign, String pid, String customParameters) throws PDDApiException { + +// String goodsSign = goodsResult.getGoodsList().get(0).getGoodsSign(); + + JSONArray array = new JSONArray(); - array.add(goodsId); + array.add(goodsSign); Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.goods.detail"); - map.put("goods_id_list", array.toString()); + map.put("goods_sign", goodsSign); if (!StringUtil.isNullOrEmpty(pid)) { map.put("pid", pid); } if (!StringUtil.isNullOrEmpty(customParameters)) { - map.put("custom_parameters", customParameters); + map.put("custom_parameters", getFormatCustomParameters(customParameters)); } String result = baseRequest(map); @@ -482,7 +604,7 @@ Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.phrase.generate"); map.put("goods_id_list", array.toString()); - map.put("p_id", PID_FANLI); + map.put("p_id", PID_DEFAULT); String result = baseRequest(map); JSONObject resultJson = JSONObject.fromObject(result); JSONObject root = resultJson.optJSONObject("ddk_phrase_generate_response"); @@ -551,10 +673,13 @@ * @return */ public static boolean isAuth(String pid, String customParameters) { +// customParameters=customParameters.replace("_",""); + + System.out.println("鏄惁鎺堟潈锛�"+pid+"-"+customParameters); Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.member.authority.query"); map.put("pid", pid); - map.put("custom_parameters", customParameters); + map.put("custom_parameters", getFormatCustomParameters(customParameters)); String result = baseRequest(map); JSONObject resultJson = JSONObject.fromObject(result); if (resultJson.optJSONObject("authority_query_response").optInt("bind") == 0) { @@ -564,23 +689,55 @@ } - public static String getAuthLink(String pid, String customParameters) { + /** + * 鐢熸垚鎺堟潈閾炬帴 + * + * @param pid + * @param customParameters + * @return + */ + public static PDDConvertLinkResultVO getAuthLink(String pid, String customParameters) { +// customParameters=customParameters.replace("_",""); + + System.out.println("鑾峰彇鎺堟潈閾炬帴锛�"+pid+"-"+customParameters); Map<String, String> map = new HashMap<>(); map.put("type", "pdd.ddk.rp.prom.url.generate"); map.put("channel_type", 10 + ""); - map.put("custom_parameters", customParameters); + map.put("generate_we_app", true + ""); + map.put("custom_parameters",getFormatCustomParameters(customParameters)); map.put("p_id_list", "[\"" + pid + "\"]"); String result = baseRequest(map); + System.out.println(result); JSONObject resultJson = JSONObject.fromObject(result); JSONArray array = resultJson.optJSONObject("rp_promotion_url_generate_response").optJSONArray("url_list"); if (array != null && array.size() > 0) { - JSONObject item = array.optJSONObject(0); - String url = item.optString("url"); - if (StringUtil.isNullOrEmpty(url)) { - url = item.optString("mobile_url"); - } - return url; + Type type = new TypeToken<List<PDDConvertLinkResultVO>>() { + }.getType(); + List<PDDConvertLinkResultVO> list = new Gson().fromJson(array.toString(), type); + return list.get(0); } return null; } + + public static void main(String[] args) throws Exception{ + +// PDDConvertLinkResultVO vo = getAuthLink("8590899_72067894", 437031+""); +// boolean isAuthed = isAuth(PID_DEFAULT, 437031+""); +// System.out.println("鏄惁鎺堟潈锛�"+isAuthed); +// +// System.out.println(vo); + PDDSearchFilter searchFilter=new PDDSearchFilter(); + searchFilter.setKw("闉�"); + searchFilter.setPage(1); + searchFilter.setPageSize(20); + PinDuoDuoApiUtil.searchGoods(searchFilter,Constant.PDD_SEARCH_CUSTOMER_PARAMS); +// PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(364476396740L); + + // PDDConvertLinkResultVO vo = convertChannel("0", PID_DEFAULT, null); + + // System.out.println(vo); +// PDDConvertLinkResultVO goodsc = PinDuoDuoApiUtil.convert(goods.getGoodsSign(), PID_DEFAULT + "", "437031", false); + +// System.out.println(""); + } } -- Gitblit v1.8.0