1. 接口说明
异步提交AIGC任务,任务提交后会立即返回一个taskId,后续可以使用taskId通过“查询AIGC任务”接口,查询生图结果。
2. 服务接入地址
https://industrysolutions.alibabacloud.com
3. 接口URI
/openapi/v1/aigc/submitTask
4. 请求Method
POST(application/json)
5. 请求参数
参数名 | 类型 | 是否必传 | 说明 |
workflow | string | yes | aigc 算法标识,如: "IMAGE2VIDEO"代表图生视频; "CATVTON" 代表换装; "TEXT2IMAGE" 代表文生图。 |
version | string | yes | aigc算法版本。如“1.0.0” |
algoInput | object | yes | aigc生图算法输入,不同的算法有不同的输入。换装输入参考后续文档。 |
6. algoInput 参数
6.1. 图生视频算法
参数名 | 类型 | 是否必传 | 说明 |
inputText | string | yes | 提示词,字符串长度≤500 |
inputImage | string | yes | 输入图片,必须为公网可访问的图片地址。
|
6.2. 换装算法
参数名 | 类型 | 是否必传 | 说明 |
modelImage | string | yes | 模特图片,必须为公网可访问的图片地址。
|
garmentImage | string | yes | 衣服图片,必须为公网可访问的图片地址。
|
category | string | yes | 换装类型: upper: 更换上身衣服 lower: 更换下身衣服 overall: 更换全身衣服 |
seed | int | yes | 取值范围:0~2147483647。随机种子,用于控制图像生成过程中的随机性。调整seed值可以生成不同的图像变化,用于探索不同的风格或细节。同样的输入条件和相同的seed值会生成一致的结果。 |
6.3. 文生图算法
参数名 | 类型 | 是否必传 | 说明 |
inputText | string | yes | 提示词,字符串长度≤500 |
width | int | yes | 图片宽度 |
height | int | yes | 图片高度 |
7. 接口响应
参数名 | 类型 | 说明 |
success | boolean | 是否调用成功:true:调用成功,false:调用失败 |
model | string | 生成的taskId,后续用于查询任务执行结果 |
errorCode | string | 异常状态码。当接口调用失败时有值。状态码参考后续文档。 |
errorMsg | string | 异常信息。当接口调用失败时有值。 |
8. 常用异常状态码
异常状态码 | 异常信息描述 |
INTCNN_COMMON_AUTH_CHECK_ERROR | 签名校验错误 |
INTCNN_COMMON_NOT_FOUND | 接口不存在 |
INTCNN_COMMON_PARAM_VALID_ERROR: | 参数校验异常 |
INTCNN_COMMON_SYS_ERROR | 服务端未知异常 |
9. 请求示例
9.1. 图生视频
curl --location 'https://industrysolutions.alibabacloud.com/openapi/v1/aigc/submitTask' \
--header 'X-Access-Key: 501711*****45218' \
--header 'X-Request-Sign: YmM4Yzg4ZTc3Z****************FkODdlYTRmMWFiOTBmYTMwMw==' \
--header 'X-Request-Timestamp: 1741855077857' \
--header 'x-acs-request-id: 893e87bb-6083-4249-aedd-a376cac24bee' \
--header 'Content-Type: application/json' \
--data '{
"workflow": "IMAGE2VIDEO",
"version": "1.0.0",
"algoInput": {
"inputText": "一个人在走路",
"inputImage": "https://img.alicdn.com/imgextra/i2/O1CN01DspKG11ZLZjy0JKAf_!!6000000003178-0-tps-999-750.jpg"
}
}'9.2. 换装
curl --location 'https://industrysolutions.alibabacloud.com/openapi/v1/aigc/submitTask' \
--header 'x-acs-request-id: 51843d00-ef53-47f8-ac03-6bfc219ba1eb' \
--header 'X-Access-Key: 5017114*******' \
--header 'X-Request-Sign: NjcxNTQy**************wMjZjZWU1YjQxZTcwYQ==' \
--header 'X-Request-Timestamp: 1739518571992' \
--header 'Content-Type: application/json' \
--data '{
"workflow": "CATVTON",
"version": "1.0.0",
"algoInput":{
"modelImage": "https://gw.alicdn.com/imgextra/i4/O1CN0162LlIZ1HJ8VZPst5A_!!6000000000736-2-tps-789-987.png",
"garmentImage": "https://gw.alicdn.com/imgextra/i1/O1CN01M2oIt71KIAWJhtK8f_!!6000000001140-2-tps-789-987.png",
"category": "overall",
"seed": 43
}
}'9.3. 文生图
curl --location 'https://industrysolutions.alibabacloud.com/openapi/v1/aigc/submitTask' \
--header 'X-Access-Key: 501711*****45218' \
--header 'X-Request-Sign: YmM4Yzg4ZTc3Z****************kODdlYTRmMWFiOTBmYTMwMw==' \
--header 'X-Request-Timestamp: 1741855077857' \
--header 'x-acs-request-id: 893e87bb-6083-4249-aedd-a376cac24bee' \
--header 'Content-Type: application/json' \
--data '{
"workflow": "TEXT2IMAGE",
"version": "1.0.0",
"algoInput": {
"inputText": "a cat",
"width": 1024,
"height": 1024
}
}'10. 响应示例
{
"success": true,
"model": "28fdf560-249a-4712-adcc-906c0346602b",
"errorCode": null,
"errorMsg": null
}11. 接口签名
请求端需要对请求的内容进行签名,服务端进行验签,以证明内容没有被篡改,从而保障开发者应用和开放平台交互的安全性。
11.1. 签名涉及要素
11.1.1. Request URI
如请求地址为:https://{domainName}/openapi/v1/a/b
则requestURI为:/openapi/v1/a/b
11.1.2. Request Method
http请求的method。
11.1.3. Request Header
请求头主要包含以下几个Fields(Field是大小写敏感的)。
Header | Required | Description | Code sample |
X-Request-Sign | Yes | 本次请求生成的签名,默认为HmacSHA1。 | X-Request-Sign:**** |
X-Access-Key | Yes | 请求方的身份识别ID,AccessKey。 | X-Access-Key:颁发给用户的AccessKey。客户的ak、sk请线下联系superapp开放平台运营人员获取。 |
X-Request-Timestamp | Yes | 时间戳(毫秒) | X-Timestamp:时间戳。如:1740471900061 |
x-acs-request-id | Yes | 请求id | x-acs-request-id:请求id,随机生成的UUID。如:51843d00-ef53-47f8-ac03-6bfc219ba1eb |
11.1.4. Request Body
Body为JSON格式的详细请求信息,其中的字段因接口而异。
11.2. 签名方式
首先需要构造用于加签的content,每次请求都会有以下属性:
HTTP_URI : 例如 /openapi/v1/a/b
X-Access-Key:46b1cac78ed94ca4b99ad6de550a****
X-Request-Timestamp:1676904384074
HTTP_BODY : body 举例如下:
{
"appId": "223232323****",
"authClientId": "7230000****,
"grantType": "authorization_code",
"authCode": "1cc19911172e4f8aaa509c8fb5d1****"
}基于以上信息,
{Content_To_Be_Signed}的格式如下,我们可以构造出需要加签的content。<HTTP_METHOD> <HTTP_URI> <Client-Id>.<Request-Time>.<Access-Key>
POST /openapi/v1/a/b
{
"appId": "223232323****",
"authClientId": "7230000****",
"grantType": "authorization_code",
"authCode": "1cc19911172e4f8aaa509c8fb5d1****"
}.1676904384074.46b1cac78ed94ca4b99ad6de550afb68使用HmacSHA1算法,以下的代码示例展示了如何加签一个请求。
public String sign(String accessKey,String secretKey,String timestamp,String uri,byte[] bodyBytes) {
String content = String.format("POST %s\n%s.%s.%s", uri, new String(bodyBytes), timestamp, accessKey);
String signed = generateSign(content, secretKey, "HmacSHA1");
return Base64.getEncoder().encodeToString(signed.getBytes(StandardCharsets.UTF_8));
}
public static String generateSign(String content, String key, String algorithm) {
if (!StringUtils.isEmpty(algorithm) && !StringUtils.isEmpty(content) && null != key) {
try {
SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(signinKey);
byte[] rawHmac = mac.doFinal(content.getBytes());
return convertToHex(rawHmac);
} catch (InvalidKeyException | NoSuchAlgorithmException var6) {
return "";
}
} else {
return "";
}
}
public static String convertToHex(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
for(int j = 0; j < len; ++j) {
buf.append(HEX[bytes[j] >> 4 & 15]);
buf.append(HEX[bytes[j] & 15]);
}
return buf.toString();
}
11.3. 发送请求
通过将Client-Id、Request-Time和Signature添加到请求头,可以构造出如下请求:
curl -X POST \
https://example.com/openapi/v1/a/b \
-H 'Content-Type: application/json' \
-H 'X-Access-Key: 46b1cac78ed94ca4b99ad6de550afb68' \
-H 'X-Request-Timestamp: 1676904384074' \
-H 'Signature: KrwDE9tAPJYBb4cUZU6ALJxGIZgwDXn5UkFPMip09n%2FkYKPhEIII%2Fki2rYY2lPtuKVgMNz%2BtuCU%2FjzRpohDbrOd8zYriiukpGAxBQDIVbatGI7WYOcc9YVQwdCR6ROuRQvr%2FD1AfdhHd6waAASu5Xugow9w1OW7Ti93LTd0tcyEWQYd2S7c3A73sHOJNYl8DC1PjasiBozZ%2FADgb7ONsqHo%2B8fKHsLygX9cuMkQYTGIRBQsvfgICnJhh%2BzXV8AQoecJBTrv6p%xxxx' \
-d '{
"appId": "223232323****",
"authClientId": "7230000****",
"grantType": "authorization_code",
"authCode": "1cc19911172e4f8aaa509c8fb5d1****"
}'