批量管理上百个小程序经验

6 篇文章 0 订阅
1 篇文章 0 订阅

声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关

由于公司业务需要,需要管理几百个小程序,刚开始不多的时候还可以通过手动扫码登录,但随着时间积累,小程序越来越多,管理起来就很痛苦了,经过大概1周的开发,利用node的爬虫,解决了这个问题,

整体流程

  • 先建立一个可视化界面,来管理几百个小程序的账号和密码
  • 一次性登录50个小程序(因为一部手机只能绑定50个小程序管理员),并获取每个小程序的token和cookie,存在redis
  • 每次操作相应api(需要爬微信接口),都可以直接通过token和cookie来操作

登录逻辑

  1. 通过账号密码来获取登录cookie
  2. 通过cookie去下载二维码
  3. 每次一个账号密码新建立一个轮询来判断是否扫码成功
  4. 登录成功后拿到token,把token和cookie存在redis里面
//账号密码登录获取token并且下载二维码,成功一个就新建一个轮询来监听扫码是否成功

let config = {
  returnfn: null,			//回调方法
  loginindex: 0,			//当前需要执行多少个
  imglist: [],				//图片列表
  xcxKey: []				//小程序的账号密码列表
}
for (let item of config.xcxKey) {
    config.loginindex += 1;
    getqrcode(item)
}

function getqrcode(item) {
  request({
    'method': 'POST',
    'url': 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin',
    'form': {
      "username": item.miniAccount,
      "pwd": md5(item.miniPassword),
      "imgcode": "",
      'f': 'json',
      'userlang': 'zh_CN',
      'redirect_url': "",
      'token': "",
      'lang': 'zh_CN',
      'ajax': 1,
    },
    'headers': {
      "Origin": "https://mp.weixin.qq.com",
      'referer': `https://mp.weixin.qq.com/`,
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48",
    }
  }, async function (error, response) {
    try {
      let responseCookies = response.headers['set-cookie'];
      let requestCookies = '';
      for (let i = 0; i < responseCookies.length; i++) {
        let oneCookie = responseCookies[i];
        oneCookie = oneCookie.split(';');
        requestCookies = requestCookies + oneCookie[0] + ';';
      }
      let imgurl = Math.random().toString(36).substr(2) + tool.getTime()
      await request({
        'url': `https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=getqrcode&param=4300&rd=123`,
        'headers': {
          Cookie: requestCookies,
          "Referer": `https://mp.weixin.qq.com/cgi-bin/bizlogin?action=validate&lang=zh_CN&account=${item.miniAccount}&token=`,
        }
      }).pipe(fs.createWriteStream(`./img/${imgurl}.png`));
      config.imglist.push({
        name: item.name,
        QrCode: `图片文件夹/${imgurl}.png`
      })
      new getLoginState(item, requestCookies)
    } catch (e) {
      console.log(e)
    }
    config.loginindex -= 1;
    if (config.loginindex == 0) {
      config.returnfn(config.imglist)
    }
  });
}

// 循环调用二维码
function getLoginState(item, cookie) {
  function forGetLoginState() {
    console.log(`${item.name}未扫码,三分钟内扫码`)
    $ajax.get(`https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1`, {
      referer: `https://mp.weixin.qq.com/cgi-bin/bizlogin?action=validate&lang=zh_CN&account=${item.miniAccount}&token=`,
      Cookie: cookie
    }).then((res) => {
      if (res.base_resp.ret == 1 || res.status == 0 || res.status == 4) {
        setTimeout(() => {
          forGetLoginState()
        }, 3000)
      } else {
        new saveToken(item, cookie)
      }
    })
  }
  forGetLoginState()
}

//扫码成功后保存token
function saveToken(item, cookie) {
  request({
    'method': 'POST',
    'url': 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login',
    'form': {
      userlang: 'zh_CN',
      redirect_url: '',
      token: '',
      lang: 'zh_CN',
      f: 'json',
      ajax: '1'
    },
    'headers': {
      "Origin": "https://mp.weixin.qq.com",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48",
      Cookie: cookie,
      referer: `https://mp.weixin.qq.com/cgi-bin/bizlogin?action=validate&lang=zh_CN&account=${item.miniAccount}&token=`
    }
  }, function (error, response) {
    console.log(`${item.name}token获取成功`)
    try{
      let responseCookies = response.headers['set-cookie'];
      let requestCookies = '';
      for (let i = 0; i < responseCookies.length; i++) {
        let oneCookie = responseCookies[i];
        oneCookie = oneCookie.split(';');
        requestCookies = requestCookies + oneCookie[0] + ';';
      }
      let body = JSON.parse(response.body || {});
      let token = "";
      if (body.redirect_url) {
        token = body.redirect_url.split('token=')[1]
      }
      redis.setRedisObj(`${item.miniAccount}_cookie`, requestCookies, false)
      redis.setRedisObj(`${item.miniAccount}_token`, token, false)
      redis.client.expire(`${item.miniAccount}_cookie`, 36000)
      redis.client.expire(`${item.miniAccount}_token`, 36000)
    }catch(e){
      console.log(e)
    }
    
  });
}

调用微信公众平台相关接口,提审,发布审核,查看广告审核状态等

这个就可自己通过查看接口,获取相关接口地址,只需要每次调用的时候都要传入token和cookie,如果需要扫码,就和登录流程一样,下载二维码到本地返回到前端,每次新建一个轮询来监听扫码是否成功

无需编程,各行业模版直接套用,一键生成,轻松搭建小程序 界面自由DIY,打造个性小程序 可拖拽式DIY布局,开启自定义功能新征程,无需繁琐操作,轻松拖拽即可实现界面布局;同步实时预览,可视化操作让您所见即所得,随心打造个性小程序。 丰富功能组件,应多种场景需求 多样的功能组件,不受行业框架限制,可自由组合适应当前场景,让您轻松满足客户的定制需求。 大量插件可用,实现多样营销功能 积分签到、积分兑换商城、拼团、店内点餐、手机客服等插件可用,满足各种行业场景营销需求,助力客户小程序营销推广。 无需技术基础,轻松玩转小程序 无需代码编程,无需技术基础,简单的操作页面,清晰的模块分划,详尽的功能组件,让您短时间即可轻松玩转小程序。 垂直研发,深度挖掘行业解决方案 深入行业了解不同行业的痛点和需求,致力于解决实际问题,给客户带来实际价值,深度挖掘不同行业的解决方案。 功能介绍 分销模块:帮助企业快速搭建企业独立在线商城,自由选择分销模式,从多方位,多角度提供服务支持,助力商户实现分销渠道裂变销货,连锁门店线上化高效经营。 消息通知:设置商品状态通知、成团通知、预约预定通知、系统表单通知、会员卡开卡通知等消息模板,配置商家收发消息邮箱实现邮件通知。 万能表单:超强大的自定义表单模块,不同行业和岗位的人员不需要特殊技能,都可以方便的创建出符合业务需求的表单小程序。数据收集,简单方便,客户登记、意见反馈、活动报名等轻松搞定。万能表单自动收集并整理数据,帮助用户节省工作时间,高效率、更便捷的完成工作。 文章管理系统:对文章详细内容、所属栏目、访问量、评论、分享操作、底部菜单、关联文章等进行管理。 预约报名:报名设预约报名期,在期限内预约用户进行报名。预约报名期内,用户通过填写和提交个人信息的方式进行报名,在约定期限内报满为止。 充值管理:对充值优惠规则、积分规则等进行设置和管理。 商品管理:对多规格商品、秒杀商品、预约商品进行设置和管理。 组图管理:对图片、幻灯片进行设置和管理小程序管理:对小程序跳转进行管理。 评论管理:对文章、组图、商品等内容下的评论进行审核和管理。 内容库管理:对多种模型的内容(文章、组图、商品)进行快速筛选 会员管理:对会员信息,会员开卡,会员卡折扣,会员卡积分等进行设置和管理。 多商户插件:多商户入驻平台插件 自定义菜单:底部菜单栏DIY,自定义外观、功能。 广告设置:对开屏广告、首页广告、弹窗广告等进行设置和管理。 一键模板:多行业优秀模板可选,一键生成场景适用小程序页面。 积分管理:对分享获取积分、充值获取积分、签到获取积分等多种积分获取形式以及积分兑换进行管理。 手机客服插件:商家为客户提供线上的咨询服务,通过手机客服为客户解决需求问题。 订单管理:对多规格商品、秒杀商品、预约预定商品等订单状态操作。 数据分析:对小程序流量数据、订单数据、交易数据等进行分析,统计活跃用户和热销商品等。 支付宝小程序:支付宝小程序制作与发布,无需编程,一键生成。 百度小程序:百度小程序制作,无需编程,一键生成,百变应用,自由组合。 权限管理:自定义配置用户可使用的功能,分别给予权限。 可拖拽DIY:APP设计制作一站式解决方案,创造出独一无二的专属小程序。无需懂代码,都可以借助DIY官网可视化工具,顷刻间打造自已的个性化移动应用。 多门店:多门店共享数据,可切换不同城市显示,搜索门店并显示门店详情。 付费视频系统:付费视频是为了维护视频版权,促进用户知识付费的一种手段。 多规格商城:多规格商城是指在商城中能够选取规格、多规格匹配。点击购买弹出弹框,用来选择规格和选择购买数量,并和库存匹配。 积分兑换商城:用户获得积分后可以在积分商城中兑换优惠券、礼品卡或商家指定商品等。 多栏目管理:对所有内容模型的栏目进行管理。 积分签到插件:用户登陆商家小程序进行每日签到,获取相应积分。 代理商管理:拥有底层源码系统,发展自己的代理商,列表清晰展示各代理商状态,详细设置对代理商账号信息、创建小程序的个数、系统到期时间等进行管理。 店内点餐插件:无需呼叫服务员,省去排队等待时间,立即点餐,即点即用。线上线下零距离对接商家厨房最短时间送餐上桌,一键快捷支付,省时省力。每个订单实时对接后台,财务报表、资金流水、客流量盈亏分析随时掌握。 拼团商城插件:参加拼团的商品都有单独购买价格和拼团价格,在规定时间内达到相应的标准人数购买,则拼团成功。 优惠券:优惠券是一种相对成熟的营销工具,可在后台添加优惠券 付费预约:通过付费缴纳定金的方式进行预约,用户预约成功后在对应时间获得商户指定商品或服务。 秒杀商城插件:商品类型为秒杀商品,设置秒杀时间、限定数量,在规定内买家以秒杀价购买商品。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值