跟美团API对接,以及生成签名,同步数据到数据库

今天我们研究如何跟美团对接,同步数据到数据库

1. 首先我们找到我们需要的接口(例如:food/list)

跟美团API对接,以及生成签名,同步数据到数据库_第1张图片

2.点进去之后

跟美团API对接,以及生成签名,同步数据到数据库_第2张图片

3.我们开始一个一个的拼接参数

(1)时间戳

在这里插入图片描述
这个是当前的秒值,我们可以在后台用代码来实现

LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
long l = ldt.toEpochSecond(ZoneOffset.ofHours(8));
System.out.println(l);

(2)app_id

4. List item
跟美团API对接,以及生成签名,同步数据到数据库_第3张图片

(3)门店ID

在一个就是签名,我们先放一边,有了门店ID一会用工具先获取一下
在这里插入图片描述

(4)签名

现在除了签名,剩下的三个参数都有了,现在我们来获取最后的签名
跟美团API对接,以及生成签名,同步数据到数据库_第4张图片
生成之后,浏览器输入如下路径进行访问
如果我们(获取到了数据)那么就可以进行下一步了,如果(没有)那就请注意提示的信息。

4.我们开始写后台的代码

(1)首先第一步我们得到我们需要的四个参数,并拼接

    Timestamp :时间戳(如上的代码可以获取)
    app_id:填写自己的APP方的id
    App_poi_code:填写自己的门店ID

剩下最重要的签名sig,现在我们知道生成签名呢需要三个参数,好我们开始拼接以上三个参数
在这里插入图片描述

// 美团商品列表的路径
String url = "https://waimaiopen.meituan.com/api/v1/food/list";
// 拼接参数
String md5Input = "";
md5Input += "app_id=" + MeituanWMService.MTAPPID + "&";
md5Input += "app_poi_code=" + "****" + "&";
md5Input += "timestamp=" + String.valueOf(timestamp);

(2)有了路径之后我们开始生成签名(代码如下密钥是必填的)

在这里插入图片描述
具体生成方法如下

   public static String genSig(String baseUrl) throws ApiSysException {
	    String str = null;

	try {
		MessageDigest md = MessageDigest.getInstance("MD5");
		str = byte2hex(md.digest(baseUrl.getBytes("utf-8")));
		return str;
	} catch (NoSuchAlgorithmException var3) {
		throw new ApiSysException(ErrorEnum.SYS_ERR);
	} catch (UnsupportedEncodingException var4) {
		throw new ApiSysException(ErrorEnum.SYS_ERR);
	}
}

private static String byte2hex(byte[] b) {
	StringBuffer buf = new StringBuffer();

	for (int offset = 0; offset < b.length; ++offset) {
		int i = b[offset];
		if (i < 0) {
			i += 256;
		}

		if (i < 16) {
			buf.append("0");
		}

		buf.append(Integer.toHexString(i));
	}

	return buf.toString();
}

(3)得到签名之后,继续拼接

在这里插入图片描述

(4)解析路径

// 解析路径
str2 = MessageController.is(url + "?" + md5Input, "utf-8");

具体生成方法如下

 public static String is(String strURL, String charset) {
	String str = getContentFromUrl(strURL, charset);
	return str;
}

/**
 * 通过 url网址 从网页上获取网页内容
 * 
 * @param myUrl(链接地址)
 * @param charset(字符编码)
 * @return (返回字符串)
 */
public static String getContentFromUrl(String myUrl, String charset) {
	StringBuffer sb = new StringBuffer();
	URL url;
	try {
		url = new URL(myUrl);
		URLConnection conn = url.openConnection();
		InputStream is = conn.getInputStream();
		Scanner sc = new Scanner(is, charset);
		while (sc.hasNextLine()) {
			sb.append(sc.nextLine()).append("\r\n");
		}
		sc.close();
		is.close();
	} catch (MalformedURLException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return sb.toString();
}

(5)得到内容之后,因为格式不正确,我们还要继续的截取(可以在优化)

str2 = str2.substring(8, str2.length() - 3);

(6)得到内容之后,我们要解析,放到实体类当中,创建实体类

public class MeituanApidata {

private Long app_food_code;
private String app_poi_code;
private Float box_num;
private Float box_price;
private String category_name;
private Integer ctime;
private String description;
private Integer is_sold_out;
private Integer max_order_count;
private Integer min_order_count;
private String name;
private String picture;
private Float price;
private Integer sequence;
private String skus;
private String unit;
private Integer utime;
Get set....

}

(7)创建完成之后进行解析

在这里插入图片描述

   // 解析json
   List taskNodes = JSONArray.parseArray(str2, MeituanApidata.class);

(8)携带taskNodes 调用service

在这里插入图片描述
我们注意到响应的参数中还有一个json数组
跟美团API对接,以及生成签名,同步数据到数据库_第5张图片
我们可以在创建一个实体类,进行嵌套for循环,得到我们skus中的值
跟美团API对接,以及生成签名,同步数据到数据库_第6张图片
**

剩下的就是我们的常规代码没什么难度了,如果有什么不懂的可以再问我!!!

**

你可能感兴趣的:(跟美团API对接,以及生成签名,同步数据到数据库)