php实现基于微信公众平台开发SDK(demo)扩展的方法
本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法。分享给大家供大家参考。具体分析如下:
该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:
$wechatObj=newwechatCallbackapiTest();
$wechatObj->responseMsg();
classwechatCallbackapiTest
{
//签名验证公共接口
publicfunctionvalid()
{
$echoStr=$_GET["echostr"];
if($this->checkSignature()){
echo$echoStr;
exit;
}
}
//主入口处理函数
publicfunctionresponseMsg()
{
$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];
if(!emptyempty($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;
}
}
//处理文本消息
privatefunctionhandleText($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);
}
//处理天气
privatefunctionhandleWeather($obj){
$keyword=mb_substr($obj->Content,-2,2,"utf-8");
$zone=mb_substr($obj->Content,0,-2,"utf-8");
if($keyword=="天气"&&!emptyempty($zone)){
$zoneArr=json_decode(file_get_contents("http://api.k780.com:88/?app=weather.city&format=json"),true);
$zoneArr=$zoneArr["result"];
$cityId="";
foreach($zoneArras$value){
if($zone==$value["citynm"]){
$cityId=$value["weaid"];
break;
}
}
if(!emptyempty($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;
}
//处理翻译
privatefunctionhandleTranslation($obj){
$keyword=mb_substr($obj->Content,0,2,"utf-8");
$words=mb_substr($obj->Content,2,220,"utf-8");
if($keyword=="翻译"&&!emptyempty($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;
}
//处理聊天信息
privatefunctionhandleChat($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(!emptyempty($data)){
$contentStr=$data;
}else{
$ran=rand(1,5);
switch($ran){
case1:
$contentStr="小九今天累了,明天再陪你聊天吧";
break;
case2:
$contentStr="小九睡觉喽~~";
break;
case3:
$contentStr="呼呼~~呼呼~~";
break;
case4:
$contentStr="你话好多啊,不跟你聊了";
break;
case5:
$contentStr="你话好多啊,不跟你聊了";
break;
}
}
return$contentStr;
}
//创建自定义菜单
publicfunctioncreateMenu($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;MSIE5.01;WindowsNT5.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;
}
//查询自定义菜单
functiongetMenu($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);
}
//删除自定义菜单
publicfunctiondeleteMenu($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;
}
//处理事件消息
privatefunctionhandleEvent($obj){
$content="";
switch($obj->Event){
case"subscribe":
$content.="welcome-欢迎关注该公众号号!";
break;
case"unsubscribe":
$content.="感谢您一直以来对该公众号的关注,再见!";
break;
default:
$content.="";
break;
}
return$this->handleStr($obj,$content);
}
//处理回复消息字符串
privatefunctionhandleStr($obj,$content="",$flag=0){
$textTpl="";
returnsprintf($textTpl,$obj->FromUserName,$obj->ToUserName,time(),$content,$flag);
}
//签名验证函数
privatefunctioncheckSignature()
{
$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){
returntrue;
}else{
returnfalse;
}
}
}
希望本文所述对大家的php程序设计有所帮助。
相关文章
- php替换字符串中,PHP 替换字符串中的一些字符方法介绍
- php安装redis扩展(PHP5.6或7.1为例)
- MySQL 锁表与 PHP 数据交互实现(mysql锁表php)
- Linux平台上运行PHP脚本的快乐之旅(linux运行php)
- Linux切换PHP版本:快速而安全的方法(linux切换php版本)
- PHP和Linux技术结合的灵活力量(php和linux)
- 实现【使用Redis实现PHP抢红包迅速拿奖励】(php抢红包redis)
- 数据库MySQL 数据库的 PHP 扩展研究(php扩展mysql)
- 提升 PHP 技能,一攻 MySQL 面试!(php面试Mysql)
- PHP添加MySQL扩展:快速实现数据库连接(php添加mysql扩展)
- 用PHP访问本地MSSQL数据库的实现方法(php访问本地mssql)
- 用PHP测试MSSQL类的新尝试(php 测试mssql类)
- PHP如何连接MS SQL服务器(php怎么链接mssql)
- Linux下快速搭建PHP开发环境(linux php集成环境)
- PHP开启Redis扩展:实现网站快速加载(php开启redis扩展)
- PHP开启Redis扩展:极大提升网站性能(php开启redis扩展)
- 安装PHP扩展程序让网站支持Redis(安装php-redis)
- Oracle PHP扩展拓展你的开发空间(oracle php扩展)
- php-accelerator网站加速PHP缓冲的方法
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- linux下为php添加curl扩展的方法
- PHP添加Xdebug扩展的方法
- php扩展memcached和memcache的安装配置方法