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); } } }