Home  >  Article  >  php教程  >  天天AV - 微信公众平台 - 实例

天天AV - 微信公众平台 - 实例

PHP中文网
PHP中文网Original
2016-05-25 17:06:224648browse

如何部署自己的公众平台: 
    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.关注公众账号:天天AV 
    3.发送一条信息:q北京遇上西雅图 
    4.返回一条磁力链接 
    5.系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看 

原理: 

    1.接收用户数据,如:q北京遇上西雅图 

    2.到bt搜索引擎进行查询数据 

    3.返回一条磁力链接 

    ps:由于没有申请到内测资格,有很多功能都受到限制,如:5秒超时解决不了, 

    无法主动推送,批量推送,模拟登录又不方便等等。。。 

<?php
/**
  * wechat php test
  */
header(&#39;Content-Type:text/html;charset=utf8&#39;);
date_default_timezone_set(&#39;RPC&#39;);
 
//define your token
define("TOKEN", "2snH21PBqF7UK");//自定义
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();//第一次验证token时使用
$wechatObj->responseMsg();
 
class wechatCallbackapiTest
{
    private $keyword;
     
    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, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $this->keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";             
                if(!empty( $this->keyword ))
                {
                    if($this->keyword == 999){
                        $msgType = "text";
                        $contentStr = &#39;当您搜索:q北京遇上西雅图,系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看。&#39;;//&#39;参数:1, 按下载数查询;参数:2, 按时间查询;参数:5, 按质量查询; 精确查询请添加双引号; 例如: q"北京遇上西雅图"  1&#39;;
                        echo $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                        exit;
                    }
                    preg_match(&#39;#^q(.*)#&#39;, $this->keyword, $str);
                    if($str[1]){
                        $data = $this->getQueryParam($str[1]);
                        $contents = $this->getQueryList($data);
                        $resutl = $this->getQueryResult($contents);
                        $link = str_replace(&#39;&amp;&#39;,&#39;&&#39;,urldecode($resutl[1]));//组装磁力链接
                        if($link){
                            $msgType = "text";
                            $contentStr = $link;
                            echo $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                        }
                    }else{
                        $msgType = "text";
                        $contentStr = &#39;请您输入q进行查询,例如: q北京遇上西雅图     更多帮助请输入999&#39;;
                        echo $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    }
                }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;
        }
    }
     
    //返回q=查询
    function getQueryResult($contents){
        $result = array();
        preg_match(&#39;#<a onclick="fclck\(this.href\)" href="(.*)" title="Download via magnet-link">\[magnet-link\]</a>#iUs&#39;, $contents, $content);
        $result = $content;
        return $result;
    }
     
     
    //获取btdigg.org 的查询数据
    function getQueryList($data){
        $data[&#39;order&#39;] = $data[&#39;order&#39;] ? $data[&#39;order&#39;] : 0;
        $data[&#39;p&#39;] = 0;
        $ch = curl_init();
 
        curl_setopt($ch, CURLOPT_URL, &#39;https://btdigg.org/search?&#39;.http_build_query($data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERAGENT, &#39;Google Bot&#39;);
        curl_setopt($ch, CURLOPT_TIMEOUT, 4);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
         
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
 
    //获取查询参数
    function getQueryParam($str){
        $data = array();
        $string = explode(&#39; &#39;, $str);
         
        //是数组 and 最后一个数组是数字
        $last = array_pop($string);
        if(is_numeric($last)){
            $data[&#39;q&#39;] = implode(&#39; &#39;, $string);
            $data[&#39;order&#39;] = $last;
        }else{
            $data[&#39;q&#39;] = $str;
        }
        return $data;
    }
     
}
 
?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn