如何部署自己的公众平台:
1.打开http://mp.weixin.qq.com 注册/登录
2.进入高级功能菜单,选择编辑模式或开发者模式(本例子属于开发者模式-需要自己拥有服务器)
3.进入开发者模式,注册成为开发者,配置接口信息。如:
URL:http://192.168.1.1/wx_sample.php
Token:weixin (自己填写一个)
4.打开wx_sample.php $wechatObj->valid(); 这个方法进行验证
5.验证成功,关闭wx_sample.php $wechatObj->valid();
6.马上使用手机,访问属于自己的公众平台吧
1.打开http://mp.weixin.qq.com 注册/登录
2.进入高级功能菜单,选择编辑模式或开发者模式(本例子属于开发者模式-需要自己拥有服务器)
3.进入开发者模式,注册成为开发者,配置接口信息。如:
URL:http://192.168.1.1/wx_sample.php
Token:weixin (自己填写一个)
4.打开wx_sample.php $wechatObj->valid(); 这个方法进行验证
5.验证成功,关闭wx_sample.php $wechatObj->valid();
6.马上使用手机,访问属于自己的公众平台吧
本例代码测试方法:
1.打开手机微信
2.关注公众账号:****
3.发送一条信息:q北京遇上西雅图
4.返回一条磁力链接
5.系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看
4.返回一条磁力链接
5.系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看
原理:
1.接收用户数据,如:q北京遇上西雅图
2.到bt搜索引擎进行查询数据
3.返回一条磁力链接
ps:由于没有申请到内测资格,有很多功能都受到限制,如:5秒超时解决不了,
无法主动推送,批量推送,模拟登录又不方便等等。。。
[PHP]代码
001 |
<?php |
002 |
/** |
003 |
* wechat php test |
004 |
*/ |
005 |
header( 'Content-Type:text/html;charset=utf8' ); |
006 |
date_default_timezone_set( 'RPC' ); |
007 |
|
008 |
//define your token |
009 |
define( "TOKEN" , "2snH21PBqF7UK" ); //自定义 |
010 |
$wechatObj
new wechatCallbackapiTest(); |
011 |
//$wechatObj->valid();//第一次验证token时使用 |
012 |
$wechatObj ->responseMsg(); |
013 |
|
014 |
class
|
015 |
{ |
016 |
private $keyword ; |
017 |
|
018 |
public function valid()
|
019 |
{
|
020 |
$echoStr = $_GET [ "echostr" ]; |
021 |
|
022 |
//valid signature , option |
023 |
if ( $this ->checkSignature()){ |
024 |
echo $echoStr ; |
025 |
exit ; |
026 |
} |
027 |
}
|
028 |
|
029 |
public function responseMsg()
|
030 |
{
|
031 |
//get post data, May be due to the different environments |
032 |
$postStr = $GLOBALS [ "HTTP_RAW_POST_DATA" ]; |
033 |
|
034 |
//extract post data |
035 |
if (! empty ( $postStr )){ |
036 |
|
037 |
$postObj = simplexml_load_string( $postStr , 'SimpleXMLElement' , LIBXML_NOCDATA); |
038 |
$fromUsername = $postObj ->FromUserName; |
039 |
$toUsername = $postObj ->ToUserName; |
040 |
$this ->keyword = trim( $postObj ->Content); |
041 |
$time = time(); |
042 |
$textTpl = "<xml> |
043 |
<ToUserName><![CDATA[%s]]></ToUserName> |
044 |
<FromUserName><![CDATA[%s]]></FromUserName> |
045 |
<CreateTime>%s</CreateTime> |
046 |
<MsgType><![CDATA[%s]]></MsgType> |
047 |
<Content><![CDATA[%s]]></Content> |
048 |
<FuncFlag>0</FuncFlag> |
049 |
</xml>"; |
050 |
if (! empty ( $this ->keyword )) |
051 |
{ |
052 |
if ( $this ->keyword == 999){ |
053 |
$msgType = "text" ; |
054 |
$contentStr = '当您搜索:q北京遇上西雅图,系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看。' ; //'参数:1, 按下载数查询;参数:2, 按时间查询;参数:5, 按质量查询; 精确查询请添加双引号; 例如: q"北京遇上西雅图" 1'; |
055 |
echo $resultStr = sprintf( $textTpl , $fromUsername , $toUsername , $time , $msgType , $contentStr ); |
056 |
exit ; |
057 |
} |
058 |
preg_match( '#^q(.*)#' , $this ->keyword, $str ); |
059 |
if ( $str [1]){ |
060 |
$data = $this ->getQueryParam( $str [1]); |
061 |
$contents = $this ->getQueryList( $data ); |
062 |
$resutl = $this ->getQueryResult( $contents ); |
063 |
$link = str_replace ( '&' , '&' ,urldecode( $resutl [1])); //组装磁力链接 |
064 |
if ( $link ){ |
065 |
$msgType = "text" ; |
066 |
$contentStr = $link ; |
067 |
echo $resultStr = sprintf( $textTpl , $fromUsername , $toUsername , $time , $msgType , $contentStr ); |
068 |
} |
069 |
} else { |
070 |
$msgType = "text" ; |
071 |
$contentStr = '请您输入q进行查询,例如: q北京遇上西雅图 更多帮助请输入999' ; |
072 |
echo $resultStr = sprintf( $textTpl , $fromUsername , $toUsername , $time , $msgType , $contentStr ); |
073 |
} |
074 |
} else { |
075 |
echo "Input something..." ;
|
076 |
} |
077 |
|
078 |
} else { |
079 |
echo "" ; |
080 |
exit ; |
081 |
} |
082 |
|
083 |
}
|
084 |
|
085 |
private function checkSignature() |
086 |
{
|
087 |
$signature = $_GET [ "signature" ]; |
088 |
$timestamp = $_GET [ "timestamp" ]; |
089 |
$nonce = $_GET [ "nonce" ]; |
090 |
|
091 |
$token = TOKEN; |
092 |
$tmpArr = array ( $token , $timestamp , $nonce ); |
093 |
sort( $tmpArr ); |
094 |
$tmpStr = implode( $tmpArr ); |
095 |
$tmpStr = sha1( $tmpStr
|
096 |
|
097 |
if ( $tmpStr == $signature ){ |
098 |
return true; |
099 |
} else { |
100 |
return false; |
101 |
} |
102 |
}
|
103 |
|
104 |
//返回q=查询 |
105 |
function getQueryResult( $contents ){ |
106 |
$result = array (); |
107 |
preg_match( '#<a onclick="fclck\(this.href\)" href="(.*)" title="Download via magnet-link">\[magnet-link\]</a>#iUs' , $contents , $content ); |
108 |
$result = $content ; |
109 |
return $result ; |
110 |
}
|
111 |
|
112 |
|
113 |
//获取btdigg.org 的查询数据 |
114 |
function getQueryList( $data ){ |
115 |
$data [ 'order' ] = $data [ 'order' ] ? $data [ 'order' ] : 0; |
116 |
$data [ 'p' ] = 0; |
117 |
$ch = curl_init(); |
118 |
|
119 |
curl_setopt( $ch , CURLOPT_URL, 'https://btdigg.org/search?' .http_build_query( $data )); |
120 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true); |
121 |
curl_setopt( $ch , CURLOPT_USERAGENT, 'Google Bot' );
|
122 |
curl_setopt( $ch , CURLOPT_TIMEOUT, 4); |
123 |
curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0); |
124 |
curl_setopt( $ch , CURLOPT_FRESH_CONNECT, true); |
125 |
|
126 |
$result = curl_exec( $ch ); |
127 |
curl_close( $ch ); |
128 |
return $result ; |
129 |
}
|
130 |
|
131 |
//获取查询参数 |
132 |
function getQueryParam( $str ){ |
133 |
$data = array (); |
134 |
$string = explode ( ' ' , $str ); |
135 |
|
136 |
//是数组 and 最后一个数组是数字 |
137 |
$last = array_pop ( $string ); |
138 |
if ( is_numeric ( $last )){ |
139 |
$data [ 'q' ] = implode( ' ' , $string );
|
140 |
$data [ 'order' ] = $last ; |
141 |
} else { |
142 |
$data [ 'q' ] = $str ; |
143 |
} |
144 |
return $data ; |
145 |
}
|
146 |
|
147 |
} |
148 |
|
149 |
?> |