微信企业号开发(一)

前言

有段时间要迁移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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

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