HttpQueryApi.java 2.23 KB
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);
        }
    }
}