CubieBoard博客-HomeCubieTech公司网站

cubie.cc CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 4085|回复: 8

微信公众平台实现控制功能的一些思路

[复制链接]

3

主题

0

好友

490

积分

中级会员

Rank: 3Rank: 3

贡献
100
金钱
177
威望
100
买家信用
卖家信用
积分
490
发表于 2014-9-24 21:32:29 |显示全部楼层
微信公众平台大家应该不陌生,它与硬件的一些结合也有一些案例。
例如:与路由器配合使用。

平台: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[0]["time"]) <= 100 ) {
                echo sprintf('%s,%s', $data[0]["mid"], $data[0]["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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

14

主题

3

好友

9541

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
1726
金钱
4163
威望
1726
买家信用
卖家信用
积分
9541
发表于 2014-9-24 22:59:26 |显示全部楼层
可以的
回复

使用道具 举报

59

主题

0

好友

5518

积分

论坛元老

Rank: 8Rank: 8

贡献
880
金钱
2684
威望
880
买家信用
卖家信用
积分
5518
发表于 2014-9-25 09:37:41 |显示全部楼层
现在联通把我家的80端口封了,不能做服务端.请问楼主是怎么弄的?
回复

使用道具 举报

3

主题

0

好友

490

积分

中级会员

Rank: 3Rank: 3

贡献
100
金钱
177
威望
100
买家信用
卖家信用
积分
490
发表于 2014-9-25 10:51:34 |显示全部楼层
zixi0007 发表于 2014-9-25 09:37
现在联通把我家的80端口封了,不能做服务端.请问楼主是怎么弄的?

在sae上部署代码
回复

使用道具 举报

12

主题

5

好友

4571

积分

论坛元老

Rank: 8Rank: 8

贡献
887
金钱
1577
威望
887
买家信用
卖家信用
积分
4571
发表于 2014-9-25 12:05:50 |显示全部楼层
其实也有办法绕过,我写了一个php的程序,可以绕过80端口与微信对接。
用CT做微信的服务端挺不错,可控性高。
回复

使用道具 举报

59

主题

0

好友

5518

积分

论坛元老

Rank: 8Rank: 8

贡献
880
金钱
2684
威望
880
买家信用
卖家信用
积分
5518
发表于 2014-9-25 12:33:38 |显示全部楼层
jerryli 发表于 2014-9-25 12:05
其实也有办法绕过,我写了一个php的程序,可以绕过80端口与微信对接。
用CT做微信的服务端挺不错,可控性高 ...

请问怎么搞的通过sae中转吗
回复

使用道具 举报

59

主题

0

好友

5518

积分

论坛元老

Rank: 8Rank: 8

贡献
880
金钱
2684
威望
880
买家信用
卖家信用
积分
5518
发表于 2014-9-25 12:35:50 |显示全部楼层
Marquis 发表于 2014-9-25 10:51
在sae上部署代码

sae和pc端如何通讯呢?
回复

使用道具 举报

12

主题

5

好友

4571

积分

论坛元老

Rank: 8Rank: 8

贡献
887
金钱
1577
威望
887
买家信用
卖家信用
积分
4571
发表于 2014-9-28 09:18:20 |显示全部楼层
zixi0007 发表于 2014-9-25 12:33
请问怎么搞的通过sae中转吗

恩,差不多,做了一个反向代理,找个有80口的服务器放个转发程序,转发到你家里的Web口上,不要用80口因为是被封掉的,改用其他的口子如8888或则随便。
微信 <---> 公网服务器 <-->家里的CT服务器
代码如下:
  1. <?php
  2. /**
  3. * 反向代理处理类
  4. * <li>将得到的get请求转发到另一个网站,并取回返回信息送到页面上</li>
  5. * @version 1.0.0.3
  6. * @author JerryLi lijian@dzs.mobi
  7. * */
  8. class CReverseProxy{
  9.         private $_sOutBuf = null;
  10.         /**
  11.          * 构造
  12.          * @param string $sServiceAddr 后端服务的地址
  13.          */
  14.         function __construct($sServiceAddr){
  15.                 $sQueryString = $_SERVER['QUERY_STRING']; //取出get信息
  16.                 $sPostData = file_get_contents("php://input"); //读取post数据

  17.                 if (empty($sQueryString))
  18.                         $sUrl = $sServiceAddr; //没有get参数
  19.                 else
  20.                         $sUrl = $sServiceAddr .'?'. $sQueryString; //存在get参数
  21.                 //提交内容
  22.                 $ch = curl_init();
  23.                 curl_setopt ($ch, CURLOPT_URL, $sUrl); //设置GET的URL地址
  24.                 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);//将结果保存成字符串
  25.                 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);//连接超时时间
  26.                 curl_setopt ($ch, CURLOPT_TIMEOUT, 2);//执行超时时间
  27.                 curl_setopt ($ch, CURLOPT_DNS_CACHE_TIMEOUT, 300);//DNS解析缓存保存时间5分钟
  28. //                curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); //php版本5.3及以上,可关闭IPV6,只使用IPV4
  29.                 if (!empty($sPostData)){
  30.                         curl_setopt ($ch, CURLOPT_POST, true);//POST输出
  31.                         curl_setopt ($ch, CURLOPT_POSTFIELDS, $sPostData);//POST数据内容
  32.                 }
  33.                 $this->_sOutBuf = curl_exec($ch); //取出返回
  34.                 curl_close($ch);
  35.                 unset($ch);
  36.         }
  37.         /**
  38.          * 析构函数(输出数据到屏幕)
  39.          */
  40.         function __destruct(){
  41.                 header('Content-Type: text/html; charset=UTF-8');
  42.                 echo $this->_sOutBuf;
  43.         }
  44. }

  45. $o = new CReverseProxy('http://你的CT服务器地址:8888/微信处理程序.php');
  46. unset($o);
  47. ?>
复制代码
回复

使用道具 举报

12

主题

0

好友

1007

积分

金牌会员

Rank: 6Rank: 6

贡献
160
金钱
282
威望
260
买家信用
卖家信用
积分
1007
发表于 2014-9-28 11:45:51 |显示全部楼层
这个给力,想下 如何控制A20吧,我也去学点PHP基础
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2019-10-14 15:45 , Processed in 0.021759 second(s), 14 queries , Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部