拼多多商品推广转链

匿名 (未验证) 提交于 2019-12-03 00:34:01

http://open.pinduoduo.com/#/document
http://open.pinduoduo.com/#/apidocument

所有的API都需要‘签名’

image

签名工具类:

 import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component;  import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Enumeration; import java.util.Map; import java.util.TreeMap;  /**  * @author MkStone slinstone@163.com  * @date 2018/6/17 21:35  */ @Component public class MD5_Sign {      public  static   String client_id="你的 client_id";      public  static  String client_secret="你的client_secret";       public static String md5(String string) {         byte[] hash;         try {             hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));         } catch (UnsupportedEncodingException e) {             throw new RuntimeException("UTF-8 is unsupported", e);         } catch (NoSuchAlgorithmException e) {             throw new RuntimeException("MessageDigest不支持MD5Util", e);         }         StringBuilder hex = new StringBuilder(hash.length * 2);         for (byte b : hash) {             if ((b & 0xFF) < 0x10) hex.append("0");             hex.append(Integer.toHexString(b & 0xFF));         }         return hex.toString();     }      /**      * md5签名      *      * 按参数名称升序,将参数值进行连接 签名      * @param params      * @return      */     public static String sign( TreeMap<String, String> params) {         StringBuilder paramValues = new StringBuilder();         params.put("client_id", client_id);         for (Map.Entry<String, String> entry : params.entrySet()) {             paramValues.append(entry.getKey()+entry.getValue());         }          /*  //拼多多 签名认证          *签名算法              POP目前支持的签名算法为:MD5(sign_method=md5),签名大体过程如下:              1-所有参数进行按照首字母先后顺序排列              2-把排序后的结果按照参数名+参数值的方式拼接              3-拼装好的字符串首尾拼接client_secret进行md5加密后转大写,secret的值是拼多多开放平台后台分配的client_secret           *           * */         System.out.println(client_secret+paramValues.toString()+client_secret);         String Md5Sign=md5(client_secret+paramValues.toString()+client_secret).toUpperCase();         System.out.println(Md5Sign);         return Md5Sign;     }       /**      * 请求参数签名验证      *      * @param request      * @return true 验证通过 false 验证失败      * @throws Exception      */     public static boolean verifySign(HttpServletRequest request) throws Exception {         TreeMap<String, String> params = new TreeMap<String, String>();          String signStr = request.getParameter("sign");         if(StringUtils.isBlank(signStr)){             throw new RuntimeException("There is no signature field in the request parameter!");         }          Enumeration<String> enu = request.getParameterNames();         while (enu.hasMoreElements()) {             String paramName = enu.nextElement().trim();             if (!paramName.equals("sign")) {                 params.put(paramName, URLDecoder.decode(request.getParameter(paramName), "UTF-8"));             }         }          if (!sign(params).equals(signStr)) {             return false;         }         return true;     } 

如何使用?

    //签名   String sign="";  TreeMap<String,String> map=new TreeMap<String, String>();         //商品         map.put("goods_id_list","["+GoodsId+"]");         map.put("type",type);          map.put("p_id",pid);         map.put("generate_short_url","true");         map.put("data_type","JSON");         map.put("timestamp",timestam);         sign = MD5_Sign.sign(map); 

多多客商品转链 ddk_link(id,GoodsId);

public  String ddk_link(String pid,String GoodsId){         String url="http://gw-api.pinduoduo.com/api/router?";         //参数         String timestam=(new Date().getTime()/1000)+"";         String sign="";         TreeMap<String,String> map=new TreeMap<String, String>();         //商品         map.put("goods_id_list","["+GoodsId+"]");         map.put("type",type);          map.put("p_id",pid);         map.put("generate_short_url","true");         map.put("data_type","JSON");         map.put("timestamp",timestam);         sign = MD5_Sign.sign(map);         //type 值         url+="type="+type;         // 返回值类型         url+="&data_type=JSON";         //ClienmtID         url+="&client_id="+client_id;         //商品ID         url+="&goods_id_list=["+GoodsId+"]";         //推广位ID         url+="&p_id="+pid;         // 是否生成短链接,true-是,false-否         url+="&generate_short_url=true";         url+="&timestamp="+timestam;         url+="&sign="+sign;          return loadJSON(url);     }     public String loadJSON (String url) {         StringBuilder json = new StringBuilder();         try {             URL oracle = new URL(url);             HttpURLConnection connection = (HttpURLConnection) oracle.openConnection();            connection.setDoOutput(true);             connection.setDoInput(true);             connection.setUseCaches(false);             connection.setInstanceFollowRedirects(true);             connection.setRequestMethod("POST"); // 设置请求方式             connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式             connection.connect();              BufferedReader in = new BufferedReader(new InputStreamReader(                     connection.getInputStream()));              String inputLine = null;             while ( (inputLine = in.readLine()) != null) {                 json.append(inputLine);             }             in.close();         } catch (IOException e) {             return "-1";         }         return json.toString();     }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!