微信公众平台实现控制功能的一些思路
微信公众平台大家应该不陌生,它与硬件的一些结合也有一些案例。例如:与路由器配合使用。
平台:pc,微信公众平台
pc端程序:c#桌面小程序
虽然还没有涉及到开发板,我只是提供一种可以操控pc(也可以说是一种硬件吧)的一些思路。
流程:第一次使用-》登陆pc端程序,用户向相关微信发送控制命令(获取到id),将id、定时、功能填好并启动软件
,用户再次发送指令即可控制pc。
再次使用时已经保存好了id,无需再次输入。
微信返回页面:
登陆界面:
启动界面:
微信开发模式下的文件:
weixin.php
query.php
pic.php
数据库:
control_weixin、字段:`content`,`type`,`uid` , `mid` , `time`
图片存储地址:
pic
关机指令-》微信(判断,将关机、用户id、消息id、发送时间写进数据库)-》pc端程序一直post数据(id)到query.php获取在最近时间数据库中与id匹配的控制信息(关机),并返回消息id、指令给pc端程序,程序通过判断执行定时关机(发送重启和取消关机类似)
<?php
$db = new SaeMysql();
$str = "SELECT `mid`, `content`, `time` FROM `control_weixin` WHERE `uid` = '%s' ORDER BY `time` DESC LIMIT 1";
$sql = sprintf($str, $_GET['uid']);
$data = $db->getData($sql);
if ($data) {
if ((time() - $data["time"]) <= 100 ) {
echo sprintf('%s,%s', $data["mid"], $data["content"]);
} else {
echo '0,expired';//务必保留,否则无数据返回则会报错!因为客户端没有做多余判断
}
} else {
echo '0,null';//务必保留,否则无数据返回则会报错!因为客户端没有做多余判断
}
?>
屏幕截图指令-》微信(判断,将屏幕截图、用户id、消息id、发送时间写进数据库,返回图片地址(几秒后可以查看))-》pc端程序一直post数据(id)到query.php获取在最近时间数据库中与id匹配的控制信息(屏幕截图),并返回消息id、指令给pc端程序,判断,生成一张截图,将截图发给存储文件pic.php,将图片存储起来,图片链接就是微信返回的图片地址。
<?php
$target_path = SAE_TMP_PATH;
$basename=basename( $_FILES['uploadedfile']['name']);
$domain='pic';
$uuid=md5(uniqid(rand(), true));
$target_path = $target_path.$uuid;
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
} else{
echo "There was an error uploading the file, please try again!";
}
$file_contents= file_get_contents($target_path);
$s = new SaeStorage();
//$filename=$uuid.'/'.$basename;
$filename=$_GET["MsgId"].".jpg";
$s->write($domain, $filename ,$file_contents);
$url=$s->getUrl($domain, $filename );
?>
以上思路根据某贴子加上自己的改进而来。
pc端程序下载地址:http://zhbitwiki-wx.stor.sinaapp.com/WxControl1.0.rar
可以的 现在联通把我家的80端口封了,不能做服务端.请问楼主是怎么弄的? zixi0007 发表于 2014-9-25 09:37 static/image/common/back.gif
现在联通把我家的80端口封了,不能做服务端.请问楼主是怎么弄的?
在sae上部署代码 其实也有办法绕过,我写了一个php的程序,可以绕过80端口与微信对接。
用CT做微信的服务端挺不错,可控性高。 jerryli 发表于 2014-9-25 12:05 static/image/common/back.gif
其实也有办法绕过,我写了一个php的程序,可以绕过80端口与微信对接。
用CT做微信的服务端挺不错,可控性高 ...
请问怎么搞的通过sae中转吗 Marquis 发表于 2014-9-25 10:51 static/image/common/back.gif
在sae上部署代码
sae和pc端如何通讯呢? zixi0007 发表于 2014-9-25 12:33 static/image/common/back.gif
请问怎么搞的通过sae中转吗
恩,差不多,做了一个反向代理,找个有80口的服务器放个转发程序,转发到你家里的Web口上,不要用80口因为是被封掉的,改用其他的口子如8888或则随便。
微信 <---> 公网服务器 <-->家里的CT服务器
代码如下:<?php
/**
* 反向代理处理类
* <li>将得到的get请求转发到另一个网站,并取回返回信息送到页面上</li>
* @version 1.0.0.3
* @author JerryLi lijian@dzs.mobi
* */
class CReverseProxy{
private $_sOutBuf = null;
/**
* 构造
* @param string $sServiceAddr 后端服务的地址
*/
function __construct($sServiceAddr){
$sQueryString = $_SERVER['QUERY_STRING']; //取出get信息
$sPostData = file_get_contents("php://input"); //读取post数据
if (empty($sQueryString))
$sUrl = $sServiceAddr; //没有get参数
else
$sUrl = $sServiceAddr .'?'. $sQueryString; //存在get参数
//提交内容
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $sUrl); //设置GET的URL地址
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);//将结果保存成字符串
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);//连接超时时间
curl_setopt ($ch, CURLOPT_TIMEOUT, 2);//执行超时时间
curl_setopt ($ch, CURLOPT_DNS_CACHE_TIMEOUT, 300);//DNS解析缓存保存时间5分钟
// curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); //php版本5.3及以上,可关闭IPV6,只使用IPV4
if (!empty($sPostData)){
curl_setopt ($ch, CURLOPT_POST, true);//POST输出
curl_setopt ($ch, CURLOPT_POSTFIELDS, $sPostData);//POST数据内容
}
$this->_sOutBuf = curl_exec($ch); //取出返回
curl_close($ch);
unset($ch);
}
/**
* 析构函数(输出数据到屏幕)
*/
function __destruct(){
header('Content-Type: text/html; charset=UTF-8');
echo $this->_sOutBuf;
}
}
$o = new CReverseProxy('http://你的CT服务器地址:8888/微信处理程序.php');
unset($o);
?> 这个给力,想下 如何控制A20吧,我也去学点PHP基础
页:
[1]