开放接口
  1. 开放接口
开放接口
  • 开放接口
    • 0.0 通用说明
    • 0.1 签名方法
    • 0.2 场景
    • 1.1、【车主车类】获取车类
      POST
    • 1.2、【车主车类】月卡会员接口 新增、修改、删除
      POST
    • 1.3、【车主车类】月租车查询接口
      POST
    • 1.4、【车主车类】查询指定车辆续费金额
      POST
    • 3.1、【优惠券】商户获取自有优惠券列表
      POST
    • 3.2、【优惠券】商户发券,返回二维码
      POST
    • 3.3、【优惠券】商户发券,指定车牌
      POST
    • 3.4、【优惠券】通用发放优惠券
      POST
    • 4.1、【订单价格】在场订单查询价格 v2
      POST
    • 10.1、【订单】车辆入场记录查询
      POST
    • 10.2、【订单】车辆出场记录查询
      POST
    • 12、【通道】获取车场通道列表
      POST
    • 13、【相机控制】远程开关闸
      POST
    • 14.1、【黑名单】黑名单添加
      POST
    • 14.2、【黑名单】黑名单删除
      POST
    • 14.3、【黑名单】黑名单列表
      POST
    • 15.1、【无牌车】无牌车入场(支持有牌车)
      POST
    • 15.2、【无牌车】无牌车出场
      POST
    • 16.2、【通知】预付通知v2
      POST
    • 17、【通知】出口付通知v2
      POST
    • 20、【充电减免】上传充电订单信息
      POST
    • 22.1、 【访客】访客新增
      POST
  1. 开放接口

0.1 签名方法

签名方式

appId和appSecret由平台提供,appId用于标识访问者的身份;appSecret是用于加密签名字符串和服务器端验证签名字符串的密钥,不传输,必须严格保密。
在请求接口前,按照下面的方法对请求进行签名处理:

1. 按照参数名称的字典顺序对请求中所有的请求参数(包括URL?后面的部分以及body部分,但不能包括appId、appSecret、timestamp)进行排序。
2. 计算signStr = appId+timestamp+appSecret+body中的所有key-value(中间不需要符号),例如:

appId : tDc6zHpf(找技术支持提供)
appSecret :  1d85aa21e9d08d2ff4145f49d73aa77d3bd981db(找技术支持提供)
timestamp : 1622806861000   
url:{{host}}/monthCard/info?appId=&timestamp=&carNumber=藏ZAA001&parkId=1376868353461542914

signStr = appIdtDc6zHpftimestamp1622806861000appSecret1d85aa21e9d08d2ff4145f49d73aa77d3bd981dbcarNumber藏ZAA001parkId1376868353461542914

其中:appIdtDc6zHpftimestamp1622806861000appSecret1d85aa21e9d08d2ff4145f49d73aa77d3bd981db是固定位置,其他参数才参与排序后拼接

3. 将signStr进行md5后获得sign值,再转成大写得到9264C99ED4A947F25FF2C9127CF06332,将sign=9264C99ED4A947F25FF2C9127CF06332拼接再url后面,最终请求的url是

GET请求:{{host}}/monthCard/info?appId=&timestamp=&carNumber=藏ZAA001&parkId=1376868353461542914&sign=9264C99ED4A947F25FF2C9127CF06332
POST请求:{{host}}/monthCard/info?appId=&timestamp=&sign=A67ED3CEF877C5A790DBA41F8B0D0B87
    body参数
    {
    "carNumber":"藏ZAA001",
    "parkId":"1376868353461542914"
    }



加密算法参考《hutool》

<加密解密工具-SecureUtil>


java示例

/**
 * @param params 根据key排序后的参数集合
 * @param timestamp 时间戳
 * @param appId
 * @param appSecret
 * @return 签名结果
 */
public static String getParamsSign(SortedMap<String, String> params, String timestamp, String appId, String appSecret) {
	Set<Map.Entry<String, String>> entries = params.entrySet();
	Iterator<Map.Entry<String, String>> iterator = entries.iterator();

	StringBuilder valueStr = new StringBuilder();
	valueStr.append("appId");
	valueStr.append(appId);
	valueStr.append("timestamp");
	valueStr.append(timestamp);
	valueStr.append("appSecret");
	valueStr.append(appSecret);
	while (iterator.hasNext()) {
		Map.Entry<String, String> entry = iterator.next();
		// 签名结果字段不处理
		if (StrUtil.equalsAnyIgnoreCase(entry.getKey(), new String[]{"sign", "appId", "timestamp"})) {
			continue;
		}
		String value = StrUtil.trimToEmpty(entry.getValue());
		if (value == null) {
			value = "";
		}
		if (StrUtil.isNotEmpty(value)) {
			valueStr.append(entry.getKey());
			valueStr.append(value);
		}
	}

	String md5Result = SecureUtil.md5(valueStr.toString()).toUpperCase();
	log.info("MD5结果数据={}, 待MD5源数据={},待加密对象={}", md5Result, valueStr, JSON.toJSONString(params));
	return md5Result;
}

修改于 2024-08-19 03:12:28
上一页
0.0 通用说明
下一页
0.2 场景
Built with