Blame view

app/src/main/java/com/ectrip/checkincar/net/HttpQueryApi.java 2.23 KB
0fd093a2   李进   初始提交:手持车牌核销应用
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);
          }
      }
  }