调用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加密小工具可以互转成功则表示正常有效;

image-20230618203003789

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登录接口配置说明

image-20230618203003789

登录请求接口示例,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登录接口成功返回

image-20230618203003789

步骤四、根据业务需求调用查询接口,如查询灯光设备接口示例

1、获取单个或所有灯光状态数据的Postman使用示例,Headers,添加一个key为Authorization,value值为登录接口返回的Token值

image-20230618203003789

2、设置Postman的body,选择raw,内容为Json字符串加密后的数据,获取单个或所有灯光状态数据的原Json字符串:{"DeviceGuid":"all"},加密后的数据:1/q2psgYeW1CYr7lDbhNGuB0myap28o8s8s9NqPfUfo=,如下图所示

image-20230618203003789

获取单个或所有灯光状态数据请求接口示例,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按钮,成功返回灯光的数据,失败返回异常信息

image-20230618203003789

步骤五、根据业务需求调用控制接口,如灯光设备控制接口

1、控制单个灯光设备的Postman使用示例,Headers,添加一个key为Authorization,value值为登录接口返回的Token值

image-20230618203003789

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

image-20230618203003789

控制单个灯光设备的请求接口示例,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",如下图,失败返回其它异常信息;

image-20230618203003789

results matching ""

    No results matching ""