微信小程序关联企业微信的自建应用后,静默登录_企业微信静默登录-程序员宅基地

技术标签: 微信小程序  微信  小程序  

首先,通过wx.qy.login获取到code,然后把这个code发送给我们自己写的接口api.getCompanyId,去请求到企业微信的id


   wx.qy.login({
      success(res) {
        console.log("企业微信登录");
        console.log(res);
        if (res.code && res.code != 6000) {
          // 通过this.setData方法,将上方data中的参数进行设置
          this.setData(
            {
              code: res.code,
            },
            () => {
              /**
               * 通过下面这个接口去获取企业微信的id
               */
              api.getCompanyId(
                {
                  code: res.code,
                },
                (res) => {
                  console.log("企业微信的公司id");
                  console.log(res);
                  /**
                   * 企业微信的登录=====获取公司id成功后 调用企业微信登录接口
                   */
                  this.qyWxLogin(res);
                }
              );
            }
          );
        } 
      //请求企微code失败
      else if (res.code && res.code == 500) {
          $Toast({
            content: "登录失败,请重试!",
          });
          console.log("获取code失败!" + res.errMsg);
        }
      },
    });

 拿到code 和 企微的id后,可以通过自己写的方法去获取这个员工的信息了,把这些信息存到sessionStorage里


  qyWxLogin: function (companyId) {
    let self = this;
    $Toast({
      content: "正在登录...",
      type: "loading",
    });
    /**
     * 企业微信环境 获取code
       之所以要再请求一次code,是因为这个code只有5分钟的时效,为了防止过期,所以再请求一次就行了
     */
    wx.qy.login({
      success(res) {
        console.log(res);
        if (res.code && res.code != 6000) {
          self.setData(
            {
              code: res.code,
            },
            () => {
//通过这个自己写的接口,传入code和企微id,去获取当前这个员工的信息
              api.getUserInfo(
                {
                  code: res.code,
                  companyId: companyId,
                },
                (res) => {
                  console.log("接口返回的员工信息");
                  console.log(res);
                  setTimeout(() => {
                    $Toast.hide();
                  }, 100);
                  if (res.access_token) {
                    try {
                      app.globalData.companyId = res.companyId;
                      wx.setStorageSync("loginStatus", res.access_token);
                    } catch (e) {}
//可以跳转页面了
                    wx.reLaunch({
                      url: "../../pages/index/index",
                    });
                  } else {
                    self.setData({
                      visible: true,
                      tips: "账号或密码错误!",
                    });
                  }
                }
              );
            }
          );
        } else if (res.code && res.code == 500) {
          $Toast({
            content: "登录失败,请重试!",
          });
          console.log("获取code失败!" + res.errMsg);
        }
      },
    });
  },

这样就能在打开企微关联的自建应用的时候,自动静默登录程序了

注意:里面的一些接口是要自己实现的,用来从后端获取到信息,不要想着复制代码直接能用~这个只是方法逻辑的说明。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/black_cat7/article/details/120041722

智能推荐

算法:树和图-实战_基于树和图的慢一点的算法-程序员宅基地

文章浏览阅读891次。leetcode:98. 验证二叉搜索树思路:回到二叉搜索树,当前节点大于左子树,小于右子树。假如此树是二叉搜索树,那么应该满足这种有序的状态。递归递归思路,需要注意右子树的最小值为父亲节点,左子树的最大值也为父亲节点。class TreeNode { int val; TreeNode left; TreeNode right; Tree..._基于树和图的慢一点的算法

xgboost 训练大数据,内存不够 out of memory_xgboost 训练大数据,内存不够 out of memory-程序员宅基地

文章浏览阅读9.6k次,点赞4次,收藏10次。 如果要训练(测试)的样本很多,达到上百上千万,单机载入不了内存时,可以采用如下方法:1、生成libsvm文件 将要处理的数据分批(比如一次读10000行/个样本)读入内存,缺失值填充、特征过程等处理完毕之后,使用sklearn.datasets.dump_svmlight_file()将其转为libsvm数据格式保存到磁盘;libsvm格式也是每行一个样本,所以多..._xgboost 训练大数据,内存不够 out of memory

C++中内联函数(inline)详解_inline在c++中是什么意思-程序员宅基地

文章浏览阅读1.4k次。一、?_inline在c++中是什么意思

FSPAD_702 MJPG-Streamer视频流服务器移植心得_intitle:xfer服务-程序员宅基地

文章浏览阅读2.1k次。最近要在开源的平板上做Linux的项目,需要用到视频流服务器,首选肯定是MJPG-Streamer,但是按照之前的调试记录发现有问题,总是报一个I2C的错误,错误信息如下所示:MJPG-streamer [81]: starting applicationMJPG Streamer Version.: 2.0MJPG-streamer [81]: MJPG Streamer Versio_intitle:xfer服务

优化 WordPress 网站让百度快速收录_wordpress 独立站 百度收录 首图-程序员宅基地

文章浏览阅读2.1k次。百度站长四种提交方式:主动推送:最为快速的提交方式,建议将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。sitemap:可以定期将网站链接放到 Sitemap 中,然后将 Sitemap 提交给百度。百度会周期性的抓取检查提交的 Sitemap,对其中的链接进行处理,但收录速度慢于主动推送。手工提交:如果不想通过程序提交,那么可以采用此种方式,手动将链接提交..._wordpress 独立站 百度收录 首图

FAQ_全志平台Tina系统改用gpt分区表后系统启动异常问题解决方法(Waiting for root device /dev/nand0p3...)_mmc:failed to get gpios-程序员宅基地

文章浏览阅读3k次。FAQ_全志平台Tina系统改用gpt分区表后系统启动异常问题解决方法(Waiting for root device /dev/nand0p3...)【现象】在升级到tina3.0.7使用R328芯片的时候,系统无法启动,报错“Waiting for root device /dev/nand0p3..”[ 4.012988] Hardware nam..._mmc:failed to get gpios

随便推点

matlab中plot()函数用法大全_matlab 画曲线 向量函数-程序员宅基地

文章浏览阅读4w次,点赞9次,收藏113次。plot() 函数是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。使用plot 函数之前,必须首先定义好曲线上每一点的x 及y 坐标.下面简单介绍!工具/原料matlab2012b+win7.8方法/步骤1 plot(x) 当x 为一向量时,以x 元素的值为_matlab 画曲线 向量函数

python 写脚本 预约课程_写了一个预约东南大学体育场馆的python脚本,目前刚刚实现功能,后续会继续完善...-程序员宅基地

文章浏览阅读1.3k次。看到git上有人写了一个自动预约的脚本,正好前段时间在学python爬虫和脚本,索性也写了一个,大佬直接略过。目前没有做图形化,账号和预约信息也是手动输入的,我也只写了羽毛球和乒乓球,其实就是一个属性的值。嫌麻烦的同学可以写一个文本文件,保存这些信息,然后倒入到脚本里,每次稍作修改就可以了。如果基友固定的话,也可以写死在脚本里。本篇博客只说下博主写脚本的时候遇到的问题和心路历程,只是想要代码的可以..._东南大学抢课脚本

JAVA(手写)简单实现ArrayList和LinkedList_java 手写实现arraylist-程序员宅基地

文章浏览阅读801次,点赞3次,收藏7次。JAVA(手写)简单实现ArrayList和LinkedList大家都知道在java学习中list类的实现类中有ArrayList 和LinkedList,其中ArrayList是使用数组实现,而LinkedList则是用链表实现的。今天就自己去用java去简单实现一下它们。1.ArrayList的实现1.类必须的属性一个object的数组list的长度2.基本代码`public c..._java 手写实现arraylist

STM32CubeMX学习笔记一 《安装软件》_stm32cubemx software v6.1.2-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏3次。STM32CubeMX学习笔记一前言学如逆水行舟不进则退,唉!多想学一个技能便可以走遍天下。哈哈!打扰了,我还没睡醒。前段时间花费了一些精力学习的STM32CubeMX 4.27.0版本软件,现如今它却去了趟美容院,给自己更新了,多无奈呀!对我们这些上了年龄的工科男又多了个挑战。之前在项目中用其搭建了一个项目框架,在添加芯片的一些内部驱动那是相当的便捷,图形化对于代码的编写简单化了许多,钩钩选选便可以建一个工程。废话不多说,下面来从零开始学习这个,本博主只为记录一下笔记便于日后回忆,毕竟上了年纪了,有兴_stm32cubemx software v6.1.2

病毒分析常用技巧-修复内存dump文件_dump修复-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏7次。病毒常用的技俩之一就是创建一个傀儡进程,借助傀儡进程,执行自己的恶意代码。其实现方法:1.以挂起方式创建一个进程2.写入一个PE文件到这个挂起的进程的内存,可能会使用API WriteProcessMemory或MapViewOfSection那一套API来完成这个操作3.调用ResumeThread恢复进程执行对付这种我们可以在它写入数据到目标进程时下断点,例如WriteProcess..._dump修复

Qt|遍历当前路径下所有文件夹\文件路径\文件_qt遍历文件夹中的exe-程序员宅基地

文章浏览阅读975次。QStringList TraverseFolder(const QString &_path){ QStringList file_name; QDir dir(_path); if(!dir.exists()) return file_name; dir.setFilter(QDir::Dirs); // 筛选条件,只遍历文件夹 QFileInfoList list = dir.entryInfoList(); foreach(QFileInfo fullDir,dir.ent_qt遍历文件夹中的exe

推荐文章

热门文章

相关标签