本文实例讲述了php实现基于微信公众平台开发sdk(demo)扩展的方法。分享给大家供大家参考。具体分析如下:
该扩展基于官方的微信公众平台sdk,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下:
复制代码 代码如下:
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 (!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;
}
}
//处理文本消息
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=='天气' && !emptyempty($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(!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;
}
//处理翻译
private function handletranslation($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;
}
//处理聊天信息
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(!emptyempty($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;
}