利用 微信公众平台 查看管理linux服务器
前沿:
最近懒得做运维自动化了,看到市场部门的同事在调用公众平台的接口,感觉很有意思~就想试试用这个管理简单的管理linux主机,并推送告警信息。
打算这段时间主要再扩展下这个应用~
1 增加一些危险字符的判断,可以自己指定一个转义字符
2 针对post的数据进行加密下 比如 555ifconfig 这个555就是密码,在后端会有判断的,没有555的一切命令都不会执行
3 微信平台也可以恢复一些图文的,我可以把流量图,或者是各种rrd库里面的图,发给客户端
申请微信公众平台
登陆公众平台,点击 设置 -->自定义回复 -->调用公众平台
在 URL 中填写你的URL地址,请根据个人情况填写 Token 并记住,这个 Token 是你随意去的字符串.以防止别人盗用.
点击提交,提示 提交成功 字样.
我要怎么实现~
我发个信息过去,微信是把消息post到的你服务器,然后我获取你要查的东西后,我调用下linux的命令,或者是已经写过的函数,得出结果,最后返回给客户。
必须是80端口的,微信的接口很二的~
python app.py 80
# -*- coding:utf-8 -*-
from bottle import debug, default_app, run, get, request, post
import sys, os, time, libxml2dom
@get('/')
def index():
return request.GET.get('echostr')
@post('/')
def index_post():
for key, value in request.POST.allitems():
doc = libxml2dom.parseString(key)
_to = doc.xpath('//FromUserName')[0].textContent
_from = doc.xpath('//ToUserName')[0].textContent
cmd = doc.xpath('//Content')[0].textContent
aa=os.popen(cmd).read()
return """
%s
0
"""%(_to, _from, int(time.time()), aa)
if __name__ == "__main__":
# Interactive mode
debug(True)
port = int(sys.argv[1] if len(sys.argv) > 1 else 8888)
run(host='0.0.0.0', portport=port, reloader=True)
else:
# Mod WSGI launch
os.chdir(os.path.dirname(__file__))
app = default_app()
下面是php的代码,同事正在用~ 说明代码是没有问题的,具体的请自行修改下~
微信公众平台提供PHP代码,可以验证,但是收到用户消息是不能直接回复的,需要在头部添加一段代码$wechatObj->responseMsg();
也可以直接复制下面的代码,粘贴即用,如果您的网站还没被验证,参考本博其它相关文章
把$contentStr = "Welcome to wechat world!";换成你想回复的内容就可以了,
$keyword代表用户发送给你的消息,你可以根据相应的信息返回值
当你启用自定义回复接口后原来的新用户进入后的提示信息就没有了,但是微信提供了当新用户加入时自动发给你一个字符串,字符串是Hello2BizUser,你可以根据这个返回给新关注的用户一些提示信息
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$timetime = time();
$textTpl = "
%s
0
";
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>