最近放假閑着無聊,研究了一下微信企業號, 打算通過企業號做一個運維報警信息發送的功能,記錄自己的操作
第一步
注冊企業號,網上一搜一大把的教程,這里略過 微信企業號登錄地址 https://qy.weixin.qq.com/
第二步 登錄后 點左側 應用中心 -新建應用
第三步 在第二步第一圖中的自建應用下面找到剛剛新建的應用 拉到最下面有一個模式選擇,點擊回調模式 會看到下圖界面
Token 和EncodingAESKey 點擊隨機獲取即可,上面的url需要你有自己的服務地址 你的服務接口需要跟據微信規則對請求信息加解密,然后返回一個明文字符串,后面會上代碼 url先留空,等下服務弄好再回來填寫 ,此時微信端就設置完成 頁面不要關閉
第四步 先上驗證url代碼 python版本實現 本人是java程序員,用python來搞這個也是一時興趣,用起來到是比java方便些
# -*- coding:utf-8 -*- from SimpleHTTPServer import SimpleHTTPRequestHandler import httpserver from SocketServer import ThreadingMixIn from SocketServer import ThreadingTCPServer import SocketServer from SocketServer import BaseRequestHandler import urlparse from WXBizMsgCrypt import WXBizMsgCrypt import xml.etree.cElementTree as ET hostIP = '' portNum = 8080 serverMessage = "msg_signature" sToken = "第三步中的token" sEncodingAESKey = "第三步中的EncodingAESKey" sCorpID = "這個是你的企業id 在企業號主頁面設置中賬號信息里有" class mySoapServer(SimpleHTTPRequestHandler ): def do_head(self): pass def do_GET(self): try: if self.path.find(serverMessage) == -1: self.send_error(404, message=None) return # 解析請求 result = urlparse.urlparse(self.path) params = urlparse.parse_qs(result.query,True) print params sVerifyMsgSig = params['msg_signature'][0] sVerifyTimeStamp =params['timestamp'][0] sVerifyNonce =params['nonce'][0] sVerifyEchoStr = params['echostr'][0] wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID) ret, sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr) print "ret=",ret self.send_response(200, message=None) self.send_header('Content-type', 'text/html') self.end_headers() if ret == 0: res = sEchoStr.decode("utf8") else: res = "%s" % ret print res self.wfile.write(res.encode(encoding='utf_8', errors='strict')) except IOError: self.send_error(404, message=None) def GetQuery(str): params = str[str.index("?") + 1:] parsed_result = {} list = [param for param in params.split('&')] for item in list: if item.find("=") > -1: name = item[:item.index("=")] value = urlparse.urlparse(item[item.index("=") + 1:]) else: name = item value = "" if name in parsed_result: parsed_result[name].append(value) else: parsed_result[name] = [value] return parsed_result class ThreadingHttpServer(ThreadingMixIn, ThreadingTCPServer): pass myServer = ThreadingHttpServer((hostIP, portNum), mySoapServer) print("Server Started ....") myServer.serve_forever() myServer.server_close()
把上面代碼保存為server.py 把代碼中的 sToken ,sEncodingAESKey sCorpID 換成你自己的,其它不用動
在服務器上運行
python server.py
建議使用python2.6.*版本 其它版本未測試 不保證運行正常
其中 WXBizMsgCrypt包為微信提供 下載地址 http://qydev.weixin.qq.com/download/python.zip
遇到問題執行
yum install python-devel.x86_64
pip install yum -y install gccpip install pycrypto
第五步 返回第三步中填寫url http://你的ip:8080 點擊驗證 不出意外驗證通過
當然,本人python小白到是出了很多意外,坑還比較多, 不過做的過程沒有記錄問題,只記下了最終正確的過程
第六步 上面過程驗證通過后創建一個管理組,這里貌似至少有兩個人關注公眾號,因為管理組要求至少有一個非企業號創建人
添加好后應該就會拿到CorpID 和 Secret 這兩個記錄下來,之后發消息需要
第七步 發送消息 上代碼
#!/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- import urllib import urllib2 import json import datetime class WeiXinSendMsgClass(object): def __init__(self): self.access_token = get_token() self.to_user = "" self.to_party = "" self.to_tag = "2" self.msg_type = "text" self.agent_id = 1 self.content = "" self.safe = 0 self.data = { "touser": self.to_user, "toparty": self.to_party, "totag": self.to_tag, "msgtype": self.msg_type, "agentid": self.agent_id, "text": { "content": self.content }, "safe": self.safe } def send(self, to_user, content): if to_user is not None and content is not None: self.data['touser'] = to_user self.data['text']['content'] = content else: print raise RuntimeError import requests import json url = "https://qyapi.weixin.qq.com/cgi-bin/message/send" querystring = {"access_token": self.access_token} payload = json.dumps(self.data, encoding='utf-8', ensure_ascii=False) headers = { 'content-type': "application/json", 'cache-control': "no-cache", } response = requests.request("POST", url, verify=False,data=payload, headers=headers, params=querystring) return_content = json.loads(response.content) if return_content["errcode"] == 0 and return_content["errmsg"] == "ok": print "Send successfully! %s " % return_content else: print "Send failed! %s " % return_content def get_token(): parameters = { "corpid": "上一步中記錄的CorpID", "corpsecret": "上一步記錄的Secret" } url_parameters = urllib.urlencode(parameters) token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" url = token_url + url_parameters response = urllib2.urlopen(url) result = response.read() token_json = json.loads(result) token_json = token_json['access_token'] return token_json
上面代碼只需要把 corpid 和 corpsecret 換成自己的就可以了 保存為wx_sendMessage.py
然后就可以在你需要發送消息的地方調用 啦
# -*- coding:utf-8 -*- import wx_sendMessage msg = wx_sendMessage.WeiXinSendMsgClass() msg.send("目標用戶賬號", "這里是發送的消息")
大功告成,到此為止已經可以完成對某一個關注企業號的用戶發送消息啦,可是還不夠,群發是必須滴
群組發送的話就再擴展一下send方法 再加一個參數totag 就是標簽id
可以在通訊錄新建標簽,然后把相應的人員加進去 見下圖 右側標簽id就是需要傳的參數值
修改如下,前后代碼省略
def send(self, to_user, totag,content): if to_user is not None and content is not None: self.data['touser'] = to_user self.data['totag'] = totag self.data['text']['content'] = content else: print raise RuntimeError
好啦,這篇文章到這里就結束 了,如果有同學們正好也在做着跟我同樣的事情並且看到我這篇文章的話,有不明白的話可以在文章下面留言,本人看到的話會及時回復的!!!