PHP通过 miniprogram-ci 实现微信小程序的自动化发布
【代码】PHP通过 miniprogram-ci 实现微信小程序的自动化发布。
·
一.安装依赖
npm install miniprogram-ci
二.在根目录新建publishMiniProgram.js
const path = require('path');
//在第一步安装的路径
const ci = require(path.resolve(__dirname, '../extend/node_modules', 'miniprogram-ci'));
const fs = require('fs');
// 获取传递的 JSON 文件路径
const dataFilePath = process.argv[2]; // 获取命令行参数
if (!dataFilePath) {
console.error('未传入配置文件路径');
process.exit(1);
}
// 读取配置文件
const config = JSON.parse(fs.readFileSync(dataFilePath, 'utf-8'));
// 项目配置
const projectConfig = {
appid: config.appid, // 使用从 JSON 文件中读取的 appid
type: 'miniProgram',
projectPath: path.resolve(__dirname, '../../weixin'), // 小程序项目路径
privateKey:config.privateKey, // 私钥路径
version: config.version, // 小程序版本号
description: config.description // 上传描述
};
// 初始化小程序项目配置
const project = new ci.Project(projectConfig);
// 上传小程序代码
async function upload() {
try {
const res = await ci.upload({
project,
version: config.version,
desc: config.description,
});
console.log('上传成功:', res);
} catch (error) {
console.error('上传失败:', error);
}finally {
// ✅ 不管成功失败,最后都退出 Node 进程
process.exit(0);
}
}
upload();
三.PHP方法 执行JS文件实现上传
$publishScript = './publishMiniProgram.js'; // 发布小程序的脚本路径
$data = [
'privateKey' => base64_decode($result['privateKey']),
'description'=>'自动化上传',
'appid' => $result['appid'],
'plat_id' => $result['plat_id'],
'version' => $result['mini_version'],
];
// 将数据传递给 Node.js 脚本
$dataJson = json_encode($data);
$dataJsonFile = $result['appid'].'.json'; // 保存为一个 JSON 文件
if (file_put_contents($dataJsonFile, $dataJson) === false) {
return error('保存数据到 JSON 文件失败');
}
// 执行发布小程序脚本
$publishCommand = "node $publishScript $dataJsonFile";
$publishOutput = shell_exec($publishCommand);
if ($publishOutput === null) {
return error('发布失败');
}
四.读取配置文件并替换 新建modifySiteinfo.js
// modifySiteinfo.js
const fs = require('fs');
const path = require('path');
// 获取传递的 platid 参数
const platid = process.argv[2]; // 从命令行参数获取 platid
if (!platid) {
console.log("Error: platid 参数缺失");
process.exit(1); // 如果没有提供 platid 参数,退出脚本
}
// `siteinfo.js` 文件路径
const siteinfoPath = '../../weixin/siteinfo.js'; // 确保路径准确
// 读取 siteinfo.js 文件
fs.readFile(siteinfoPath, 'utf8', (err, data) => {
if (err) {
console.log("Error reading siteinfo.js:", err);
process.exit(1);
}
// 替换 `platid` 的值 正则替换需要修改的内容
const updatedData = data.replace(/(PLAT_ID\s*=\s*['"])([^'"]+)(['"])/, `$1${platid}$3`);
// 写回修改后的内容
fs.writeFile(siteinfoPath, updatedData, 'utf8', (err) => {
if (err) {
console.log("Error writing to siteinfo.js:", err);
process.exit(1);
}
console.log("siteinfo.js 文件更新成功!");
});
});
五.PHP方法执行替换配置JS文件
$nodeScript = './modifySiteinfo.js'; // Node.js 脚本路径
// 执行命令,传递 platid 参数
$command = "node $nodeScript $platid";
// 执行并获取输出
$output = shell_exec($command);
// 检查执行结果
if ($output === null) {
return error('修改失败');
}
更多推荐




所有评论(0)