微信企业号开发(一)

前言

有段时间要迁移zabbix,迁移之后就不太想使用原来的短信报警和email,每天收到一大堆短信或者邮件真的很烦,虽然不一定都是报警信息。后来看到有人使用微信报警,感觉这个不错,即及时,又不影响生活。
更多关注:http://www.mknight.cn/

微信企业号准备

微信企业号其实和公众号差不多,至少在我这个业余的人来说,两者都是面向用户的一种平台。但是企业号申请注册时候填写为团队,就可以省事很多,不用再提交一大堆资料,也不用申请什么认证之类的东西。


2、填写注册信息


3、新建用户用于测试信息,也可以把用户加入到分组或者标签。

4、新建应用


5、应用设置,权限等等

这里要记住应用ID,和可见范围,以后用的到,毕竟你要知道是给谁发信息,谁又是否有权限。

连接微信企业号

主动调用是最基本的连接模式,当你的应用调用企业号时,需使用Https协议、Json数据格式、UTF8编码,访问域名为https://qyapi.weixin.qq.com,数据包不需要加密
在每次主动调用企业号接口时需要带上AccessToken参数。AccessToken参数由CorpIDSecret换取。
CorpID是企业号的标识,每个企业号拥有一个唯一的CorpID;Secret是管理组凭证密钥。
系统管理员可通过管理端的权限管理功能创建管理组,分配管理组对应用、通讯录的访问权限。完成后,管理组即可获得唯一的secret。系统管理员可通过权限管理查看所有管理组的secret,其他管理员可通过设置中的开发者凭据查看。
当企业应用调用企业号接口时,企业号后台为根据此次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。

获取AccessToken

AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。
AccessToken需要用CorpIDSecret来换取,不同的Secret会返回不同的AccessToken。

请求说明:

请求参数:

import json
from urllib import request,parse
from urllib.error import  HTTPError

class WeChat(object):
    __token_id = ''

    # init attribute
    def __init__(self, url):
        self.__url = url.rstrip('/')
        self.__corpid = 'wxxxxxxxxxx'
        self.__secret = '_2Dxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    # Establish a connection
    def getToken(self, data, url_prefix='/'):
        #拼接URL
        url = self.__url + url_prefix + 'gettoken?'
        print('url',url)
        try:
            response = request.Request(url + data)
        except KeyError:
            raise KeyError
        result = request.urlopen(response)
        #对数据解码
        content = json.loads(result.read().decode('utf-8'))
        print('建立连接', content)
        return content
    # Get TokenID
    def authID(self):
        params = {'corpid': self.__corpid, 'corpsecret': self.__secret}
        #对ID和secret进行编码,注意Python2和Python3的方式是不一样的
        data = parse.urlencode(params)
        content = self.getToken(data)
        print('con',content)

        try:
            self.__token_id = content['access_token']
            print('token', content['access_token'])
        except KeyError:
            raise KeyError
    # Get sendmessage,url
    def postData(self, data, url_prefix='/'):
        #拼接URL
        url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
        print(url, self.__token_id)
        data = data.encode('utf-8')
        try:
            res = request.urlopen(url, data)
        except HTTPError as e:
            if hasattr(e, 'reason'):
                print('reason', e.reason)
            elif hasattr(e, 'code'):
                print('code', e.code)
            return 0
        else:
            content = json.loads(res.read().decode('utf-8'))
            res.close()
        return content

    # send message
    def sendMessage(self, touser, subject, content):

        self.authID()
        data = json.dumps({
            #接收者,也可以是部门或者标签
            'touser': touser,
            #发送数据类型,也可以为图片等等
            'msgtype': "text",
            #应用ID
            'agentid': "1",
            #文本内容,可以拼接subject和content
            'text': {
                'content': subject + '\n' + content
            },
            'safe': "0"
        }, ensure_ascii=False)

        response = self.postData(data)
if __name__ == '__main__':
    #初始化
    a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
    # a.sendMessage(sys.argv[1],sys.argv[2],sys.argv[3]) 用户,主题,信息
    msm = '试试能不能发消息'
    project = "Test"
    a.sendMessage('hahah', project, msm)

这段代码很容易理解,初始化类的时候,首先执行getToken,获取token后传入authID进行验证。之后再执行sendMessage准备好要提交的数据,最后再用postData提交就结束啦。


现在既然可以做到通过企业号发信息,那么接下来的使用zabbix也必定简单多了,当然还有别的用途,比如定时发个笑话啦,天气预报啦等等。

更多关注:http://www.mknight.cn/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前面一篇随笔企业号的一些基础信息,以及介绍如何配置企业号的回调方式实现和企业号服务器进行沟通的桥梁。本篇主要还是继...
    伍华聪_开发框架阅读 4,922评论 0 49
  • 1.背景 现实生产环境中,我们通常使用邮件和短信接受zabbix报警信息,但是邮件经常被工作人员搁置在角落中甚至被...
    Zero___阅读 5,450评论 0 10
  • 1、开启公众号开发者模式 公众平台的技术文档目的为了简明扼要的交代接口的使用,语句难免苦涩难懂,甚至对于不同的读者...
    good7758阅读 5,476评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,280评论 25 709
  • 我相信你深愛著的人 一定是閃閃發光 我也希望你相信 世間所有用力的思念都會給你最期待的結局 因為 每一座孤島 都被...
    劉iuu阅读 1,144评论 0 0

友情链接更多精彩内容