微信小程序生态15- 批量提交微信小程序审核的一种方式

news2024/9/28 1:16:09

文章导航

微信小程序生态1-初识小程序
微信小程序生态2-创建一个微信小程序
微信小程序生态3-微信小程序登录流程设计
微信小程序生态4-扫普通二维码进入小程序、打开短链接进入小程序
微信小程序生态5-微信公众号扫码登录PC端网页
微信小程序生态6-微信公众号授权登录(适用于H5小程序)
微信小程序生态7-微信公众号设置IP白名单
微信小程序生态8-基于weixin-java-mp实现微信公众号被动回复消息
微信小程序生态9-微信开放平台unionId机制介绍
微信小程序生态10-微信公众号token验证失败
微信小程序生态11-一个二维码同时支持微信、钉钉、支付宝扫码打开小程序
微信小程序生态12-微信小程序开发设置中服务器域名和业务域名
微信小程序生态13-微信公众号自定义菜单、个性化菜单配置
微信小程序生态14-下线已发布的小程序
微信小程序生态15- 批量提交微信小程序审核的一种方式

大家好!我是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的获取需要小程序管理员扫码,已经联系不到了。
上面的这种办法虽说还是要人肉操作小程序助手,但代码的提交已经可以自动化了,如果后面小程序助手开放出一些接口的话,不妨利用一下,也可以减少不少时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节跳动(抖音),软件测试四面,面试题总结!走过路过不要错过

面试一 1、 简单做一下自我介绍 2、 简要介绍一下项目/你负责的模块/选一个模块说一下你设计的用例 3 、get请求和post请求的区别 4、 如何判断前后端bug/3xx是什么意思 5、 说一下XXX项目中你做的接口测试/做了多少次 6、 http和https的区别 7、 考了几个ADB命令/查看连…

JAVA_WEB 购物商城(WEB端)

仓库地址&#xff1a;https://gitee.com/ThMyGitee/EeasyEeasyCityFrontEnd.git CSDN的友友们&#xff0c;项目如果适合您的话&#xff0c;麻烦给个小小的Star&#xff0c;谢谢啦&#xff01; JAVA_WEB 购物商城(WEB端) 效果图: 技术选型: 后端技术栈 Jsp Servlet &#x…

【力扣算法01】之最接近的三数之和

文章目录 前言问题描述示例 1示例 2提示 解题思路代码分析完整代码运行效果如图执行示例代码1执行示例代码2 完结 前言 近期已经将python 的大部分内容讲完了, 接下来的一段时间会着重于算法和面试题相关的内容, 确保学有所用, 同时也为准备进入大厂的童靴们做个铺垫, 记得关注…

抖音seo源码-源代码开发搭建-开源部署操作日志

一、开发者前言大环境概述 抖音seo源码开发是一项非常重要的技术&#xff0c;在抖音上&#xff0c;有很多视频&#xff0c;如果你想让自己的视频脱颖而出&#xff0c;那么就需要优化自己的seo源码。不过&#xff0c;为了保护用户的隐私&#xff0c;抖音并不公开其seo算法的细节…

Alluxio入门手册

1. 定义 Alluxio&#xff08;之前名为 Tachyon&#xff09;是世界上第一个以内存为中心的虚拟的分布式存储系统。 它统一了数据访问的方式&#xff0c;为上层计算框架和底层存储系统构建了桥梁。应用只需要连接Alluxio即可访问存储在底层任意存储系统中的数据。此外&#xff0c…

太难了,别再为难我们这些测试工程师了好吗?

前言 有不少技术友在测试群里讨论&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了,考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些测试工程师了。 这不&#xff0c;为了帮大家节约时…

从零开发短视频电商 Jmeter基础介绍和使用心得

文章目录 基本Jmeter主要元件元件执行顺序提取器Json提取器边界值提取器 高级动态参数参数化前后关联设置Jmeter语言为中文环境非GUI模式压测分布式压测监控模板 基本 Jmeter主要元件 1、测试计划&#xff1a;是使用 JMeter 进行测试的起点&#xff0c;它是其它 JMeter测试元…

一、Zabbix介绍及6.0部署

Zabbix 一、Zabbix介绍1、zabbix是什么&#xff1f;2、zabbix的监控原理是什么&#xff1f;3、Zabbix 6.0新特性:4、Zabbix 6.0 功能组件&#xff1a; 二、Zabbix 6.0 部署1、部署 zabbix 服务端2、部署数据库3、编译安装 zabbix Server 服务端4、部署 Web 前端&#xff0c;进行…

Jmeter接口关联(二)【使用jsonpath表达式提取值】与python中使用jsonpath提取值 完成接口关联

文章目录 前言一、jmeter中使用jsonpath的表达式来提取值 1、使用jsonpath表达式匹配date的所有数据2、使用json提取器提取想要拿取的date值二、在Python中使用Jsonpath来完成接口的关联 ​​​​​​​1、jsonpath使用讲解 2、jsonpath在接口关联中使用总结 前言 Jmeter中关…

NFT + JAVA + 可更新合约

前言 合约部署参考&#xff1a;hardhat 合约开发参考&#xff1a;openzeppelin 钱包&#xff1a;metamask 部署链使用的是&#xff1a;sepolia 合约生成Java&#xff1a;solc 合约部署和测试自行处理 1. 合约 合约代码&#xff1a;ZhuZiNFTU.sol // SPDX-License-Iden…

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057

STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 Proteus仿真小实验&#xff1a; STM32 Proteus UCOSII系统微波炉控制系统DS18B20-0057 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器多个按键蜂鸣器DS18B20温度传感器3个LED灯表示档位加热指…

[SDOI2008] 仪仗队 题解

注&#xff1a;在洛谷同时发布。 题目链接 解题思路 首先观察样例。似乎什么也观察不出来&#xff1f; 那就根据题目描述中所给的图表做。首先找到对角线&#xff0c;将图形沿着对角线一分为二。注意对角线上可以看到一个人&#xff0c;所以答案要加 1 1 1。 其次逐个分析…

-XX:SurvivorRatio

-XX:SurvivorRatio-XXSurvivorRatio eden &#xff1a;from eden &#xff1a;to默认-XXSurvivorRatio8&#xff0c;即 Eden : s0 : s1 8 : 1 : 1&#xff0c;Eden占了年轻代的8/10&#xff0c;不建议修改 case1: -XX:NewRatio4 -XX:SurvivorRatio8 启动参数-Xmx200m -Xms1…

探索Flutter的启动交响曲,详尽指南助力应用启动

Flutter启动流程主要步骤有哪些&#xff1f; 初始化应用程序创建Flutter引擎加载Dart代码构建Widget树创建渲染树更新渲染树呈现界面处理用户输入 Flutter启动需要那些&#xff1f; Dart虚拟机 Dart语言是由Google开发的一种通用编程语言&#xff0c;它可以在不同的平台上运…

基于单片机汽车防盗报警的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;LCD1602液晶显示当前温度信息和参数等功能&#xff1b;3个LED指示灯表示&#xff1a;震动指示灯、人体感应指示灯、防盗模式开启指示灯&#xff1b;按键用来开启防盗模式&#xff0c;设置温度上下限&#xff1b;开启防盗后检测到…

批量识别表格数据——Python调用百度云API

识别效果展示 原始表格 识别处理的表格&#xff0c;可以看到&#xff0c;效果是非常好的 获取KEY 百度智能云 (baidu.com) 产品——文字识别——通用场景 去领取 通用场景OCR——全部——0元领取 去创建 填应用名称——全选——最下面应用描述——立即创建——返回应用列表 …

抖音seo矩阵系统源码|需求文档编译说明(技术)

1.抖音seo矩阵系统文档开发流程 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号。因此&#xff0c;抖音SEO矩阵的主要目…

将Notes应用中的PDF附件转为图片

大家好&#xff0c;才是真的好。 好久没有写专门开发方面的知识&#xff0c;主要是因为看的人太少。嗯&#xff0c;当然&#xff0c;这是表面上的&#xff0c;实际上更重要的原因是&#xff0c;写得很麻烦&#xff0c;而且看的人少。 开发要调试&#xff0c;代码要反复测试&a…

Java入门--变量

变量是什么&#xff1f; 变量是用来记住程序要处理的数据的。 变量的定义格式&#xff1f; 数据类型 变量名 数据 注意&#xff1a;这里面的 是赋值的意思&#xff0c;把等号右边的赋值给左边 变量名命名规则&#xff1a; 以字母、下划线、$ 作为首字母由字母、数字、下…

map和set介绍及使用

目录 一、什么是关联式容器 二、set 1.set的介绍 2.set的使用方法 三、mutiset 四、map 1.map简介 2.map的使用 五、multimap 一、什么是关联式容器 在了解map、set之前&#xff0c;你肯定已经使用过vector、list、deque、forward_list(C11)等这些容器&#xff0c;而他…