承载协议 | HTTPS POST |
|---|---|
接口方向 | 服务商服务器 -> 华为服务器 |
接口URL | https://connect-api.cloud.huawei.com/api/distribute/v2/commit |
数据格式 | 请求消息:Content-Type: application/json 响应消息:Content-Type: application/json |
参数 | 必选(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。 |
参数 | 必选(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 | 包含返回码及描述信息。 返回码详情请参见错误码。 | |
taskId | String(32) | 构建的任务ID。 |
参数 | 类型 | 说明 |
|---|---|---|
code | Integer | 返回码。 |
msg | String | 返回码描述信息。 |
当元服务包构建完成后,华为服务器会向服务商在第三方管理平台配置的消息与事件接收URL(创建第三方平台时填写)以 POST 的方式推送相关通知。
为了加强安全性,华为服务器在发送通知时对Body体中的参数使用SHA256WithRSA/PSS算法进行了签名,并在signatureRSAWithPSS中返回签名后的字符串。
您需要使用消息验证公钥中获取的验签公钥对签名字符串进行验签,验签方法参见验签示例。
除了消息通知之外,第三方平台也可通过接口查询指最新的构建结果,见查询最新一次构建任务状态。
承载协议 | HTTPS POST |
|---|---|
接口方向 | 华为服务器 -> 服务商服务器 |
接口URL | 第三方管理平台上配置的华为服务器回调服务商服务器的回调域名(“回调URL”),您需自行保证地址为https开头的合法URL地址,具体请参见消息与事件接收URL。 |
数据格式 | 请求消息:Content-Type: application/json 响应消息:Content-Type: application/json |
{
"taskId": "123****4",
"objectId": "CN/****/1671003286790-627c58bb-7f83-4b93-****-2b21289af877.spk",
"result": "SUCCESS",
"failedReason": "****"
} /*
@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");
}
}