最近在弄微信远程控制,闲来无聊把图灵机器人接入自己公众号
网上的有的是直接图灵官网那接入,但是那样就完全接管了公众号的消息管理了,自己的就没用了,然后百度了一番,终于弄出来了
预备条件:服务器(云主机,自己买),微信公众号,和一个图灵的apikey(图灵官网申请个机器人后就可以获得),会点php基础(我用php开发的..)
先自己微信公众号先对接上自己主机。怎么对接有时间我发下教程。。。
另外再废话点,微信公众号一般是三种,订阅号(个人),服务号(工商个体户),企业号(企业用),订阅号只能个人用并且开启开发者模式后(也就是你对接服务器了后无法自定义菜单,这点很坑….),服务号和企业号不说了,反正个人申请不了…,另外无论你申请了哪种公众号,你都可以开启测试号,测试号是微信官方给开发者开发测试用的,是三种公众号的混合体,但是使用期限只有一年(怎么使用自己想清楚就行了,别瞎打开了)…
微信公众号流程是用户发消息给微信服务器,然后微信服务器生成对应的xml转发给你主机,你主机解析xml后进行处理回应对应的xml给微信服务器,微信服务器解析xml后返回给用户
以下是逻辑处理代码,微信的xml是post过来的,先接收post内容,然后判断是否非空,再把xml转成对象,然后几个关键的xml数据非空再往下处理,然后判断用户消息类型也就是Msgtype分类处理,菜单的每个还有个唯一的key用于指定菜单的唯一性,的目前还没写完,看下微信公众号官方开发文档就懂了,然后根据关键字回复,default就是非自定义的关键字以外的内容,也就是要交给图灵机器人的,api已打码,自己的填进去就行,目前还没完善,仅供参考
$post_data = $GLOBALS["HTTP_RAW_POST_DATA"];
	if(!empty( $post_data) )	{
		$post_data=simplexml_load_string($post_data);
		if (!empty( $post_data->FromUserName && 
					$post_data->ToUserName 	 && 
					$post_data->CreateTime	 &&
					$post_data->MsgType ) )   {
			$FromUserName = $post_data->FromUserName;
			$ToUserName = $post_data->ToUserName;
			$userword = trim($post_data->Content);
			$MsgType = $post_data->MsgType;
			$Event = $post_data->Event;
			$time = time();
			$xml = "<xml>
			<ToUserName><![CDATA[%s]]></ToUserName>
			<FromUserName><![CDATA[%s]]></FromUserName>
			<CreateTime>%s</CreateTime>
			<MsgType><![CDATA[%s]]></MsgType>
			<Content><![CDATA[%s]]></Content>
			<FuncFlag>0</FuncFlag>
			</xml>";
			switch ($MsgType) {
				case "text":
							if (!empty($userword)) {
								switch ($userword) {
									case "开灯":
										$Content="收到开灯";
										break;
									case "关灯":
										$Content="收到关灯";
										break;									
									default:
										$apikey="*****";
										$url="http://www.tuling123.com/openapi/api?key=%s&info=%s";
										$url=sprintf($url,$apikey,$userword);
										$json=file_get_contents($url);
										$json=json_decode($json);
										$Content=$json->text."\r\n".$json->url;;
										break;
								}
								$reply=sprintf($xml,$FromUserName,$ToUserName,$time,$MsgType,$Content);
								echo $reply;
							}
							else echo "";							
					break;
				case "event":
							$MsgType="text";
							switch ($Event) {
								case "subscribe":
									$Content="欢迎订阅测试号";
									$reply=sprintf($xml,$FromUserName,$ToUserName,$time,$MsgType,$Content);
									echo $reply;
									break;
								case "CLICK":
									$Content="收到菜单点击";
									$reply=sprintf($xml,$FromUserName,$ToUserName,$time,$MsgType,$Content);
									echo $reply;
									break;
								default:
									$Content="收到点击";
									$reply=sprintf($xml,$FromUserName,$ToUserName,$time,$MsgType,$Content);
									echo $reply;
									break;
							}
					break;
				default:
					# code...
					break;
			}
		}
	}
	else {
		echo "";
		exit;
	}
	
?>
以下是效果

有疑问的可以致电我邮箱