ChargingStationHTTPAPI
    ChargingStationHTTPAPI
    • 桩企接入流程请先读我
    • 站点数据管理
      • 充电站管理
        • 提交一个充电站信息
        • 删除一个充电站信息
        • 修改一个充电站信息
        • 分页查询多个充电站信息列表
      • 充电设施管理
        • 提交一个充电设施信息
        • 删除一个充电设施信息
        • 修改一个充电设施信息
        • 分页查询多个充电设施信息列表
      • 充电口管理
        • 提交一个充电口信息
        • 删除一个充电口信息
        • 修改一个充电口信息
        • 分页查询多个充电口信息列表
    • 实时数据上报
      • 上报回调地址管理
        • 修改上报失败回调地址
        • 删除上报失败回调地址
        • (运营商实现该接口)处理上报失败
        • 修改查询充电口实时数据回调地址
        • 修改请求上报充电过程数据地址
        • (运营商实现该接口)处理请求上报充电过程数据
      • 上报充电口实时信息
        POST
      • 重新上报充电口实时信息
        POST
      • 上报充电口实时信息列表
        POST
    • 运营数据管理
      • 充电记录管理
        • 提交一个充电记录信息
        • 分页查询多个充电记录信息列表
        • 提交充电记录信息列表
    • 安全预警管理
      • 安全预警请先读我
      • 修改安全预警回调地址
        PUT
      • (桩企实现)安全预警接口举例
        POST
    • 获取运营商operator token
      GET

      获取运营商operator token

      开发中
      GET
      /platform/management/operatorAPIToken
      • 运营商使用平台 API 前,都需要调用这个接口,获取平台的授权 token
      • 平台验证逻辑
        0. 运营商向平台提出申请,申请通过后,由平台管理员,单独下发一个 secretKey 私钥给运营商
        1. 运营商在调用平台 API 时,首先需要通过调用当前 /platform/management/operatorAPIToken 接口获取运营商的 API token
        2. 成功验证身份后,平台会将 token 以 json response 的方式,返回给对应请求
        3. 运营商后续在所有针对平台 API 的 request header 中,添加该 token 等字段,签名后校验身份
      • 获取 API token
        1. 调用 /platform/management/operatorAPIToken 这个接口,在 header 中填入相关参数,包括 Datetime, OperatorId, Signature 三个字段
        2. Datetime: 调用该接口的时间(亚洲上海东八区), 格式 yyyy-MM-dd HH:mm:ss, e.g. 2022-02-28 13:45:04,如果请求到达平台服务端的时间与Datetime相差超过5分钟,将会返回权限错误
        3. OperatorId: 运营商 id, 唯一, e.g. thisisanoperatorId
        4. Signature: 用户身份签名
          1. 生成原始字符串,格式为 "datetime: yyyy-MM-dd HH:mm:ss\noperatorid: thisisanoperatorid"
          2. 采用 HMAC 算法,以平台分发的 secretKey 作为密钥字符串,对原始字符串进行散列
          3. 对结果采用 base64 编码
          4. signature 生成举例
             // 待签名原始字符串格式如下, 注意:后有一个空格, 最后一行结尾没有回车, 严格按照如下格式
             // datetime: yyyy-MM-dd HH:mm:ss
             // operatorid: xxxxx
             private static String sign(
      		String secret, String toSignString
      	) throws NoSuchAlgorithmException, InvalidKeyException {
      		Mac mac = Mac.getInstance("HmacSHA256");
      		SecretKeySpec secretKeySpec = new SecretKeySpec(
      			secret.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm()
      		);
      		mac.init(secretKeySpec);
      		byte[] bytes = mac.doFinal(toSignString.getBytes(StandardCharsets.UTF_8));
      		return Base64.getEncoder().encodeToString(bytes);
      	}
      	public static String signSignature(
      		String secret, String datetime, String operatorId
      	) throws NoSuchAlgorithmException, InvalidKeyException {
      		String toSignString = String.format(
      			"datetime: %s\noperatorid: %s",
      			datetime, operatorId
      		);
      		return sign(secret, toSignString);
      	}
      	public static String signSignature(
      		String secret, String datetime, String operatorId, String token
      	) throws NoSuchAlgorithmException, InvalidKeyException {
      		String toSignString = String.format(
      			"datetime: %s\noperatorid: %s\ntoken: %s",
      			datetime, operatorId, token
      		);
      		return sign(secret, toSignString);
      	}
      
      1. 如果验证成功,返回结果会在 data 字段给出相应的 token 字符串
      • 调用平台其他 API 请求
        0. 首先完成 /platform/management/operatorAPIToken 的请求
        1. 对于其他 API,在 header 中加入四个字段 Datetime, OperatorId,Token,Signature
        2. Datetime: 调用该接口的时间(亚洲上海东八区), 格式 yyyy-MM-dd HH:mm:ss, e.g. 2022-02-28 13:45:04,如果请求到达平台服务端的时间与Datetime相差超过5分钟,将会返回权限错误
        3. OperatorId: 运营商 id, 唯一, e.g. thisisanoperatorId
        4. Token: 调用 /platform/management/operatorAPIToken 的返回结果
        5. Signature: 用户身份签名
          1. 生成原始字符串,格式为 "datetime: yyyy-MM-dd HH:mm:ss\noperatorid: thisisanoperatorid\ntoken: thisisantoken"(注意与获取 token 时的区别,需要增加一个 \ntoken: ....)
          2. 采用 HMAC 算法,以平台分发的 secretKey 作为密钥字符串,对原始字符串进行散列
          3. 对结果采用 base64 编码
      • 特别注意: 创建代签名字符串(原始字符串)时,请严格按照上文中的字段顺序

      请求参数

      Header 参数
      Datetime
      string 
      调用接口的日期时间
      必需
      示例值:
      2022-02-28 13:45:04
      OperatorId
      string 
      运营商唯一id
      必需
      示例值:
      this is an operator id
      Signature
      string 
      签名
      必需
      示例值:
      thisisasdushrieuw

      示例代码

      Shell
      JavaScript
      Java
      Swift
      Go
      PHP
      Python
      HTTP
      C
      C#
      Objective-C
      Ruby
      OCaml
      Dart
      R
      请求示例请求示例
      Shell
      JavaScript
      Java
      Swift
      curl --location --request GET '/platform/management/operatorAPIToken' \
      --header 'Datetime: 2022-02-28 13:45:04' \
      --header 'OperatorId: this is an operator id' \
      --header 'Signature: thisisasdushrieuw'

      返回响应

      🟢200成功
      application/json
      Body
      status
      integer 
      必需
      message
      string 
      必需
      data
      string 
      必需
      示例
      {
          "status": 200,
          "message": "请求成功!",
          "data": "thisisatoken"
      }
      修改于 2022-04-12 04:34:54
      上一页
      (桩企实现)安全预警接口举例
      Built with