做项目的时候,有个数据是调用的别的公司的接口,需要从接口里面汇总出需要的数据
本来是个简单的业务查到接口里的所有数据,别人公司提供的接口在分页的时候pageSize固定在了1-1000之间,所以就要分页查询 到这里也都没什么问题 遇到的bug是在签名的时候一直不通过,
private Map<String, Object> getBaseInfo1(Integer pageIndex){ long timeMillis = System.currentTimeMillis(); Date now = new Date(); //获取当前时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String nowStr = sdf.format(now)+" 00:00:00"; //得到今天凌晨时间 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("appId", app_id); paramMap.put("parkId", park_id); paramMap.put("startTime", nowStr); paramMap.put("ts", timeMillis); paramMap.put("reqId", timeMillis); paramMap.put("pageIndex", pageIndex); paramMap.put("pageSize",1000); paramMap.put("serviceCode", "getXXXXX"); return paramMap; }
private Map<String, Object> getXXXXXXX() { Map<String, Object> rs = new HashMap<>(); List<Map<String, Object>> list = new ArrayList<>(); try { String url = ipportF + "wec/GetXXXXXXX"; int pageIndex = 1; List<Map<String, Object>> detailList = new ArrayList<>(); do { Map<String, Object> paramMap = getBaseInfo1(pageIndex); JSONObject jobj = new JSONObject(getBaseInfo1(pageIndex)); paramMap.put("key", SignUtils.paramsSign(jobj, app_key)); HashMap<String, Object> header = new HashMap<>(); header.put("version", "1.0.0"); detailList = getList1(url, paramMap, header); list.addAll(detailList); ++pageIndex; } while (detailList.size() > 0);
后来debug排查了好久才发现 原来是调用了两次这个方法 就导致两次获取到的毫秒数不一样,也就是在签名的时候key值不一样了,签名能通过才怪.....
修改后:
Map<String, Object> paramMap = getBaseInfo1(pageIndex); JSONObject jobj = new JSONObject(paramMap);