跳到主要内容

微搭应用实现同时发布到多个小程序

本文介绍如何通过微搭低代码平台的 API 接口实现将一个应用批量发布到多个小程序。

背景介绍

在企业级应用场景中,我们可能需要将同一个微搭应用发布到多个不同的小程序中。手动操作每个小程序的发布过程既耗时又容易出错,通过 API 接口实现批量发布可以大大提高效率。

实现原理

批量发布的核心流程如下图所示:

┌─────────────────────┐
│ 开始批量发布流程 │
└──────────┬──────────┘

┌─────────────────────┐
│ 绑定第N个小程序 │◄─────┐
└──────────┬──────────┘ │
▼ │
┌─────────────────────┐ │
│ 发布应用 │ │
└──────────┬──────────┘ │
▼ │
┌─────────────────────┐ │
│ 查询发布结果 │ │
└──────────┬──────────┘ │
▼ │
┌─────────────────────┐ │
│ 解除小程序绑定 │ │
└──────────┬──────────┘ │
▼ │
┌─────────────────────┐ │
│ 是否还有下一个小程序├──是──┘
└──────────┬──────────┘
│ 否

┌─────────────────────┐
│ 批量发布完成 │
└─────────────────────┘

整个过程是一个循环操作,对每个小程序依次执行以下步骤:

  1. 绑定小程序:将微搭应用与目标小程序进行绑定
  2. 发布应用:触发应用发布流程
  3. 查询结果:轮询查询发布状态直到成功或失败
  4. 解除绑定:解除当前小程序与应用的绑定关系
  5. 继续下一个:如果列表中还有小程序,则继续处理下一个

通过这种方式,我们可以自动化地将一个应用发布到多个小程序中,无需人工干预。

所需 API 接口

实现批量发布需要调用以下 API 接口:

接口名称接口功能API 文档链接
DeployApp发布应用查看文档
CheckDeployApp查询发布结果查看文档
DeleteAppBindWxApp删除应用与小程序的绑定查看文档
PutWxAppIdToWeApp绑定应用与小程序查看文档

批量发布流程

1. 准备工作

在开始批量发布前,需要准备以下信息:

  • 云开发环境 ID(EnvId)- 格式如:lowcode-5gzbnlvd93
  • 微搭应用 ID(AppId)- 在微搭低代码平台的应用列表中查看
  • 待发布的小程序 AppID 列表 - 需要提前完成小程序授权
  • 云 API 密钥(SecretId 和 SecretKey)- 如何获取云 API 密钥

2. 实现代码示例

重要说明

微搭应用与小程序的授权方式目前仅支持全托管模式。在使用批量发布功能前,请确保所有目标小程序均已完成微搭平台的授权,且授权方式为全托管模式。其他授权方式(如扫码授权)不支持通过 API 进行批量发布操作。

全托管模式

以下是使用 Node.js 实现批量发布的代码示例:

其他语言实现说明

如需使用其他编程语言如 Python、Java、PHP 等实现,请参考腾讯云 API 文档中心获取相应语言的 SDK 和接口调用方式。

const tencentcloud = require("tencentcloud-sdk-nodejs");
const util = require("util");
const sleep = util.promisify(setTimeout);

// 导入对应产品模块的client models
const LowcodeClient = tencentcloud.lowcode.v20210108.Client;

// 配置信息
const secretId = "您的SecretId";
const secretKey = "您的SecretKey";
const region = "ap-shanghai"; // 地域信息
const appId = "应用ID"; // 微搭应用ID
const wxAppIdList = [
"wx1111111111111111",
"wx2222222222222222",
"wx3333333333333333",
]; // 小程序AppID列表

// 初始化客户端配置
const clientConfig = {
credential: {
secretId,
secretKey,
},
region,
profile: {
httpProfile: {
endpoint: "lowcode.tencentcloudapi.com",
},
},
};

// 实例化要请求产品的client对象
const client = new LowcodeClient(clientConfig);

/**
* 发布应用
* @param {string} appId 应用ID
* @param {string} wxAppId 小程序AppID
* @returns {Promise<object|null>} 发布结果
*/
async function deployApp(appId, wxAppId) {
try {
const params = {
Action: "DeployApp", // API的名称
Version: "2021-01-08", // API的版本号
EnvId: "lowcode-环境ID", // 环境ID,示例:lowcode-5gzbnlvd93
Id: appId, // 应用ID,示例:app-k82WCPM8
Mode: "upload", // 发布体验/正式,示例:upload
BuildType: "web", // 构建类型,示例:web
SubAppIds: [], // 子包数组,可选参数
};
const result = await client.DeployApp(params);
console.log(`发布应用请求成功: ${JSON.stringify(result)}`);
return result;
} catch (error) {
console.error(`发布应用失败: ${error}`);
return null;
}
}

/**
* 查询发布结果
* @param {string} appId 应用ID
* @param {string} deployId 部署ID
* @returns {Promise<boolean>} 是否发布成功
*/
async function checkDeployStatus(appId, deployId) {
try {
const params = {
Action: "CheckDeployApp", // API的名称
Version: "2021-01-08", // API的版本号
EnvId: "lowcode-环境ID", // 环境ID,示例:lowcode-5gzbnlvd93
Id: appId, // 应用ID,示例:app-k82WCPM8
BuildId: deployId, // 构建ID,示例:4f12-b62b-c1c6f403d6e1
};

// 轮询查询发布状态,最多等待10分钟
for (let i = 0; i < 60; i++) {
const result = await client.CheckDeployApp(params);
const status = result.Status;

if (status === "success") {
console.log(`应用发布成功: ${JSON.stringify(result)}`);
return true;
} else if (status === "fail") {
console.log(`应用发布失败: ${JSON.stringify(result)}`);
return false;
}

console.log(`应用发布中,当前状态: ${status}`);
await sleep(10000); // 每10秒查询一次
}

console.log("发布超时");
return false;
} catch (error) {
console.error(`查询发布状态失败: ${error}`);
return false;
}
}

/**
* 删除应用与小程序的绑定
* @param {string} appId 应用ID
* @returns {Promise<boolean>} 是否解绑成功
*/
async function deleteAppBind(appId) {
try {
const params = {
Action: "DeleteAppBindWxApp", // API的名称
Version: "2021-01-08", // API的版本号
WeappId: appId, // 应用ID,示例:app-dfa
};
const result = await client.DeleteAppBindWxApp(params);
console.log(`解除应用绑定成功: ${JSON.stringify(result)}`);
return true;
} catch (error) {
console.error(`解除应用绑定失败: ${error}`);
return false;
}
}

/**
* 绑定应用与小程序
* @param {string} appId 应用ID
* @param {string} wxAppId 小程序AppID
* @returns {Promise<boolean>} 是否绑定成功
*/
async function bindWxApp(appId, wxAppId) {
try {
const params = {
Action: "PutWxAppIdToWeApp", // API的名称
Version: "2021-01-08", // API的版本号
WeAppId: appId, // 应用ID,示例:app-xxx
WxAppId: wxAppId, // 微信AppId
};
const result = await client.PutWxAppIdToWeApp(params);
console.log(`绑定小程序成功: ${JSON.stringify(result)}`);
return true;
} catch (error) {
console.error(`绑定小程序失败: ${error}`);
return false;
}
}

/**
* 批量发布应用到多个小程序
*/
async function batchDeploy() {
let successCount = 0;
let failCount = 0;

for (let index = 0; index < wxAppIdList.length; index++) {
const wxAppId = wxAppIdList[index];
console.log(
`\n开始处理第 ${index + 1}/${wxAppIdList.length} 个小程序: ${wxAppId}`
);

// 如果不是第一个小程序,需要先解除之前的绑定
if (index > 0) {
const unbindResult = await deleteAppBind(appId);
if (!unbindResult) {
console.log(`解除绑定失败,跳过小程序 ${wxAppId}`);
failCount++;
continue;
}
}

// 绑定新的小程序
const bindResult = await bindWxApp(appId, wxAppId);
if (!bindResult) {
console.log(`绑定小程序失败,跳过小程序 ${wxAppId}`);
failCount++;
continue;
}

// 发布应用
const deployResult = await deployApp(appId, wxAppId);
if (!deployResult) {
console.log(`发布应用失败,跳过小程序 ${wxAppId}`);
failCount++;
continue;
}

const deployId = deployResult.DeployId;
if (!deployId) {
console.log("获取部署ID失败");
failCount++;
continue;
}

// 查询发布结果
const deploySuccess = await checkDeployStatus(appId, deployId);
if (deploySuccess) {
successCount++;
console.log(`小程序 ${wxAppId} 发布成功`);
} else {
failCount++;
console.log(`小程序 ${wxAppId} 发布失败`);
}
}

// 最后一个小程序发布完成后,可以选择是否保留绑定关系

console.log(`\n批量发布完成,成功: ${successCount},失败: ${failCount}`);
}

// 执行批量发布
batchDeploy().catch((error) => {
console.error("批量发布过程中出现错误:", error);
});

3. 执行流程说明

  1. 初始化配置:设置 API 密钥、地域信息、应用 ID 和小程序 AppID 列表。
  2. 循环处理每个小程序
    • 如果不是第一个小程序,先解除之前的绑定
    • 绑定当前小程序
    • 发布应用
    • 查询发布结果,确认成功或失败
  3. 统计结果:记录成功和失败的数量,输出最终结果。

4. 提交小程序版本审核

完成批量发布后,还需要前往微信小程序管理后台提交版本审核:

  1. 登录微信公众平台,进入对应的小程序账号
  2. 在左侧菜单栏选择"开发管理" -> "开发版本"
  3. 找到刚刚发布的版本,点击"提交审核"
  4. 填写版本信息、功能介绍等必要信息
  5. 提交审核,等待微信官方审核结果

小程序提交审核

提示

对于批量发布的多个小程序,需要分别登录各自的小程序管理后台,逐一提交审核。目前微信平台不支持批量审核操作。

注意事项

  1. API 调用频率限制:请注意微搭平台对 API 的调用频率有一定限制,建议在代码中添加适当的延时。
  2. 错误处理:实际生产环境中,应该增加更完善的错误处理和重试机制。
  3. 权限验证:确保使用的 API 密钥具有足够的权限来执行所有操作。
  4. 发布时间:发布过程可能需要一定时间,特别是应用较大时,需要耐心等待。
  5. 日志记录:建议添加详细的日志记录,以便于问题排查。

常见问题

Q: 如何获取微搭应用 ID?

A: 在微搭低代码平台的应用列表中,选择目标应用,应用 ID 会显示在应用详情页面。

Q: 发布失败时如何处理?

A: 可以查看发布日志了解具体原因,常见的失败原因包括小程序配置错误、权限不足等。建议在代码中添加重试机制。

Q: 是否可以同时发布到多个小程序?

A: 不可以。微搭平台要求一个应用在同一时间只能绑定一个小程序,因此必须按顺序逐个处理。

总结

通过 API 接口实现微搭应用的批量发布,可以大大提高运维效率,特别适合需要将同一应用发布到多个小程序的企业级场景。本文提供的代码示例可以作为基础框架,根据实际需求进行定制和扩展。