背景:前几天在论坛看到有人分享一个调用企业微信接口发送监控消息的帖子(最后会附上链接),看完之后觉得特别赞,原因因为之前我一直当接口报错时发送邮件和短信。用了一段时间觉得,邮件这个非常鸡肋,基本不看,烦的很。一直都想替换掉但是苦于没有更好的,本来以为会很复杂回来看了一下企业微信的api文档,写的真的是不错,上手速度很快,用起来很方便。
大概说一下企业微信的注册流程:
非常简单登录自己的微信创建一个企业(小规模使用不需要实名),创建成功后就能找到corpid和corpsecret的值(不用想的那么复杂就是为了获取access_token)创建一个自己的应用如图:
这里我要说一下刚开始我以为是新建一个微信群来发送我还调式了半天,后来发现不是。
整个调用微信发送消息的思路非常简单就两步,第一步调用gettoken接口来获取access_token。第二步用获取的accesstoken和其他要求的参数后调用message/send接口即可。
思路很简单了,但是呢第一步调用gettoken接口来获取微信设置一个调用频率下面就是api文档内容,如图:
这就出现了两个问题,第一重新获取逻辑?第二时间和有效的accesstoken存在哪里?
老实说这个缓存机制我刚开始都不知道存在哪里,存在变量里面也不行真的一脸懵逼,后来就问了一个rd,他给的思路蛮好的,很简单写在配置文件中,用配制文件的时间戳来判断和请求的时间进行判断当配置文件的时间戳大于请求时间时就取配置文件的accesstoken,反之就请求gettoken接口并更新配置文件,简单好用。并且python有ConfigParser的
第三库写起来非常方便。直接上我写配置文件的代码,如图:
上面这个方法就是复写配置文件,很简单首先实例化ConfigParser类,添加标签,调用set方法设置内容,最后write进去,网上很多ConfigParser库的使用的文章不会的可以模仿练两个就会了。下面是读的方法:
和写的思路一样,这里面有一个小坑,当然返回列表肯定没有问题,从配置文件读取的时间戳是string类型,用time函数调用返回的是float类型,不同类型肯定比较不了,后来我呢先转成int,就是int(config.items("weixin")[0][1]),这就会有一个错误,如图:
整型无法强转浮点型数据。所以呢就用float()转换完成,再用round()四舍五入下就ok了。
下面就是请求gettoken接口的整体代码,如图:
思路我上面写的那些,我就2个点想说的,第一个就是,获取时间戳这个,这个我不记得写没写过,既然想到了就写一下吧。获取本地时间,然后转成数组在转成时间戳,代码如下:
第二个就是图中表2的,为什么要减1000s,原因是因为我觉得卡边界值上有可能会造成accesstoken失效的风险,造成一些不必要的麻烦,不如干脆宽泛一点。
获取accesstoken下面就根据api文档请求send接口就可以发送消息了,实测非常好用,目前看效果不错,下面就是效果:
思路来源:https://testerhome.com/topics/5598