一. 背景#
本平台为充电桩管理单位提供电动自行车/汽车充电桩统一管理服务,本文档将指导充电桩运营商与本平台如何集成和对接。二. 对接场景#
三. 开发准备#
1. 申请OperatorID#
2. 下载运营商证书#
四.技术规范#
1. 平台地址#
2. 接口调用方式#
接口均为HTTP(S)协议接口,提交方法为Post。3. 报文格式#
请求参数#
| 参数名 | 参数说明 |
|---|
| signatureType | 签名方式,暂时只支持SHA256withRSA |
| signature | 签名 |
| operatorId | 运营商ID,由平台分派 |
| timestamp | 调用接口当时的时间戳 |
curl -X POST https://域名/接口
-H 'Authorization: {signatureType:"SHA256withRSA",signature:"MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK",operatorId:"demoOperator",timestamp:"1554208460"}'
-H "Accept: application/json"
-H "Content-Type: application/json"
-d '业务参数,详细见各个接口定义' 响应参数#
| 参数名 | 参数说明 |
|---|
| code | 响应码,0为成功,其他为失败,详细见错误码列表 |
| msg | 响应消息 |
| data | 业务数据 |
{
"code": "",
"msg": "",
"data":{}
}
五.签名#
1. 构造签名串#
将OperatorID、当前时间戳组装成json字符串。
示例:'{
"operatorId": "demoOperator",
"timestamp": 1554208460"
}'
2 签名#
public static void main(String[] args) throws Exception {String key = "证书公钥";
SignData signData = new SignData();
signData.setOperatorId("100001");
signData.setTimestamp("111");
String signDataStr = JacksonUtil.toJson(signData);
System.out.println("signDataStr:" + signDataStr);String sign = RSAUtils.signByPrivateKey(signDataStr.getBytes(StandardCharsets.UTF_8), key);
System.out.println("sign:" + sign);public static String signByPrivateKey(byte[] data, String privateKey) throws Exception {
logger.info("用私钥对信息进行数字签名");
byte[] keyBytes = decryptBASE64(privateKey);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey priKey = factory.generatePrivate(keySpec);
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(priKey);
signature.update(data);
return encryptBASE64(signature.sign());
}