1.获取17Track密匙,我是定义在application.yml中
//17track秘钥
@Value("${api.apiKey}")
private String apiKey;
2.
/**
* 注册信息 (需要先注册单号) Util方法(传入单号注册)
* */
public void register(String trackingNumber) throws IOException {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
String value = createJsonBody(trackingNumber);
RequestBody body = RequestBody.create(mediaType, value);
Request request = new Request.Builder()
.url("https://api.17track.net/track/v2.2/register")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("17token", apiKey)
.build();
Response response = client.newCall(request).execute();
response.body();
}
Util 查询单号的 转为Java 对象 ,我这里使用的 objectMapper 映射到实体类
/**
* 查询信息
* @param trackingNumber
* @throws IOException
*/
// public String apiKey = "25D01DA1750635585B14280CE4208A21";
public ResponseResult aaa(String trackingNumber) throws IOException {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
String jsonBody = createJsonBody(trackingNumber);
RequestBody body = RequestBody.create(mediaType, jsonBody);
Request request = new Request.Builder()
.url("https://api.17track.net/track/v2.2/gettrackinfo")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("17token", apiKey)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
String responseBody = response.body().string();
System.out.println("Response: " + responseBody);
ObjectMapper objectMapper = new ObjectMapper();
//把josn字符串 转为对应的实体类
ResponseResult responseResult = objectMapper.readValue(responseBody, ResponseResult.class);
return responseResult;
} else {
throw new IOException("Error: " + response.code() + " " + response.message());
}
}
public static String createJsonBody(String trackingNumber) {
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("number", trackingNumber);
jsonArray.put(jsonObject);
return jsonArray.toString();
}
3. 整体调用
//controller
@PostMapping("/track")
public R track17(@RequestBody ResponseResultDTO dto) throws IOException {
return R.ok(consignerService.track(dto),"成功");
}
public TrackVO track(ResponseResultDTO dto) throws IOException {
TrackVO vo = new TrackVO();
if (Objects.equals(dto, null)) {
throw new IOException("订单号不能为空");
}
//注册单号
track17Util.register(dto.getTrackingNumber());
ResponseResult aaaed = track17Util.aaa(dto.getTrackingNumber());//查询单号
for (Accepted accepted : aaaed.getData().getAccepted()) {
String number = accepted.getNumber();//订单号
TrackInfo trackInfo = accepted.getTrack_info();
ShippingInfo shippingInfo = trackInfo.getShipping_info();
String countryF = shippingInfo.getShipper_address().getCountry();//发件
String countryS = shippingInfo.getRecipient_address().getCountry();//收件
String day = trackInfo.getTime_metrics().getDays_after_order();
String from = trackInfo.getTime_metrics().getEstimated_delivery_date().getFrom();
LatestEvent latestEvent = trackInfo.getLatest_event();
String date = latestEvent.getTime_raw().getDate();
String time = latestEvent.getTime_raw().getTime();
String description = latestEvent.getDescription();
String location = latestEvent.getLocation();
String status = trackInfo.getLatest_status().getStatus();
//处理需求