调用API接口自行实现功能的对接步骤说明
第三方平台调用API接口自动实现与GVP平台的功能对接,需要具备开发能力,具体对接步骤如下:
步骤一、得到专用的GVP临时管理员账号与密码
一般是找项目负责人创建一个临时管理员账号与密码即可
步骤二、API接口的body内容Json字符串加密方式说明
1、GVP的API所有查询与控制接口,需要提交的body内容格式说明,body数据类型为raw,请求参数不为空的内容都是加密后的数据
2、Json加密验证,使用GVP API加密小工具,可以把登录的Json字符串内容如:{"UserName":"BA","UserPassword":"hdl123456"},转成加密后的数据如:IYLsPkqw6MSk7t8hk/V5Kj2q/VuBXCrkMvVfp7M6lR/hOM5+tgINPkYvtS9UOZPc,通过GVP API加密小工具可以互转成功则表示正常有效;
GVP API加密小工具下载链接地址: http://hotel.hdlcontrol.com:6679/GVPAPITool.zip
3、加密方式说明,Aes加密,ECB模式,PKCS7,密钥必须为32位,密钥值请联系HDL开发工程师获取
4、C#开发语言的加密Demo,得到的加密数据可以在GVP API加密小工具验证是否正确
using System.Security.Cryptography;
/// <summary>
/// GVP的JSON字符串加密Demo,成功返回加密后的数据
/// </summary>
/// <param name="source">原Json字符串</param>
/// <param name="key">32位的密钥</param>
/// <returns></returns>
public static string GVPEncryptAes(string source, string key)
{
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
aesProvider.Key = Encoding.UTF8.GetBytes(key);
aesProvider.Mode = CipherMode.ECB;
aesProvider.Padding = PaddingMode.PKCS7;
using (ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor())
{
byte[] inputBuffers = Encoding.UTF8.GetBytes(source);
byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);
aesProvider.Clear();
aesProvider.Dispose();
return Convert.ToBase64String(results, 0, results.Length);
}
}
}
5、JAVA开发语言的加密Demo,得到的加密数据可以在GVP API加密小工具验证是否正确
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
* GVP的JSON字符串加密Demo,成功返回加密后的数据
* @param source 原Json字符串
* @param key 32位密钥
* @return
* @throws Exception
*/
public static String GVPEncryptAes(String source, String key) throws Exception {
// 注意:AES加密的key长度应为16、24或32字节,根据实际需求调整
byte[] raw = key.getBytes(StandardCharsets.UTF_8);
//
SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
// Java中PKCS5Padding等同于C#中的PKCS7Padding
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(source.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encrypted);
}
步骤三、调用GVP登录接口,成功返回Token值
1、Postman的GVP登录接口配置说明
登录请求接口示例,192.168.1.108是GVP服务端所在电脑的IP地址,请根据实际情况调整,端口8008固定
http://192.168.1.108:8008/api/?HDLRequest=UserLogin
请求方式:POST
接口地址:/api/?HDLRequest=UserLogin
请求数据类型:application/json
响应数据类型:application/json
登录用户接口的请求参数示例,加密前的Json字符串:{"UserName":"BA","UserPassword":"hdl123456"}
Postman的body数据类型:raw
Postman的body内容示例,加密后的字符串:IYLsPkqw6MSk7t8hk/V5Kj2q/VuBXCrkMvVfp7M6lR/hOM5+tgINPkYvtS9UOZPc
2、Postman的GVP登录接口成功返回
步骤四、根据业务需求调用查询接口,如查询灯光设备接口示例
1、获取单个或所有灯光状态数据的Postman使用示例,Headers,添加一个key为Authorization,value值为登录接口返回的Token值
2、设置Postman的body,选择raw,内容为Json字符串加密后的数据,获取单个或所有灯光状态数据的原Json字符串:{"DeviceGuid":"all"},加密后的数据:1/q2psgYeW1CYr7lDbhNGuB0myap28o8s8s9NqPfUfo=,如下图所示
获取单个或所有灯光状态数据请求接口示例,192.168.1.108是GVP服务端所在电脑的IP地址,请根据实际情况调整,端口8008固定
http://192.168.1.108:8008/api/?HDLRequest=GetLampDeviceStatus
请求方式:POST
接口地址:/api/?HDLRequest=GetLampDeviceStatus
请求数据类型:application/json
响应数据类型:application/json
获取所有灯光状态接口的请求参数示例,加密前的Json字符串:{"DeviceGuid":"all"}
Postman的body数据类型:raw
Postman的body内容示例,加密后的字符串:1/q2psgYeW1CYr7lDbhNGuB0myap28o8s8s9NqPfUfo=
3、点击Postman的Send按钮,成功返回灯光的数据,失败返回异常信息
步骤五、根据业务需求调用控制接口,如灯光设备控制接口
1、控制单个灯光设备的Postman使用示例,Headers,添加一个key为Authorization,value值为登录接口返回的Token值
2、设置Postman的body,选择raw,内容为Json字符串加密后的数据,如查询控制灯光打开的原Json字符串:{"DeviceGuid":"55c1104b-e2e5-4af0-9677-1584c468d427","LampActionType":"TurnOn","LampBrightness":100,"LampColor":"","CCTValue":0},加密后的数据:87yQB+zwxMqC0yVxFXSmkq3c3TqqlU/bLSr3RScwXPK0+BCXb+/GJCbMDXIcKli9QYGc9GW/0ZhjGwxmKCIJymUnaqkGoTAoxfGuTtbvFgerjHDWEieQN5Wh6VSfFR8ftsJLY5v05roza6GqfvLteLOvEFz/fuOTtfYI+ydMgN+2Sa0IOwbZg9qsuki4AuE3
控制单个灯光设备的请求接口示例,192.168.1.108是GVP服务端所在电脑的IP地址,请根据实际情况调整,端口8008固定
http://192.168.1.108:8008/api/?HDLRequest=ControlLampDevice
请求方式:POST
接口地址:/api/?HDLRequest=ControlLampDevice
请求数据类型:application/json
响应数据类型:application/json
控制灯光设备打开(开灯)的接口请求参数示例,加密前的Json字符串:
{"DeviceGuid":"55c1104b-e2e5-4af0-9677-1584c468d427","LampActionType":"TurnOn","LampBrightness":100,"LampColor":"","CCTValue":0}
Postman的body数据类型:raw
Postman的body示例内容,加密后的字符串:
87yQB+zwxMqC0yVxFXSmkq3c3TqqlU/bLSr3RScwXPK0+BCXb+/GJCbMDXIcKli9QYGc9GW/0ZhjGwxmKCIJymUnaqkGoTAoxfGuTtbvFgerjHDWEieQN5Wh6VSfFR8ftsJLY5v05roza6GqfvLteLOvEFz/fuOTtfYI+ydMgN+2Sa0IOwbZg9qsuki4AuE3
3、点击Postman的Send按钮,控制成功返回"ReplyCode": "Success",如下图,失败返回其它异常信息;