酒店

下单前校验更新时间:2019/11/07 10:26

涉及接口 hotel.data.validate
demo语言: Java
开发环境:
前端  jQuery类库、layui、 bootstrap
后端  jdk1.7以上


下单前将提交的数据进行校验


请求url

酒店详情页,将酒店列表页的日期、hotelid、选择rateplan和房间数量等等参数传入
var validateUrl = "/api/order/checkProduct"; // 校验请求controller

var validateReq = {
    "arrivalDate": arrivalDate,
    "departureDate": $("#inputDepartureDate").val(),
    "hotelId": $("#inputHotelId").val(),
    "roomTypeID": $("#inputRoomTypeId").val(),
    "ratePlanId": $("#inputRatePlanId").val(),
    "earliestArrivalTime": (nextHour.substring(0,1) == "0"
        ? arrivalNextDate: arrivalDate) + " " + nextHour + ":00",
    "latestArrivalTime": ($('#btnArrivalTime').attr("value").substring(0,1) 
        == "0"? arrivalNextDate: arrivalDate) + " " + $('#btnArrivalTime').attr("value"),
    "numberOfRooms": $("#btnRoomNum").attr("value"),
    "totalPrice": parseFloat($('#inputTotalRate').val())
};


js请求后端

提交后端后返回校验结果,如果校验通过,则继续下单,如果没通过则提示客人校验失败
// 请求校验参数
var validateResult = ajaxCommonForJson(validateUrl, "POST", validateReq);

// 通过则继续下单,否则提示错误
if (validateResult != null) {
    if (validateResult.validate) {
        if (validateResult.message != null && validateResult.message != "") {
            if( !confirm( validateResult.message)) {
                return;
            }
        }
    } else {
        alert(validateResult.errorMessage);
        return;
    }
}


后端调用

后端通过http协议调用艺龙的hotel.data.validate接口
public class HotelDataValidateApi {
    private static double version = 1.50;
    private static EnumLocal locale = EnumLocal.zh_CN;
    private static boolean isHttps = false;
    ...
    ...
    
    /**
     * 通过http工具类调用艺龙接口,将前端参数拼接为URL
     */
    public HotelValidateResult hotelValidate(ValidateCondition condition,
        String userName, String appKey, String secretKey) {
    
        HotelValidateResult result = new HotelValidateResult();
        String url = "";
        String responseData = "";
        try{
            BaseRequest<ValidateCondition> req = new BaseRequest<ValidateCondition>();
            req.Version = version;
            req.Local = locale;
            req.Request = condition;
            
            //请求参数转换为Json字符串
            String str = JsonUtil.entity2Json(req);
            
            //产生签名
            long epoch = System.currentTimeMillis()/1000;
            String sig = Tool.md5(epoch + Tool.md5(str + appKey) + secretKey);
            
            //产生请求链接
            url = "http"+(this.isHttps ? "s": "")+ "://" + serverHost 
                + "/rest?format=json&method=hotel.data.validate";
            url += "&user="+ userName +"&timestamp=";
            url += epoch;
            url += "&signature=";
            url += sig;
            url += "&data=" + Tool.encodeUri(str);
            
            //发送请求
            responseData = HttpUtil.Send("GET", url, "", "application/json");
            
            //返回值处理
            result = JsonUtil.jsonToObject(responseData, HotelValidateResult.class);
        } catch (Exception e) {
            log.info("[HotelValidateApi] 异常: " + e);
            log.info("发送的url: " + url);
            log.info("返回值: " + responseData);
        }
        return result;
    }
    ...
    ...
}


效果展示

image.png