大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

以下是『微信小程序生态系列文章』正文!

需求背景

我们是一个提供SaaS服务的小程序服务商,会给每一个客户申请一个专属的小程序,到目前为止已经差不多有30几个了。由于『微信开放平台』没有用起来,导致我们每次升级版本都很痛苦,一次性要发布30几个小程序。

每个小程序都需要如下流程:

每个小程序的审核都需要这样操作,实在是太繁琐了而且效率非常低下,但由于作为一个程序员,只有小程序的开发权限,所以我只能尽量减少人工操作的环节,用脚本替代。

目前的脚本可以做到将指定代码上传到指定小程序的微信公众平台中,送审->发布的步骤需要借助小程序助手完成。

实现说明

准备材料

  • 微信开发者工具,核心原理就是使用微信的cli工具来自动操作工具进行代码提交;

  • node环境,我将用js代码来实现这个脚本,要用到node来运行;

  • 微信开发者cli指令帮助文档;

实现步骤

第一步、打开微信开发者工具—>设置 -> 安全设置中开启服务端口

第二步、核心执行脚本upload.js

代码内容如下:

//依赖包,执行cmd命令
const cp = require("child_process");
//依赖包,修改文件内容
const fs = require("fs"); //获取微信开发者工具的cli指令(Mac)
const cli = "/Applications/wechatwebdevtools.app/Contents/MacOS/cli";
//获取微信开发者工具的cli指令(Windows)
//const cli = "开发工具安装位置/cli.bat"; //当前小程序项目地址(替换成自己的)
const projectDir =
"/xxx/xxx/xxx/"; //定义当前版本号
const VERSION = "1.2.9";
//定义当前版本代码的说明
const UPDATE_MESSAGE = "活动"; //定义当前需要上传多少小程序
const list = [{
appId: "appId1",
appName: "小程序名称1",
}, {
appId: "appId2",
appName: "小程序名称2",
}]; //窗口执行命令工具方法
function exec(cmdStr) {
return new Promise((resolve, reject) => {
cp.exec(cmdStr, function (err, stdout, stderr) {
console.log(err, stdout, stderr);
if (err) {
reject(err);
} else {
resolve(stdout);
}
});
});
} //更新project.config.json文件中的appId方法
function updateAppId(appId) {
return new Promise((resolve, reject) => {
try {
const projectPath = `${projectDir}project.config.json`;
let data = fs.readFileSync(projectPath, "utf8");
let jsonData = JSON.parse(data);
jsonData.setting.appid = appId;
jsonData.appid = appId;
fs.writeFileSync(projectPath, JSON.stringify(jsonData, "", 2));
console.log(jsonData);
resolve();
} catch (e) {
reject(e);
console.error("json error", e);
}
});
} //主方法,for循环执行上传操作
async function main() {
console.log("准备工作、检查是否已经登录工具")
const result1 = await exec(`${cli} islogin`)
console.log(result1) console.log("准备工作、打开指定项目")
const result2 = await exec(`${cli} open --project ${projectDir}`)
console.log(result2) for (let index = 0; index < list.length; index++) {
const item = list[index];
console.log(`开始执行小程序:${item.appId}的代码upload操作`) console.log("第一步、自动预览")
const result3 = await exec(`${cli} auto-preview --project ${projectDir}`)
console.log(result3) console.log("第二步、更新project.config.json文件中的appId")
const result4 = await updateAppId(item.appId);
console.log(result4) console.log("第三步、上传代码审核")
const result5 = await exec(`${cli} upload --project ${projectDir} -v ${VERSION} -d ${UPDATE_MESSAGE}`);
console.log(result5) console.log(`执行小程序:${item.appId}的代码upload操作结束!`)
}
console.log("上传结束、关闭开发者工具")
const result6 = await exec(`${cli} quit`);
console.log(result6)
} //执行命令
main();

该脚本的核心逻辑是使用cli命令控制微信开发者工具,遍历每一个需要送审的小程序,将指定目录下的代码提交到指定的小程序公众平台中,并将该版本变为开发版。

第三步、执行命令

node 'upload.js'

执行结果

第四步、开发版代码已提交

(PC端可查看)



(微信小程序助手可查看)

这个1.2.9版本就是我测试提交的,可以看到代码已经提交好了。

第五步、小程序助手提交小程序审核

小程序助手也是一个微信小程序,直接搜索就行了

点击进入小程序助手

点击刚才上传的版本后,可以直接提交审核

关于审核的结果,只需要关注一下『微信公众平台』,结果会自动推送

总结一下

其实微信开放平台是一个不错的工具,可惜我们前期没有用好,导致大量的小程序没有绑定上去,后面想绑定已经找不到小程序的管理员了。通过脚本的方法也不止这一种,微信公众平台提供了一个小程序的key文件,可以通过这个key文件调用一些接口,也可以实现批量送审。不过还是刚才那个原因,这个key的获取需要小程序管理员扫码,已经联系不到了。

上面的这种办法虽说还是要人肉操作小程序助手,但代码的提交已经可以自动化了,如果后面小程序助手开放出一些接口的话,不妨利用一下,也可以减少不少时间。

微信小程序生态15- 批量提交微信小程序审核的一种方式的更多相关文章

  1. 【转载】C#批量插入数据到Sqlserver中的三种方式

    引用:https://m.jb51.net/show/99543 这篇文章主要为大家详细介绍了C#批量插入数据到Sqlserver中的三种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本篇, ...

  2. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  3. C#批量插入数据到Sqlserver中的三种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...

  4. C#_批量插入数据到Sqlserver中的四种方式

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  5. C#批量插入数据到Sqlserver中的四种方式 - 转

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  6. 2017-01-11小程序form表单提交

    小程序form表单提交 1.小程序相对于之前的WEB+PHP建站来说,个人理解为只是将web放到了微信端,用小程序固定的格式前前端进行布局.事件触发和数据的输送和读取,服务器端可以用任何后端语言写,但 ...

  7. vue 异步提交php 两种方式传值

    1.首先要在php的入口文件写上一条代码,允许异步提交 header("ACCESS-CONTROL-ALLOW-ORIGIN:*"); 2.在vue有两种方式将数据异步提交到ph ...

  8. 微信小程序——创建自己的第一个小程序【一】

    注册 微信小程序注册 https://mp.weixin.qq.com/wxopen/waregister?action=step1   填写账号信息  作为登录帐号,请填写未被微信公众平台注册,未被 ...

  9. JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗——JAVA版开源微信管家

    支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1——多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗)   JeeWx捷微V3.1.0版本紧跟微信小程序更新,在 ...

  10. JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗

    支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1--多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有 ...

随机推荐

  1. Android ViewGroup的事件分发机制-源码分析

    为了更好的理解ViewGroup的事件分发机制,我们在自定义一个MyLinerLayout. public class MyLinearLayout extends LinearLayout { pr ...

  2. 2023成都.NET线下技术沙龙圆满结束

    2023年4月15日周六,由MASA技术团队和成都.NET俱乐部共同主办的2023年成都.NET线下技术沙龙活动在成都市世纪城新会展中心知域空间举行,共计报名人数90多人,实际到场60多人,13:30 ...

  3. Junit启动测试mybatis xml文件BindingException: Invalid bound statement问题

    背景:1.正常启动,xml文件放在java目录和resource目录下均正常 2.junit启动,xml文件放在resource目录下正常,放在java目录下报BindingException错误 m ...

  4. Python argparse参数管理学习笔记1

    1.前言 最近尝试学习使用argparse进行参数管理,顺便改善一下我那丝毫都不专业的.简单粗暴的代码习惯. argparse模块可以让人轻松地编写用户友好地命令行接口,并且还能够自动生成帮助与使用手 ...

  5. 产品质量管理利器,华为云发布CodeArts Defect缺陷管理服务

    摘要:近日,华为云CodeArts Defect缺陷管理服务正式上线,提供结构化缺陷跟踪流程和标准化的质量度量模型. 本文分享自华为云社区<产品质量管理利器,华为云发布CodeArts Defe ...

  6. Selenium 打包为.exe执行

    前言:不依赖环境执行,拓展UI自动化使用的场景 一.项目结构介绍 case:测试用例次存放目录 config:主要存放yaml文件配置 ele:元素的定位以及执行动作 tools:HTMLTestRu ...

  7. Sementic Kernel 案例之网梯科技在线教育

    2023年4月25日,微软公布了2023年第一季度财报,营收528亿美元, 微软CEO纳德称,「世界上最先进的AI模型与世界上最通用的用户界面--自然语言--相结合,开创了一个新的计算时代.」该公司有 ...

  8. DevOps|AGI : 智能时代研发效能平台新引擎(上)

    AGI 的出现,给了我们一个新视角去审视我们做过的系统,尤其是研发效能平台.研发效能平台作为一个工具平台,本质就是提高公司整体产研的效率.AGI 的快速进步大家已经有目共睹,本文就是在项目协同,代码管 ...

  9. Git&GitHub简介与入手(一)

    一.Git版本控制 1.集中式版本控制工具:SVN(版本控制集中在服务器端,会有单点故障风险): 2.分布式版本控制工具:Git: 3.Git简史 Talk is cheap, show me the ...

  10. JavaScript 如何判断一个对象中是否有某个属性?

    今天讲讲,JavaScript 如何判断一个对象中是否有某个属性? 我总结了5个方法: 方法1: if(Obj[a]) {} 缺点:对于参数值为 undefined 和 0 的无效. 方法2: if( ...