目录

构建应用

功能介绍

此接口用于构建元服务。

接口原型

承载协议

HTTPS POST

接口方向

服务商服务器 -> 华为服务器

接口URL

https://connect-api.cloud.huawei.com/api/distribute/v2/commit

数据格式

请求消息:Content-Type: application/json

响应消息:Content-Type: application/json

请求参数

[h2]Header

参数

必选(M)/可选(O)

类型

说明

client_id

M

String

API客户端ID。

创建第三方平台成功后系统自动分配的客户端ID,可在第三方管理平台“开发配置 > 开发资料设置”页面中获取,详情请参见接口访问凭证(平台访问凭据)。

appId

M

String(32)

应用ID。

请填写元服务应用ID。

Authorization

M

String

认证信息,格式为“Authorization: Bearer ${access_token}”。access_token为获取平台级Token中获取的access_token。

[h2]Body

参数

必选(M)/可选(O)

类型

说明

templateId

M

String(20)

模板ID,服务商在第三方管理平台上传模板代码时自动生成。也可通过getTemplateList接口获取代码模板的templateId。

extJson

M

String

第三方自定义的配置,配置规则请参考ext.json配置说明。

取值范围:[1,65535]。

resourceFileObjectId

O

String(255)

资源文件压缩包objectId。

即针对resource_ext.zip文件调用获取文件上传地址接口获取资源文件压缩包对应的objectId。

请求示例

{
    "templateId": "1705866504878378881",
    "extJson": "{\"extAppId\": \"102449835\",\"ascfConfig\": {\"versionCode\": 1000,\"versionName\": \"1.0\"}}",
    "resourceFileObjectId": "版本描述"
}

响应参数

参数

类型

说明

ret

CodeAndMsg

包含返回码及描述信息。

返回码详情请参见错误码。

taskId

String(32)

构建的任务ID。

CodeAndMsg

参数

类型

说明

code

Integer

返回码。

msg

String

返回码描述信息。

响应示例

{
  "ret": {
    "code": 0,
    "msg": "success",
  },
  "taskId": "3f5e****4589"
}

其他说明

软件包构建结果通知回调

当元服务包构建完成后,华为服务器会向服务商在第三方管理平台配置的消息与事件接收URL(创建第三方平台时填写)以 POST 的方式推送相关通知。

为了加强安全性,华为服务器在发送通知时对Body体中的参数使用SHA256WithRSA/PSS算法进行了签名,并在signatureRSAWithPSS中返回签名后的字符串。

您需要使用消息验证公钥中获取的验签公钥对签名字符串进行验签,验签方法参见验签示例。

除了消息通知之外,第三方平台也可通过接口查询指最新的构建结果,见查询最新一次构建任务状态。

承载协议

HTTPS POST

接口方向

华为服务器 -> 服务商服务器

接口URL

第三方管理平台上配置的华为服务器回调服务商服务器的回调域名(“回调URL”),您需自行保证地址为https开头的合法URL地址,具体请参见消息与事件接收URL。

数据格式

请求消息:Content-Type: application/json

响应消息:Content-Type: application/json

请求参数

[h2]Header

参数

必选(M)/可选(O)

类型

描述

notifyType

M

String(32)

回调类型,固定为“constructPkg”。

signatureRSAWithPSS

M

String

华为服务器在发送通知时对Body体中的参数使用SHA256WithRSA/PSS算法进行了签名,并在signatureRSAWithPSS中返回签名后的字符串。

您需要使用消息验证公钥中获取的验签公钥对签名字符串进行验签,验签方法参见验签示例。

[h2]Body

参数

必选(M)/可选(O)

类型

描述

taskId

M

String(32)

应用软件包构建任务ID。

objectId

O

String(256)

应用软件包在OBS上的objectId。

result

M

String

操作结果。

  • SUCCESS:成功
  • FAILED:失败

failedReason

O

String

失败原因。

请求示例

{ 
  "taskId": "123****4", 
  "objectId": "CN/****/1671003286790-627c58bb-7f83-4b93-****-2b21289af877.spk", 
  "result": "SUCCESS", 
  "failedReason": "****" 
}

响应参数

服务商收到第三方管理平台服务端的POST请求后,需返回HTTP状态码200,标识回调成功。如果服务端认为推送消息失败平台将会进行多次重试(共3次)。

验签示例

/* 
@content 待验签字符串,传入callBackData中携带的JSON字符串 
@sign  签名字符串 
*/ 
private static void verifySignature(String content, String sign) {
    try{
        String pubKey = "消息验证公钥";     //替换为您在第三方管理平台中实际的消息验证公钥。 
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(pubKey));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
        Signature signature = Signature.getInstance("SHA256WithRSA/PSS");
        signature.initVerify(publicKey);
        signature.update(content.getBytes(Charset.forName("UTF-8")));
        if(!signature.verify(Base64.decodeBase64(sign))) {
            throw new ConnectException(EnumReturnCode.INVALID_PARAMETER, "Failed to verifySignature");
        }
    } catch(NoSuchAlgorithmException | SignatureException | InvalidKeyException | InvalidKeySpecException e) {
        LOG.error("verify signature failed", e);
        throw new ConnectException(EnumReturnCode.INVALID_PARAMETER, "Failed to verifySignature");
    } catch(Exception e) {
        LOG.error("verify signature failed", e);
        throw new ConnectException(EnumReturnCode.INVALID_PARAMETER, "Failed to verifySignature");
    }
}