zhangguanzhang's Blog

微信公众号接入图灵机器人api

字数统计: 853阅读时长: 3 min
2017/01/08

最近在弄微信远程控制,闲来无聊把图灵机器人接入自己公众号

网上的有的是直接图灵官网那接入,但是那样就完全接管了公众号的消息管理了,自己的就没用了,然后百度了一番,终于弄出来了

预备条件:服务器(云主机,自己买),微信公众号,和一个图灵的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;
    }
    
?>

以下是效果

jscode


有疑问的可以致电我邮箱

CATALOG
  1. 1. 网上的有的是直接图灵官网那接入,但是那样就完全接管了公众号的消息管理了,自己的就没用了,然后百度了一番,终于弄出来了
    1. 1.1. 预备条件:服务器(云主机,自己买),微信公众号,和一个图灵的apikey(图灵官网申请个机器人后就可以获得),会点php基础(我用php开发的..)
      1. 1.1.0.1. 先自己微信公众号先对接上自己主机。怎么对接有时间我发下教程。。。
    2. 1.1.1. 另外再废话点,微信公众号一般是三种,订阅号(个人),服务号(工商个体户),企业号(企业用),订阅号只能个人用并且开启开发者模式后(也就是你对接服务器了后无法自定义菜单,这点很坑….),服务号和企业号不说了,反正个人申请不了…,另外无论你申请了哪种公众号,你都可以开启测试号,测试号是微信官方给开发者开发测试用的,是三种公众号的混合体,但是使用期限只有一年(怎么使用自己想清楚就行了,别瞎打开了)…
    3. 1.1.2. 微信公众号流程是用户发消息给微信服务器,然后微信服务器生成对应的xml转发给你主机,你主机解析xml后进行处理回应对应的xml给微信服务器,微信服务器解析xml后返回给用户
    4. 1.1.3. 以下是逻辑处理代码,微信的xml是post过来的,先接收post内容,然后判断是否非空,再把xml转成对象,然后几个关键的xml数据非空再往下处理,然后判断用户消息类型也就是Msgtype分类处理,菜单的每个还有个唯一的key用于指定菜单的唯一性,的目前还没写完,看下微信公众号官方开发文档就懂了,然后根据关键字回复,default就是非自定义的关键字以外的内容,也就是要交给图灵机器人的,api已打码,自己的填进去就行,目前还没完善,仅供参考
    5. 1.1.4. 以下是效果