基于微信公众平台开发SDK(demo)扩展例子
代码如下 | 复制代码 |
define("TOKEN", "xingans"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); class wechatCallbackapiTest { //签名验证公共接口 public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } //主入口处理函数 public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $msgType=trim($postObj->MsgType); switch($msgType){ case 'text': $resultStr=$this->handleText($postObj); break; case 'event': $resultStr=$this->handleEvent($postObj); break; default: $resultStr=$this->handleDefault($postObj); break; } echo $resultStr; }else { echo "Error"; exit; } } //处理文本消息 private function handleText($obj){ $keyword=trim($obj->Content); if(preg_match('/天气/',$keyword)){ $contentStr=$this->handleWeather($obj); }elseif(preg_match('/翻译/',$keyword)){ $contentStr=$this->handleTranslation($obj); }else{ $contentStr=$this->handleChat($obj); } return $this->handleStr($obj,$contentStr); } //处理天气 private function handleWeather($obj){ $keyword=mb_substr($obj->Content,-2,2,'utf-8'); $zone=mb_substr($obj->Content,0,-2,'utf-8'); if($keyword=='天气' && !empty($zone)){ $zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true); $zoneArr=$zoneArr['result']; $cityId=''; foreach($zoneArr as $value){ if($zone==$value['citynm']){ $cityId=$value['weaid']; break; } } if(!empty($cityId)){ $data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json"); $data=json_decode($data); $contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.", ".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high; }else{ $contentStr='找不到输入的城市!'; } }else{ $contentStr='输入的查询格式不正确!'; } return $contentStr; } //处理翻译 private function handleTranslation($obj){ $keyword=mb_substr($obj->Content,0,2,'utf-8'); $words=mb_substr($obj->Content,2,220,'utf-8'); if($keyword=='翻译' && !empty($words)){ $data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words)); $data=json_decode($data,true); switch($data['errorCode']){ case '0': $contentStr=$data['translation'][0]; break; case '20': $contentStr='要翻译的文本过长'; break; case '30': $contentStr='无法进行有效的翻译'; break; case '40': $contentStr='不支持的语言类型'; break; case '50': $contentStr='无效的key'; break; default: $contentStr='Error'; break; } }else{ $contentStr='输入的翻译格式不正确!'; } return $contentStr; } //处理聊天信息 private function handleChat($obj){ $keywords=$obj->Content; $curlPost=array("chat"=>$keywords); $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch); if(!empty($data)){ $contentStr=$data; }else{ $ran=rand(1,5); switch($ran){ case 1: $contentStr= "小九今天累了,明天再陪你聊天吧"; break; case 2: $contentStr= "小九睡觉喽~~"; break; case 3: $contentStr= "呼呼~~呼呼~~"; break; case 4: $contentStr= "你话好多啊,不跟你聊了"; break; case 5: $contentStr= "你话好多啊,不跟你聊了"; break; } } return $contentStr; } //创建自定义菜单 public function createMenu($data,$token){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } //查询自定义菜单 function getMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); return $output = curl_exec($ch); } //删除自定义菜单 public function deleteMenu($token){ $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); return $result; } //处理事件消息 private function handleEvent($obj){ $content=''; switch($obj->Event){ case 'subscribe': $content.="welcome-欢迎关注该公众号号!"; break; case 'unsubscribe': $content.="感谢您一直以来对该公众号的关注,再见!"; break; default: $content.=""; break; } return $this->handleStr($obj,$content); } //处理回复消息字符串 private function handleStr($obj,$content='',$flag=0){ $textTpl = " return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag); } //签名验证函数 private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?> |
测试结果:
当我们使用phpMyAdmin导入备份的数据库文件时,默认只能上传小于2M的文件。但是通常我们的数据库备份文件是大于2M的,怎么办呢?其实我们只需修改一下php.ini文件中的一个参数即可。
解决办法一,有服务器修改权限
以使用USBWebserver搭建的WAMP环境为例,php.ini文件存在于两个地方:USBWebserversettings和USBWebserver 8php。
编辑php.ini,在其中找到:
代码如下 | 复制代码 |
upload_max_filesize = 2M |
把2M增加到20M或更大的数值即可。
保存文件,最后重启USBWebserver,或者说重新运行Mysql,就可以发现最大限制已经增大为……
慢着,竟然不是20M,而是8M。如图:
三好公民也不知道是什么原因,反正暂时够用就行了。有知道的,请给三好公民讲解一下,谢谢!
解决方法二,如果没有服务器修改权限我们只要另想办法了
reset (PHP 3, PHP 4, PHP 5)
函数定义 mixed reset ( array &array )
作用:该函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。例如:
代码如下 | 复制代码 |
<?php $array=array('step one','step two','step three','step four'); echo reset($array); |
//输出:step one
next (PHP 3, PHP 4, PHP 5)
函数定义 mixed next ( array &array )
作用:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。例如:
代码如下 | 复制代码 |
<?php |
//输出:step two
警告:如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
current (PHP 3, PHP 4, PHP 5)
函数定义 mixed current ( array &array )
作用:返回当前被内部指针指向的数组单元的值,并不移动指针。初始指向插入到数组中的第一个单元。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
警告:如果数组包含有空的单元(0 或者 "",空字符串)则本函数在碰到这个单元时也返回 FALSE。这使得用 current() 不可能判断是否到了此数组列表的末端。要正确遍历可能含有空单元的数组,用 each() 函数。
next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。
下面是相关函数的使用例子:
代码如下 | 复制代码 |
<?php |
并且附加上代码:
代码如下 | 复制代码 |
<?php |
例子
代码如下 | 复制代码 |
function Bing_string_cleanr( $string ){ |
使用方法:
代码如下 | 复制代码 |
echo Bing_string_cleanr( '内 容 <br> <html> asdfeiuonsdfje' ); |
删除空白
代码如下 | 复制代码 |
<?php // First remove the leading/trailing whitespace // Now remove any doubled-up whitespace // Finally, replace any non-space whitespace, with a space // Echo out: 'This line contains liberal use of whitespace.' |
相关文章
- 安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
- floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
- 下面我们来看一篇关于纯Css实现下拉菜单的简单例子,希望这篇文章能够给各位同学带来帮助,具体步骤如下. 大家可能会经常用到hover这属性,用hover实现鼠标经过的颜...2017-01-22
- 在php中日期对比用得比较多了,还有一个日期加减也用到不少,下面我拿两个例子来给大家介绍在php中日期操作方法吧,希望文章能给你带来帮助 功能需求 文章发布时段操...2016-11-25
- 本例子不是读取Excel或生成新的Excel,而是读取现有的Excel文件,然后修改Excel中的数据,就像修改mysql中数据一样的哦。 代码如下 ...2016-11-25
- 微信公众平台实现微信网页登陆授权开发其实是非常的简单了,因为官方的参考程序了,下面小编就看了一站长根据官方参考做的一个网页登陆授权例子,大家可看看。 文件1:in...2016-11-25
- 正则提取图片中的地址我们介绍过很多的相关文章了,下面再来给各位介绍一个可以提取内容中第一张图片的例子,希望对各位有帮助。 代码如下 复制代码 ...2016-11-25
- 最近看到博客留言的头像有点别扭,因为游客的头像都是同一个头像,看着不是很舒服。虽然现在绝大多数的主题集成了Gavatar头像功能,先不说gavatar被墙的问题,我自己现在都没...2016-11-25
- php判断字符串是否包含另一个字符串的实现方法有许多的办法,像我们在网上一搜索可看到大量关于字符是否包含指定字符的方法,下面我把这些实用的例子整理一起与大家分享...2016-11-25
- date函数是php中一个非常好用的日期获取函数了,我们可以使用它来获取指定日期或者当前日期了,下面我来简单的介绍一下date函数用法与常用用法吧。 PHP星期几获取代...2016-11-25
- 这篇文章主要介绍了PHP Curl模拟登录微信公众平台、新浪微博实例代码的相关资料,涉及到php curl模拟登录相关知识,需要的朋友可以参考下...2016-02-01
- 微信公众平开发时碰到回复中文乱码了,这个问题小编发现是编码问题,其实只要把编码转成utf8就可以解决了,具体来看看。 很多微信公众平台的自动回复程序都是 ThinkWec...2016-11-25
- 对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注...2016-11-25
- 自定义菜单可以在后台设置但如果你使用了开发者之后那么后台的自定义菜单功能就失效了,必须通过程序来创建了,下面一起来看一个简单的通过php创建自定义菜单的例子。...2016-11-25
- 文件锁可以防止文件读写时多人访问时出现共享问题或数据不准确的问题,下面我们来看一篇关于php文件锁类防止并发的例子,具体如下. 工作间隙写了个文件锁的类,用于...2016-11-25
- 微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数哦。 申请自定义菜单 服务号可...2016-11-25
- 404状态代码在php中可以使用header输出但不能使用echo或print输出哦,许多的朋友把这个给搞混了,下面我们来看一篇关于php输出404状态码的例子 例子 代码如...2016-11-25
- Listing 4. simplemovie.mxml <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:VBox...2016-11-25
- 数组转xml用到不多用数组转json比较多了,但今天有一个功能就是必须要把数组转换成xml了,下面小编人网上找到了一段关于php 数组转xml的代码测试了都可以使用,下面整理分...2016-11-25
- 在php中我们要查看mysql数据库的信息我们可以直接连接mysql之后再调用mysql相关语句就可以实现了,下面给各位整理了一篇文章希望对大有帮助。 首先我们需要了解下...2016-11-25