HttpQueryApi.java
2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.ectrip.checkincar.net;
import com.ectrip.checkincar.core.prefs.AppPrefs;
import com.ectrip.checkincar.model.QueryResult;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* 真实预约查询后台:GET {baseUrl}/tdos/consumeOrder_/appquery
* 参数 licensePlate(车牌经 Base64 编码后 URL 编码)。
* 免登录接口,只查不消费订单,用于核销前弹窗展示预约详情。
*/
public class HttpQueryApi implements QueryApi {
private static final String PATH = "/tdos/consumeOrder_/appquery.do";
private final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS) // 查询响应通常很快,稍短
.writeTimeout(5, TimeUnit.SECONDS)
.build();
@Override
public QueryResult query(String plateNo) throws Exception {
String base = AppPrefs.getBaseUrl();
while (base.endsWith("/")) {
base = base.substring(0, base.length() - 1);
}
String plate = plateNo == null ? "" : plateNo.trim();
// 车牌先 Base64 编码再 URL 编码(与核销接口一致)
String encodedPlate = android.util.Base64.encodeToString(
plate.getBytes("UTF-8"), android.util.Base64.NO_WRAP);
String url = base + PATH + "?licensePlate=" + java.net.URLEncoder.encode(encodedPlate, "UTF-8");
Request httpRequest = new Request.Builder()
.url(url)
.get()
.build();
try (Response response = client.newCall(httpRequest).execute()) {
String body = response.body() != null ? response.body().string() : "";
// 调试日志
System.out.println("HttpQueryApi resp code=" + response.code()
+ " url=" + url
+ " bodyLen=" + body.length()
+ " body=" + (body.length() > 500 ? body.substring(0, 500) + "..." : body));
if (!response.isSuccessful()) {
return QueryResult.error("后台查询返回 HTTP " + response.code());
}
return QueryResult.fromServerJson(body);
}
}
}