首先,通过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);
}
},
});
},
这样就能在打开企微关联的自建应用的时候,自动静默登录程序了
注意:里面的一些接口是要自己实现的,用来从后端获取到信息,不要想着复制代码直接能用~这个只是方法逻辑的说明。
文章浏览阅读891次。leetcode:98. 验证二叉搜索树思路:回到二叉搜索树,当前节点大于左子树,小于右子树。假如此树是二叉搜索树,那么应该满足这种有序的状态。递归递归思路,需要注意右子树的最小值为父亲节点,左子树的最大值也为父亲节点。class TreeNode { int val; TreeNode left; TreeNode right; Tree..._基于树和图的慢一点的算法
文章浏览阅读9.6k次,点赞4次,收藏10次。 如果要训练(测试)的样本很多,达到上百上千万,单机载入不了内存时,可以采用如下方法:1、生成libsvm文件 将要处理的数据分批(比如一次读10000行/个样本)读入内存,缺失值填充、特征过程等处理完毕之后,使用sklearn.datasets.dump_svmlight_file()将其转为libsvm数据格式保存到磁盘;libsvm格式也是每行一个样本,所以多..._xgboost 训练大数据,内存不够 out of memory
文章浏览阅读1.4k次。一、?_inline在c++中是什么意思
文章浏览阅读2.1k次。最近要在开源的平板上做Linux的项目,需要用到视频流服务器,首选肯定是MJPG-Streamer,但是按照之前的调试记录发现有问题,总是报一个I2C的错误,错误信息如下所示:MJPG-streamer [81]: starting applicationMJPG Streamer Version.: 2.0MJPG-streamer [81]: MJPG Streamer Versio_intitle:xfer服务
文章浏览阅读2.1k次。百度站长四种提交方式:主动推送:最为快速的提交方式,建议将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。sitemap:可以定期将网站链接放到 Sitemap 中,然后将 Sitemap 提交给百度。百度会周期性的抓取检查提交的 Sitemap,对其中的链接进行处理,但收录速度慢于主动推送。手工提交:如果不想通过程序提交,那么可以采用此种方式,手动将链接提交..._wordpress 独立站 百度收录 首图
文章浏览阅读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
文章浏览阅读4w次,点赞9次,收藏113次。plot() 函数是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。使用plot 函数之前,必须首先定义好曲线上每一点的x 及y 坐标.下面简单介绍!工具/原料matlab2012b+win7.8方法/步骤1 plot(x) 当x 为一向量时,以x 元素的值为_matlab 画曲线 向量函数
文章浏览阅读1.3k次。看到git上有人写了一个自动预约的脚本,正好前段时间在学python爬虫和脚本,索性也写了一个,大佬直接略过。目前没有做图形化,账号和预约信息也是手动输入的,我也只写了羽毛球和乒乓球,其实就是一个属性的值。嫌麻烦的同学可以写一个文本文件,保存这些信息,然后倒入到脚本里,每次稍作修改就可以了。如果基友固定的话,也可以写死在脚本里。本篇博客只说下博主写脚本的时候遇到的问题和心路历程,只是想要代码的可以..._东南大学抢课脚本
文章浏览阅读801次,点赞3次,收藏7次。JAVA(手写)简单实现ArrayList和LinkedList大家都知道在java学习中list类的实现类中有ArrayList 和LinkedList,其中ArrayList是使用数组实现,而LinkedList则是用链表实现的。今天就自己去用java去简单实现一下它们。1.ArrayList的实现1.类必须的属性一个object的数组list的长度2.基本代码`public c..._java 手写实现arraylist
文章浏览阅读1.1k次,点赞4次,收藏3次。STM32CubeMX学习笔记一前言学如逆水行舟不进则退,唉!多想学一个技能便可以走遍天下。哈哈!打扰了,我还没睡醒。前段时间花费了一些精力学习的STM32CubeMX 4.27.0版本软件,现如今它却去了趟美容院,给自己更新了,多无奈呀!对我们这些上了年龄的工科男又多了个挑战。之前在项目中用其搭建了一个项目框架,在添加芯片的一些内部驱动那是相当的便捷,图形化对于代码的编写简单化了许多,钩钩选选便可以建一个工程。废话不多说,下面来从零开始学习这个,本博主只为记录一下笔记便于日后回忆,毕竟上了年纪了,有兴_stm32cubemx software v6.1.2
文章浏览阅读3.7k次,点赞3次,收藏7次。病毒常用的技俩之一就是创建一个傀儡进程,借助傀儡进程,执行自己的恶意代码。其实现方法:1.以挂起方式创建一个进程2.写入一个PE文件到这个挂起的进程的内存,可能会使用API WriteProcessMemory或MapViewOfSection那一套API来完成这个操作3.调用ResumeThread恢复进程执行对付这种我们可以在它写入数据到目标进程时下断点,例如WriteProcess..._dump修复
文章浏览阅读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