|
- package com.simple.utils;
-
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import okhttp3.*;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- import java.io.IOException;
- import java.math.BigDecimal;
- import java.security.MessageDigest;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
-
- /**
- * @Title: OpenapiCaller
- * @Package: cn.etcp.openplatform.service
- * @Description: ETCP开放平台接口调用示例
- * @author: zhiyong.fan
- * @date: 2018/3/8 17:41
- * @version: V1.0
- */
- public class ETCPUtil {
-
- private static final Logger logger = LoggerFactory.getLogger(ETCPUtil.class);
-
- /**
- * 域名地址
- */
- private static final String domain = "http://mapi.test.etcp.cn";
-
- //
- private static final String appId = "FMLK";
-
- private static final int payType = 5;
-
- /**
- * 商户号 测试时请换成ETCP开放平台为商户平台分配的商户号
- */
- private static final String merchantNo = "C7AEAF80BA8C44ADB42F3DB3CBC7D18A";
-
- /**
- * 商户密钥 测试时请换成ETCP开放平台为商户平台分配的商户密钥
- */
- private static final String merchantKey = "C292FFC7DCFB46AFB02792CD43F6DCC7";
-
- /**
- * 接口服务版本号
- */
- private static final String version = "1.0.0";
-
- /**
- * 6.1. 联合登录
- */
- private static final String userSigninUrl = "/merchant/open/{version}/openapi/usersigin";
-
- /**
- * 7.1. 车牌绑定
- */
- private static final String bindCarUrl = "/merchant/open/{version}/openapi/bindcar";
-
- /**
- * 7.2. 车牌解绑
- */
- private static final String unbindCarUrl = "/merchant/open/{version}/openapi/unbindcar";
-
- /**
- * 7.3. 车牌认证
- */
- private static final String carAuthUrl = "/merchant/open/{version}/openapi/carauth";
-
- /**
- * 7.4. 车牌找回
- */
- private static final String carRetrieveUrl = "/merchant/open/{version}/openapi/carretrieve";
-
- /**
- * 7.5. 已绑车辆信息查询
- */
- private static final String carNumUrl = "/merchant/open/{version}/openapi/carnum";
-
- /**
- * 8.1. 停车费查询
- */
- private static final String orderUnpayUrl = "/merchant/open/{version}/openapi/orderunpay";
-
- /**
- * 8.2. 优惠券查询
- */
- private static final String couponListUrl = "/merchant/open/{version}/openapi/couponlist";
-
- /**
- * 8.3. 历史停车查询
- */
- private static final String orderHistoryUrl = "/merchant/open/{version}/openapi/orderhistory";
-
- /**
- * 9.1. 主动支付(ETCP 收款)
- */
- private static final String orderpayUrl = "/merchant/open/{version}/openapi/orderpay";
-
- /**
- * 9.2. 主动支付(商户平台收款)
- */
- private static final String orderPaidUrl = "/merchant/open/{version}/openapi/orderpaid";
-
- /**
- * 10.1. 签约地址获取
- */
- private static final String signUrl = "/merchant/open/{version}/withhold/sign";
-
- /**
- * 10.2. 签约状态查询
- */
- private static final String statusUrl = "/merchant/open/{version}/withhold/status";
-
- /**
- * 11.1. 车场信息查询
- */
- private static final String parkingInfoUrl = "/merchant/open/{version}/openapi/surroundingparking";
-
- /**
- * 11.2. 车场状态查询
- */
- private static final String parkingStatusUrl = "/merchant/open/{version}/openapi/parkingstatus";
-
- /**
- * 12.1. 坏账查询
- */
- private static final String getDebtUrl = "/merchant/open/{version}/openapi/getdebt";
-
- /**
- * 12.2. 坏账清缴
- */
- private static final String repayDebtUrl = "/merchant/open/{version}/openapi/repaydebt";
-
- /**
- * 13.1. 商家优免券模板查询
- */
- private static final String bCouponListUrl = "/merchant/open/{version}/openapi/b/coupon/list";
-
- /**
- * 13.2. 商家优免券发放
- */
- private static final String bCouponRecordUrl = "/merchant/open/{version}/openapi/b/coupon/record";
-
- /**
- * 14.1. 车辆进出场模拟接口
- */
- private static final String bCarSimulationUrl = "/merchant/open/{version}/openapi/car/simulation";
-
- private final OkHttpClient client = new OkHttpClient();
-
- private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
-
- /** 错误码
- * 0 成功
- * 1 失败
- * 2 服务器异常
- * 3 时间戳超时
- * 4 签名校验非法
- * 5 没有找到商户密钥
- * 6 参数错误
- * 7 更新订单失败
- * 8 生产订单失败
- * 20100 操作失败
- * 20101 无效 token
- * 20102 缺少必要参数
- * 20106 参数错误
- * 20201 手机号错误
- * 20202 获取验证码失败
- * 20203 手机验证码错误
- * 20206 支付金额与应付金额不匹配
- * 20207 60s 内只能发送一次验证码
- * 20208 APP 未有该权限
- * 20209 优惠金额与应付金额不匹配
- * 20301 签约失败
- * 20302 签约成功
- * 20401 无效车架号
- * 20407 车辆信息不匹配
- * 20408 操作失败,请稍后重试
- * 20501 操作失败,请稍后重试
- * 20602 returnUrl 为空
- * 20603 未查询到费用
- * 20604 请先清偿坏账
- * 20605 synId 错误
- * 20606 待支付费用为 0,无需支付
- * 20607 支付链接失效
- * 20608 查费失败
- * 20701 appId 错误
- * 20801 未绑定该车辆
- * 20802 该车辆已被他人绑定
- * 20803 绑定数量超限
- * 20804 30 天内最多绑定 4 辆不同的车
- * 20805 在场车辆不可解绑
- * 20901 车辆不在场
- * 20902 车场不支持电子支付
- * 20903 没有车场查费权限
- * 20904 用户未绑定该查费车牌
- * 20905 查询费用异常
- * 20906 用户不存在
- * 20907 商户未配置查费车场
- * 20908 长租车,费用为 0
- * 20909 车牌错误
- * 21001 查询失败
- * 21002 请稍后再试
- * 21003 未查询到坏账
- * 21004 错误支付类型
- * 21101 签约号已存在
- */
-
- public static void main(String[] args) {
- ETCPUtil caller = new ETCPUtil();
- String ret = "";
- JSONObject objret = null;
- String etcpToken = "44529274-7a31-4fb5-a35d-91d5b0be8641";
- String carNumber = "京D12345";
- String parkId = "Wj7YdvqyiYM=";
- String businessId = "testasfsfsd";
- //caller.carSimulation(appId, merchantNo, merchantKey, version, carNumber);
-
- caller.getBCouponList(domain, merchantNo, merchantKey, version, parkId, businessId);
-
- // 联合登录测试
- /*ret = caller.userSignin(appId, merchantNo, merchantKey, version, "13910154397");
-
- objret = JSON.parseObject(ret);
- if (objret.getIntValue("code") != 0)
- return;
-
- etcpToken = objret.getJSONObject("data").getString("token");
- System.out.println(etcpToken);
-
-
- // 绑定车牌查询
- ret = caller.carNum(merchantNo, merchantKey, version, etcpToken);
- System.out.println(ret);
- objret = JSON.parseObject(ret);
- if (objret.getIntValue("code") != 0)
- return;
- JSONObject data = objret.getJSONObject("data");
- if (data.getIntValue("number") <= 0) {
- // 车牌绑定测试
- ret = caller.bindCar(etcpToken, carNumber, null, merchantNo, merchantKey, version);
- objret = JSON.parseObject(ret);
- if (objret.getIntValue("code") != 0)
- return;
- }
- JSONArray carArry = data.getJSONArray("carList");
- carNumber = JSON.toJSONString(carArry.get(0));
- carNumber = carNumber.substring(1, carNumber.length() -1);
- System.out.println(carNumber);
- // 停车费查询
- ret = caller.orderUnpay(appId, merchantNo, merchantKey, version, etcpToken, carNumber);
- System.out.println(ret);
- objret = JSON.parseObject(ret);
- if (objret.getIntValue("code") != 0)
- return;
- JSONArray payArr = objret.getJSONArray("data");
- JSONObject payObj = payArr.getJSONObject(0);
- String orderId = payObj.getString("orderId");
- // 微信h5支付
- ret = caller.orderPay(merchantNo, merchantKey, version, etcpToken, orderId, "http://test.cn", null);
- System.out.println(ret);
- */
- // 车牌解绑测试
- //caller.unbindCar(merchantNo, merchantKey, version, etcpToken, carNumber);
-
-
- //String orderId = "867C6F2F-4F3A-4767-890E-BA7F53F9C601";
- //caller.orderPay(etcpToken, 5, orderId, "test.cn", null);
-
- // 支付完成通知测试
- /*caller.orderPaid(etcpToken, "51C3E00A-4F87-43FB-A71B-C1287ED956CB",
- "201803120000001", BigDecimal.valueOf(8.85), "2018-03-12 11:58:31",
- "FSED9JvxgAU6XJUd8YRF5f7OuzyQ/lGJch0h8dVVkNaHUpPISCLBshnn0AIoEdIdi2aQMOrrcmdVz2Smy+UbQ8pXl95Mv50aPNnUgaDlxSDqHQ8iOD6FT5XV7ikozZ0800CJKDkvQrmCZS2O21G+xg==",
- "ETCP");*/
- }
-
- public static int getPayType() {
- return payType;
- }
-
- /**
- * 6.1. 联合登录
- *
- * @param appId appId(非空)
- * @param merchantNo merchantNo(非空)
- * @param merchantKey merchantKey(非空)
- * @param version version(非空)
- * @param mobilePhone 手机号(非空)
- * @return 联合登录响应信息
- * {
- * "code": 0,
- * "data": {
- * "token": "0b59582d-ea6f-4bf1-a570-e803cc24ebe0"
- * },
- * "message": "ok"
- * }
- */
- public String userSignin(String baseUrl, String appId, String merchantNo, String merchantKey, String version,
- String mobilePhone) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("appId", appId);
- jsonObject.put("mobilePhone", mobilePhone);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + userSigninUrl.replaceAll("\\{version}", version), data, sign,
- timeStamp, merchantNo);
- }
-
- /**
- * 7.1. 车牌绑定
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param plateNumber 车牌号(非空)
- * @param plateColor 车牌颜色(可空)
- * @return 绑牌响应信息
- * {
- * "code": 0,
- * "message": "ok"
- * }
- */
- public String bindCar(String baseUrl, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String plateNumber, String plateColor) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("plateNumber", plateNumber);
- if ("1".equals(plateColor) || "2".equals(plateColor) || "3".equals(plateColor)
- || "4".equals(plateColor)) {
- jsonObject.put("plateColor", plateColor);
- }
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + bindCarUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 7.2. 车牌解绑
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param plateNumber 车牌号(非空)
- * @return 车牌解绑响应信息
- * {
- * "code": 0,
- * "message": "ok"
- * }
- */
- public String unbindCar(String baseUrl, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String plateNumber) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("plateNumber", plateNumber);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + unbindCarUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 7.3. 车牌认证
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param carFrameNum 车架号(非空)
- * @param plateNumber 车牌号(非空)
- * @param carEngineNum 发动机号(非空)
- * @return 车牌解绑响应信息
- * {
- * "code": 0,
- * "message": "ok"
- * }
- */
- public String carAuth(String baseUrl, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String carFrameNum, String plateNumber, String carEngineNum
- ) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("carFrameNum", carFrameNum);
- jsonObject.put("plateNumber", plateNumber);
- jsonObject.put("carEngineNum", carEngineNum);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + carAuthUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 7.4. 车牌找回
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param carFrameNum 车架号(非空)
- * @param plateNumber 车牌号(非空)
- * @param carEngineNum 发机号(非空)
- * @param plateColor 车牌颜色(1 蓝 2 黑 3 黄 4 白)
- * @return 车牌找回响应信息
- * {
- * "code": 0,
- * "message": "ok"
- * }
- */
- public String carRetrieve(String baseUrl, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String carFrameNum, String plateNumber, String carEngineNum, String plateColor ) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("carFrameNum", carFrameNum);
- jsonObject.put("plateNumber", plateNumber);
- jsonObject.put("carEngineNum", carEngineNum);
- if (!StringUtils.isBlank(plateColor))
- jsonObject.put("plateColor", plateColor);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + carRetrieveUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 7.5. 已绑车辆信息查询
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @return 已绑车辆信息查询响应信息
- * {
- * "code": 0,
- * "msg": "ok",
- * "data": {
- * "number": 3,
- * "carList": [
- * "晋 BMZ105",
- * "云 C12345"
- * ]
- * }
- * }
- */
- public String carNum(String baseUrl, String merchantNo, String merchantKey, String version,
- String etcpToken) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doGet(baseUrl + carNumUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 8.1. 停车费查询
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param plateNumber 车牌号(非空)
- * @param appId appId(可空)
- * @return 停车费查询响应信息
- */
- public String orderUnpay(String baseUrl,
- String appId, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String plateNumber) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("plateNumber", plateNumber);
- if (appId != null && appId.length() > 0) {
- jsonObject.put("appId", appId);
- }
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doGet(baseUrl + orderUnpayUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 8.2. 优惠券查询
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @param lastCode 上一分页代码(可空)
- * @param pageSize 1-200 之间的分页每页数量(非空)
- * @return 停车费查询响应信息
- */
- public String couponList(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String etcpToken,
- String lastCode, String pageSize) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- if (!StringUtils.isBlank(lastCode))
- jsonObject.put("lastCode", lastCode);
- jsonObject.put("pageSize", pageSize);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doGet(baseUrl + couponListUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 8.3.历史停车查询
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin}) (非空)
- * @return 停车费查询响应信息
- */
- public String orderHistory(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String etcpToken) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doGet(baseUrl + orderHistoryUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 9.1. 主动支付(ETCP 收款)
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin})(非空)
- * @param orderId 停车记录ID ({@link ETCPUtil#orderUnpay})(非空)
- * @param returnUrl 外部支付流水号(商户平台生成)(非空)
- * @param couponCode 支付金额 ({@link ETCPUtil#orderUnpay})(非空)
- * @return
- */
- public String orderPay(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String etcpToken, String orderId,
- String returnUrl, String couponCode) {
- // payType 支付方式(1 微信公众号内支付 2 支付宝 H5 支付 3 微信二维码 4 支付宝二维码 5 微信 H5)(非空)
- int payType = 5;
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("payType", payType);
- jsonObject.put("synId", orderId);
- jsonObject.put("returnUrl", returnUrl);
- if (couponCode != null && couponCode.length() > 0) {
- jsonObject.put("couponCode", couponCode);
- }
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + orderpayUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 9.2. 主动支付(商户平台收款)
- *
- * @param etcpToken 商户平台调用联合接口获取的token({@link ETCPUtil#userSignin})(非空)
- * @param orderId 停车记录ID ({@link ETCPUtil#orderUnpay})(非空)
- * @param externalOrderId 外部支付流水号(商户平台生成)(非空)
- * @param payment 支付金额 ({@link ETCPUtil#orderUnpay})(非空)
- * @param payTime 支付时间, 格式:yyyy-MM-dd HH:mm:ss(非空)
- * @param verificationInfo 验证信息串 ({@link ETCPUtil#orderUnpay})(非空)
- * @param appId appId(可空)
- * @return
- */
- public String orderPaid(String baseUrl,
- String appId, String merchantNo, String merchantKey, String version,
- String etcpToken,
- String orderId, String externalOrderId,
- BigDecimal payment, String payTime, String verificationInfo) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("orderId", orderId);
- jsonObject.put("externalOrderId", externalOrderId);
- jsonObject.put("payment", payment);
- jsonObject.put("payTime", payTime);
- jsonObject.put("verificationInfo", verificationInfo);
- if (appId != null && appId.length() > 0) {
- jsonObject.put("appId", appId);
- }
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + orderPaidUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 11.2. 车场状态查询
- *
- * @param parkingId 车场ID(非空)
- * @return 车场状态查询响应信息
- */
- public String parkingStatusUrl(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String parkingId) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("parkingId", parkingId);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 12.1. 坏账查询
- *
- * @param etcpToken
- * @return 车场状态查询响应信息
- */
- public String getDebt(String baseUrl,
- String appId, String merchantNo, String merchantKey, String version,
- String etcpToken, String carNumber) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("appId", appId);
- jsonObject.put("plateNumber", carNumber);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 12.2. 坏账清缴
- *
- * @param etcpToken
- * @param
- * @param returnUrl
- * @return 车场状态查询响应信息
- */
- public String repayDebt(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String etcpToken, String returnUrl) {
- // payType(1:支付宝 2:微信H5)
- int payType = 2;
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("payType", payType);
- jsonObject.put("returnUrl", returnUrl);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + parkingStatusUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 13.1. 商家优免券模板查询
- *
- * @return 商家优免券模板查询结果
- */
- public String getBCouponList(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String parkId, String businessId) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("parkId", parkId);
- jsonObject.put("businessId", businessId);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + bCouponListUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 13.2. 商家优免券发放
- *
- * @param etcpToken
- * @return 商家优免券发放结果
- */
- public String bCouponRecord(String baseUrl,
- String merchantNo, String merchantKey, String version,
- String etcpToken,
- String parkId, String businessId, String carNumber, String couponFreeId) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("token", etcpToken);
- jsonObject.put("parkId", parkId);
- jsonObject.put("businessId", businessId);
- jsonObject.put("vehicleNo", carNumber);
- jsonObject.put("couponFreeId", couponFreeId);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + bCouponRecordUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- /**
- * 14.1. 车辆进出场模拟接口
- *
- * @param appId, plateNumber
- * @return 车场状态查询响应信息
- */
- public String carSimulation(String baseUrl,
- String appId, String merchantNo, String merchantKey, String version,
- String plateNumber) {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("appId", appId);
- jsonObject.put("plateNumber", plateNumber);
-
- String data = jsonObject.toJSONString();
- String timeStamp = dateTimeFormatter.format(LocalDateTime.now());
- String sign = genSign(data, merchantKey, timeStamp);
-
- return doPost(baseUrl + bCarSimulationUrl.replaceAll("\\{version}", version),
- data, sign, timeStamp, merchantNo);
- }
-
- private String doPost(String url, String data, String sign, String timeStamp, String merchantNo) {
- logger.info("请求url地址:{}, 请求参数为:data={}, sign={}, time_stamp={}, merchant_no={}", url, data,
- sign, timeStamp, merchantNo);
- RequestBody body = new FormBody.Builder().add("data", data).add("sign", sign)
- .add("time_stamp", timeStamp).add("merchant_no", merchantNo).build();
- Request request = new Request.Builder().url(url).post(body).build();
- try (Response response = client.newCall(request).execute()) {
- String responseStr = response.body().string();
- logger.info("post接口响应信息为:{}", responseStr);
- return responseStr;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- private String doGet(String sourceUrl, String data, String sign, String timeStamp, String merchantNo) {
- logger.info("请求url地址:{}, 请求参数为:data={}, sign={}, time_stamp={}, merchant_no={}", sourceUrl,
- data, sign, timeStamp, merchantNo);
- HttpUrl url = HttpUrl.parse(sourceUrl).newBuilder().addQueryParameter("data", data)
- .addQueryParameter("sign", sign).addQueryParameter("time_stamp", timeStamp)
- .addQueryParameter("merchant_no", merchantNo).build();
- Request request = new Request.Builder().url(url).build();
- try (Response response = client.newCall(request).execute()) {
- String responseStr = response.body().string();
- logger.info("get请求接口响应信息为:{}", responseStr);
- return responseStr;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- // 签名
- private String genSign(String param, String merchantKey, String time) {
- String preparedString = new StringBuilder(param).append(merchantKey).append(time).toString();
- return md5Encode(preparedString.replaceAll("[ \r\t\n]", ""));
- }
-
- private String md5Encode(String content) {
- StringBuilder sb = new StringBuilder();
- try {
- if (content == null || content.length() == 0) {
- return null;
- }
- MessageDigest digestInstance = MessageDigest.getInstance("MD5");
- digestInstance.update(content.getBytes("UTF-8"));
- byte[] md = digestInstance.digest();
- for (int i = 0; i < md.length; ++i) {
- int val = md[i] & 0xff;
- if (val < 16) {
- sb.append("0");
- }
- sb.append(Integer.toHexString(val));
- }
- } catch (Exception ex) {
-
- }
- return sb.toString().toUpperCase();
- }
-
- }
|