作者:拍友2602923913 | 来源:互联网 | 2023-07-03 10:18
微信开发中,图灵机器人回复、天气、翻译、美食、地图、二维码功能,随处可见。大小网站、APP都在运用这项技术在项目中。今天简单介绍一下图灵机器人回复,天气接口调用、翻译接口,希望对朋
微信开发中,图灵机器人回复、天气、翻译、美食、地图、二维码功能,随处可见。大小网站、APP都在运用这项技术在项目中。今天简单介绍一下图灵机器人回复,天气接口调用、翻译接口,希望对朋友们有用。
效果案例:
思路很简单,首先,token要一致,然后在浏览器上跑起来, 回到微信平台配置后进行提交,显示配置成功,则OK!配置失败,检查token和代码规范,如果还不行,百度上有很多解决办法,不过有的没有用。可以试一试不用框架可不可以执行。
下面不多说,上代码:
/**
* wechat php test
*/
//define your token
define("TOKEN","token可以随意些");//定义常量token值,与微信中的值进行对比
$wechatObj = new wechatCallbackapiTest();//实例化下面的类
//判断微信传过来的值是否存在
if(!isset($_GET['echostr'])){
//如果微信传过来的值存在执行下面方法
$wechatObj->responseMsg();
}else{
//不存在执行下面方法
$wechatObj->valid();
}
//$wechatObj->valid();
//封装文件类
class wechatCallbackapiTest
{
//定义微信传值不存在执行的方法,既然不存在值,那当然也就不需要返回什么了
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
//定义微信有值执行的方法
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = file_get_contents('php://input'); //全局变量的信息 可以接收
//extract post data
if (!empty($postStr)){
//如果$postStr不为空
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
switch($RX_TYPE)
{
case "text":
$resultStr = $this->handleText($postObj);
break;
case "event":
$resultStr = $this->handleEvent($postObj);
break;
default:
$resultStr = "Unknow msg type: ".$RX_TYPE;
break;
}
echo $resultStr;
}else {
echo "";
exit;
}
}
//绑定图灵机器人,返回数据转化为微信使用的格式
public function handleText($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "
%s
0
";
if(!empty($keyword ))
{
//主要内容--机器人---天气接口---
$msgType = "text";
if($keyword=="博客"){
$cOntentStr= "YFeng888的博客地址是:https://blog.csdn.net/weixin_42980713";
}else if($keyword=="天气"){
//创建函数调用图灵机器人接口
$url = "http://apis.haoservice.com/weather?cityname=北京&key=99ae8b89d4a14c0881c2ac64c831cdd6";
$send_info = file_get_contents($url);
$c = json_decode($send_info,true);
$cOntentStr= "【".$c['result']['today']['city']."天气预报】\n"." ".$c['result']['today']['date_y']."时发布"."\n\n实时天气\n".$c['result']['today']['weather'].$c['result']['today']['temperature'].$c['result']['today']['wind']."\n\n温馨提示:".$c['result']['today']['dressing_advice']."\n\n明天\n".$c['result']['future'][1]['temperature']." \n\n后天".$c['result']['future'][2]['temperature']."\n";
}elseif($keyword=="经典语录"){
//创建函数调用图灵机器人接口
$url="http://apis.haoservice.com/lifeservice/JingDianYulu/getTypes?key=你自己的key";
$send_info = file_get_contents($url);
$json = json_decode($send_info,true);
$cOntentStr=$json['result'];
}else{
//翻译接口
$url = "http://apis.haoservice.com/efficient/robot?info=$keyword&address=&key=你自己的key";
$send_info = file_get_contents($url);
$json = json_decode($send_info,true);
$cOntentStr=$json['result']['text'];
file_put_contents("haoyu.txt",$contenStr);//写入日志到haoyu.txt文件内
}
// $cOntentStr= "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}
public function handleEvent($object)
{
$cOntentStr= "";
switch ($object->Event)
{
case "subscribe":
$cOntentStr= "感谢您关注【最帅男人帮】"."\n"."微信号:shuaigege"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
break;
default :
$cOntentStr= "Unknow Event: ".$object->Event;
break;
}
$resultStr = $this->responseText($object, $contentStr);
return $resultStr;
}
public function responseText($object, $content, $flag=0)
{
$textTpl = "
%s
%d
";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
return $resultStr;
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nOnce= $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
ok,亲测可行!