最近公司项目需要对接饿百零售(*****注意不是饿了么平台),小编吃过亏,以为是饿了么平台,虽然饿百零售和饿了么是一家,但是还是要小心,看了一下网上饿百零售的很少,所以自己来分享一下
1 . 对接api
------ 下面是封装的工具类
//公共参数
private static final String app_id = "12345678";
private static final String app_key = "abcdefg";
// 发送请求
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",app_key);
params.put("source",app_id);
// 随机36位ticket
String tik=generateRandomString(36);
params.put("ticket", tik);
params.put("body", body);
params.put("version", "3");
Long newTime = System.currentTimeMillis();
String time = newTime.toString().substring(0, 10);
params.put("timestamp", time);//当前时间戳
String sign = getSign(params);
params.put("sign", sign);
params.remove("secret");
//params.put("body", JSON.toJSON(params.get("body")));
params.put("body",JSON.toJSON(params.get("body")));
params.put("body", URLEncoder.encode(params.get("body").toString()));
StringBuilder requestparams = new StringBuilder();
for (Map.Entry<String, Object> map : params.entrySet()) {
requestparams.append(map.getKey()+"="+map.getValue() + "&");
}
return HttpRequestUtil.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", JSON.toJSON(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
* @return String
*/
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);
}
}
//下行推送成功返回
public static Map<String, Object> param(String cmd){
Map<String, Object> body = new HashMap<>();
body.put("errno", "0");
body.put("error", "success");
Map<String, Object> params = new HashMap<>();
params.put("cmd", cmd);
params.put("encrypt", "");//如果encrypt没有,直接用"",不要用null表示
params.put("secret", app_key);
params.put("source", app_id);
// 随机36位ticket
String tik = ElemeUtils.generateRandomString(36);
params.put("ticket", tik);
params.put("body", body);
params.put("version", "3");
Long newTime = System.currentTimeMillis();
String time = newTime.toString().substring(0, 10);
params.put("timestamp", time);//当前时间戳
String sign = ElemeUtils.getSign(params);
params.put("sign", sign);
params.remove("secret");
params.put("body", body);
return params;
}
------------------------------------------------------------------------
//http post请求
public class HttpRequestUtil {
public static String sendPost(String url,String param) {
System.out.println("param="+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("·¢ËÍ POST ÇëÇó³öÏÖÒì³££¡"+e);
e.printStackTrace();
}
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
---- 下面我们来写个main测试一下
/**
* 饿了么商品删除实体类
*/
public class SkuDelete {
//商户id
private String shop_id;
//商品ID,多个id以逗号连接,最多同时支持100个商品id,与custom_sku_id upc互斥
private String sku_id;
// 商品自定义ID,与sku_id upc参数互斥,多个upc以逗号连接,批量操作时最多同时支持100个,逗号分割;单个操作时传入一
private String custom_sku_id;
public String getShop_id() {
return shop_id;
}
public void setShop_id(String shop_id) {
this.shop_id = shop_id;
}
public String getSku_id() {
return sku_id;
}
public void setSku_id(String sku_id) {
this.sku_id = sku_id;
}
public String getCustom_sku_id() {
return custom_sku_id;
}
public void setCustom_sku_id(String custom_sku_id) {
this.custom_sku_id = custom_sku_id;
}
@Override
public String toString() {
return "SkuDelete{" +
"shop_id='" + shop_id + '\'' +
", sku_id='" + sku_id + '\'' +
", custom_sku_id='" + custom_sku_id + '\'' +
'}';
}
}
---------------------------------------------------------------------------
/**
* 删除商品 或者 批量删除
* @param skuDelete 传参
* @return
*/
public static String skuDelete(SkuDelete skuDelete){
Map<String, Object> body = new HashMap<>();
body.put("shop_id",skuDelete.getShop_id());
if (StringUtils.isNotEmpty(skuDelete.getSku_id()) && StringUtils.isEmpty(skuDelete.getCustom_sku_id())){
body.put("sku_id",skuDelete.getSku_id());
}
if (StringUtils.isNotEmpty(skuDelete.getCustom_sku_id()) && StringUtils.isEmpty(skuDelete.getSku_id())){
body.put("custom_sku_id",skuDelete.getCustom_sku_id());
}
String cmd = "sku.delete";
return ElemeUtils.sendel(cmd,body);
}
------------------------------------------------------------------------
// 商品删除调用demo
public static void main(String[] args) throws IOException {
SkuDelete skuDelete = new SkuDelete();
skuDelete.setSku_id("1612448206221189");
skuDelete.setShop_id("32267754249");
System.out.println(ElemeGoodUtils.skuDelete(skuDelete));
//
}