微信公众号小功能
以下都是借鉴的微信公众平台的文档加老师指点和自行的理解。
(1)微信公众号发送地区回复现在和未来五天天气情况
(2)发送语音和智能机器人聊天
一、调用天气预报接口
实现微信公众号发送地区回复现在和未来五天天气情况要去调用天气接口。
我使用的是聚合网的天气接口。
知道了接口的地址、返回格式、请求的方式那么接下来就好做了。
这里还要说一下向http发送请求的几种方式:
1.file_get_contents()
2.curl
3.fopen()
4.fsocket();
知道了发送请求的方式那么就可以写我们的代码了。
下面的是接收微信端消息的代码
private function receiveMsg(){$xml = file_get_contents("php://input");//获取微信平台发来的消息//file_put_contents("data.txt",$xml);//讲发来的消息写入文件$obj = simplexml_load_string($xml,"SimpleXMLElement",LIBXML_NOCDATA);//将xml转为对象类型return $obj;}
这里是接收消息代码
//这里证明不是第一次接入了。 处理业务逻辑 接收消息$obj = $this->receiveMsg();//判断接收到的类型switch($obj->MsgType){case "text"://城市$city = str_replace('天气:',"",$obj->Content);//key$key = "ee9206e9a2c81fd162750d3321e072ea";//接口地址 拼接接口地址$url = "http://apis.juhe.cn/simpleWeather/query?city=".$city."&key=".$key;//发送请求 默认为json格式将其转为数组类型$data = json_decode(file_get_contents($url),true);//file_put_contents('data.txt',$data);//判断是否请求成功if($data["error_code"]==0){//当前的数据$today = $data["result"]["realtime"];//未来五天的空气状况$future = $data["result"]["future"];//返回的信息$content = "您所查询的城市为:".$data["result"]["city"]."\n";$content.= "当前温度为:".$today["temperature"]."℃"."\n当前湿度为:".$today["humidity"]."%\n";$content.= "天气状况:".$today["info"]."\n"."风向:".$today["direct"]."\n"."风力:".$today["power"]."\n空气质量:".$today["aqi"]."\n";$content.= "以下是未来五天的天气情况\n";//返回未来五天的空气情况foreach($future as $k=>$v){$content.="--------------------------\n";$content.= "日期:".$v["date"]."\n";$content.="气温:".$v["temperature"]."\n";$content.="天气情况:".$v["weather"]."\n";$content.="风向:".$v["direct"]."\n";}}else{$content="您所输入的城市有误,请正确填写。格式为'天气:地区名'";}break;}//回复消息$this->responseText($obj,$content);}
这里是回复消息代码
//自动回复消息private function responseText($obj,$content){//占位符的内容$ToUserName = $obj->FromUserName;$FromUserName = $obj->ToUserName;$time = time();$msgType = "text";$contents = $content;//自动回复$xml = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";//把占位符改为消息echo sprintf($xml,$ToUserName,$FromUserName,$time,$msgType,$contents);}
二、调用图灵机器人接口
首先我们是要语音和机器人交流需要去微信公众平台
找到接受语音识别结果选择开启(开启后需要取消关注重新关注一下,否则要等24h)
然后去百度图灵机器人注册个账号获取到图灵机器人的接口和key
然后直接写我们的代码,因为图灵机器人用的是post请求所以要用curl,我们最好封装一个,如下
public function http_get($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);//向那个url地址上面发送curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//设置发送http请求时需不需要证书curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置发送成功后要不要输出1 不输出,0输出$output = curl_exec($ch);//执行curl_close($ch); //关闭return $output;}public function http_post($url,$data){$curl = curl_init(); //初始化curl_setopt($curl, CURLOPT_URL, $url);//向那个url地址上面发送curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);//需不需要带证书curl_setopt($curl, CURLOPT_POST, 1); //是否是post方式 1是,0不是curl_setopt($curl, CURLOPT_POSTFIELDS, $data);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//需不需要输出$output = curl_exec($curl);//执行curl_close($curl); //关闭return $output;}
以下是图灵机器人的用法
case "voice"://获取用户的消息转为文本$text = urlencode($obj->Recognition);//转码//调用机器人的接口$url = "http://openapi.tuling123.com/openapi/api/v2";//请求的消息$msg = ["reqType"=>0,"perception"=>["inputText"=> ["text"=>$text,]],"userInfo"=>["apiKey"=>"b7da94fa32c8487a846e981f8761370c","userId"=>"1",]];$msg = urldecode(json_encode($msg));//转为json格式,并且解码//向接口发送请求$result = $this->http_post($url,$msg);//将得到的请求转为数组$result = json_decode($result,true);//得到机器人的回复消息$content = $result["results"][0]["values"]["text"];$this->check($content);break;