如何部署自己的公众平台:
    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.系统返回的是迅雷磁力链接,请您使用电脑版迅雷或手机版迅雷,进行下载观看

原理:

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 wechatCallbackapiTest
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('&amp;','&',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 ?>

(转载)微信公众平台 - 实例(未验证)相关推荐

  1. Java微信公众号高级 微信墙,JAVA折腾微信公众平台(Token验证)

    JAVA折腾微信公众平台(Token验证) JAVA折腾微信公众平台(Token验证) 2019独角兽企业重金招聘Python工程师标准>>> 最近微信的公众平台比较火,于是我也想弄 ...

  2. 微信公众平台开发(5)--验证消息的确来自微信服务器

    点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 前言 2. 构建项目 2.1 构建SpringBoot项目 2.2 编写配置文件 2.3 编写启动类 3 ...

  3. Web API实现微信公众平台开发-服务器验证

    背景 最近开发微信公众号相关接口,在这里记录下微信公众号相关各项功能的实现. 先决条件 1.一台可部署web服务的服务器或者云平台(本地可以搞个花生壳域名). 2.一个可以正常使用的微信公众账号,开始 ...

  4. java微信token验证_JAVA折腾微信公众平台(Token验证)

    最近微信的公众平台比较火,于是我也想弄个微信来玩玩.如何注册微信公众号?点击之后就可以看到官方的答案了(额,比较坑爹). 注册之后,可以选择编辑模式和开发模式,这里要说的是开发模式. 首先要开启开发模 ...

  5. java微信token验证_JAVA折腾微信公众平台(Token验证)[转]

    BAE的JAVA还在内测的时候,抱着好奇的态度发邮件申请了内测权限,当时折腾了一天,然后就没折腾了.现在BAE的JAVA都已经正式开放使用了,我又蛋疼的想写点什么,否则每天仅仅只是工作上的使用,是得不 ...

  6. ASP.NET MVC4 微信公众平台开发测试一: 验证

    ASP.NET MVC4 微信公众平台开发测试一: 验证 背景,想做一个微信公众号的自动回复系统,于是想动手写一下.记录这些,是一边写程序一边写在这里,也是记录一下自己的思路. 微信公众平台开发时,需 ...

  7. VB.net 微信公众平台开发(一) Token验证

    登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击"修改配置"按钮,填写URL.Token和EncodingAESKey,其 ...

  8. 由SSL证书引发的微信公众平台token验证失败问题

    起因 第一次尝试用java去搭建一个微信公众平台,在验证token的时候遇到了各式各样的问题,很多在网上也没有找到比较合适的说法只能自己一步步尝试,在这里记录分享一下也希望其他的朋友能在遇到类似的问题 ...

  9. 【Java微信公众平台开发模式+自定义按钮源码】

    首先,想用开放模式需要先成为开发者.成为开发者有两种写法. 一是:通过jsp页面,用out.print("echostr")//SHA1加密的字符串: 二是:通过Servlet.d ...

最新文章

  1. 引导修复_怎么使用bcdrepair引导修复系统【详细步骤】
  2. python网络爬虫权威指南 百度云-Python网络爬虫权威指南 PDF 第2版
  3. python 美团api接口对接_震惊!SpaceX火箭数据开放API接口,可用Python进行数据分析...
  4. linux下多种锁的比较
  5. 空间谱专题08:相位模糊
  6. Maven Git发布
  7. 21岁还可以学php开发吗,PHP已经21岁了!
  8. 深圳警方出手!“钱爸爸”涉嫌集资诈骗 已累计冻结2.13亿元
  9. Spark学习-SparkSQL--03-SparkSQL CLI 建表查询出问题
  10. 架构解密从分布式到微服务:微服务架构到底是什么?
  11. SpringBoot项目中图片的引用
  12. mysqld got signal 11处理
  13. 苹方字体 android,iOS 9“苹方”字体像安卓被吐槽
  14. 视频内容理解相关方法
  15. 编译bib文件,报错repeated entry
  16. 【BZOJ4453】cys就是要拿英魂!
  17. 2.4G蓝牙耳机等穿戴蓝牙设备贴片天线方案 CA-C01
  18. 新手如何对文件进行简单的上传
  19. 柳传志:联想发展过程中的三大突破
  20. 2021巢湖第一中学高考成绩查询,2021年巢湖高中学校排名及录取分数线排名

热门文章

  1. python使用redis队列_Python的Flask框架应用调用Redis队列数据的方法
  2. easyui表格编辑事件_Unity手游开发札记——从Odin插件聊基于元数据的编辑器实现
  3. JS实现——俄罗斯方块
  4. 测试面试话题5: 如何不漏测
  5. HTML5:一些部件
  6. sublime Text3 设置多个浏览器预览
  7. ThreadLocal使用和原理
  8. Ado.Net实现简易(省、市、县)三级联动查询,还附加Access数据
  9. 找到两个字符串的公共字符,并按照其中一个的排序
  10. Word转PDF及SWF在线浏览——Flash Paper