饿百零售库存更新

注意先引入POST请求对应的jar


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;

import net.sf.json.JSONObject;

public class eleme_damo {
	
	
	
//	库存更新调用demo
	public static void main(String[] args) {
		Map<String, Object> body = new HashMap<>();
		String cmd = "sku.stock.update.batch";
//		商家自定义编码
		String custom_sku_id = "";

		int i = 1;
//		测试编码UN001-20对应1-20的库存,拼接成参数字符
		while (i <= 20) {
			custom_sku_id += "UN00" + i + ":" + i + ";";
			i++;
		}
		
		if (custom_sku_id.length() > 0) {
			body.put("custom_sku_id", custom_sku_id.substring(0, custom_sku_id.length() - 1));
//			shop_id改为自己的
			body.put("shop_id", "**********");
//			sendel进行发送,cmd接口名,body参数内容
			System.out.println(sendel(cmd, body));

		}
	}
	
	
	
	
	
	
	
	
//	发送请求
	public static String sendel(String cmd,Map<String, Object> body) {
		try{
//			因为饿了么限制请求频率,进行请求先睡眠1秒
			Thread.sleep(1000);
			}catch(Exception e){
			System.exit(0);//退出程序
			}
        Map<String, Object> params = new HashMap<>();

        params.put("cmd", cmd);
        params.put("encrypt", "");//如果encrypt没有,直接用"",不要用null表示
        params.put("secret", "********");
        params.put("source", "****");
//        随机36位ticket
        String tik=generateRandomString(36);
        params.put("ticket", tik);
        params.put("body", body);
        params.put("version", "3");
        
        params.put("timestamp", new Date().getTime()/1000);//当前时间戳


        String sign = getSign(params);
        params.put("sign", sign);
        params.remove("secret");
        params.put("body",JSONObject.fromObject(params.get("body")));
        StringBuilder requestparams = new StringBuilder();
        for (Map.Entry<String, Object> map : params.entrySet()) {
            requestparams.append(map.getKey()+"="+map.getValue() + "&");
        }
        System.out.println(requestparams.substring(0, requestparams.length() - 1).toString());
        return sendPost("https://api-be.ele.me",requestparams.substring(0, requestparams.length() - 1).toString());
    }
	
	
	
//	字符串池
	private static String[] STR_ARR = new String[] {"A", "B", "C", "D", "E",
			"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
			"S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5",
			"6", "7", "8", "9", "0" };
//	随机数生成
	public static String generateRandomString(int length) {
		StringBuilder sb = new StringBuilder();
		Random rand = new Random();
		for (int i = 0; i < length; i++) {
			if(i==8||i==13||i==18||i==23) {
				sb.append("-");
			}else {
			sb.append(STR_ARR[rand.nextInt(STR_ARR.length)]);
			}
		}
		return sb.toString();
	}
	
//	签名生成
	public static String getSign(Map<String, Object> data) {
		TreeMap<String, Object> arr = new TreeMap<String, Object>();

		arr.put("body", JSONObject.fromObject(data.get("body")));
		arr.put("cmd", data.get("cmd"));
		arr.put("encrypt", "");
		arr.put("secret", data.get("secret"));
		arr.put("source", data.get("source"));
		arr.put("ticket", data.get("ticket"));
		arr.put("timestamp", data.get("timestamp"));
		arr.put("version", data.get("version"));
		StringBuilder strSignTmp = new StringBuilder("");
		Iterator it = arr.keySet().iterator();
		while (it.hasNext()) {
			String key = it.next().toString();
			strSignTmp.append(key + "=" + arr.get(key) + "&");
		}
		String strSign = strSignTmp.toString().substring(0, strSignTmp.length() - 1);
		String sign = getMD5(strSign.toString());
		return sign;
	}

//	MD5
	public static String getMD5(String input) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			byte[] messageDigest = md.digest(input.getBytes());
			BigInteger number = new BigInteger(1, messageDigest);
			String hashtext = number.toString(16);
			while (hashtext.length() < 32) {
				hashtext = "0" + hashtext;
			}
			return hashtext.toUpperCase();
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException(e);
		}
	}
	
	
//  POST请求
  public static String sendPost(String url, String param) {
      PrintWriter out = null;
      BufferedReader in = null;
      String result = "";
      try {
          URL realUrl = new URL(url);
          URLConnection conn = realUrl.openConnection();
          conn.setRequestProperty("accept", "*/*");
          conn.setRequestProperty("connection", "Keep-Alive");
          conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
          conn.setRequestProperty("user-agent",
                  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
          conn.setDoOutput(true);
          conn.setDoInput(true);
          out = new PrintWriter(conn.getOutputStream());
          out.print(param);
          out.flush();
          in = new BufferedReader(
                  new InputStreamReader(conn.getInputStream()));
          String line;
          while ((line = in.readLine()) != null) {
              result += line;
          }
      } catch (Exception e) {
          System.out.println("请求出错:"+e);
          e.printStackTrace();
      }
      finally{
          try{
              if(out!=null){
                  out.close();
              }
              if(in!=null){
                  in.close();
              }
          }
          catch(IOException ex){
              ex.printStackTrace();
          }
      }
      return result;
  }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值