微信公众号-XML数据接收与处理

发布时间 2023-10-26 19:08:46作者: 海燕心海

第一步:接收微信发来的xml数据 有以下两种方式

$xml = $GLOBALS['HTTP_RAM_POST_DATA'];// php7 版本以上不能使用
$xml = file_get_contents('php://input');

第二步:对接收过来的数据进行处理

libxml_disable_entity_loader(true);
$obj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //转换为对象

第三步:根据接收过来的参数就行对应方法的调用

 //开发者微信号
$FromUserName = $obj->FromUserName;
//接收方帐号(收到的OpenID)
$ToUserName = $obj->ToUserName;
//用户输入的关键词
$keyword = trim($obj->Content);
//消息类型,文本为text/event
$MsgType = $obj->MsgType;
//事件 KEY 值,与自定义菜单接口中 KEY 值对应
$EventKey = $obj->EventKey;
//事件类型,CLICK
$Event = $obj->Event;

第四步:逻辑处理 有两种方式ifelse 和 switech

switch ($MsgType)
{
    case 'text'://文本
        $this->GetText($FromUserName,$ToUserName,$keyword);
        break;
    case 'event'://菜单
        switch ($Event){
            case 'CLICK':
                if ($EventKey == 'V1001_LINKING') //对应菜单下面的操作
                break;
        }
        break;
}

列举:文本回复

	/**
     * 文本消息
     * @param $FromUserName 发送方帐号
     * @param $ToUserName 接收账号
     */
    public function GetText($FromUserName,$ToUserName,$keyword = '')
    {
        //回复的内容
        $str = '你好';
        $textTpl = "
            <xml>
                <ToUserName><![CDATA[%s]]></ToUserName>
                <FromUserName><![CDATA[%s]]></FromUserName>
                <CreateTime>%s</CreateTime>
                <MsgType><![CDATA[%s]]></MsgType>
                <Content><![CDATA[%s]]></Content>
            </xml>
            ";

        $result = sprintf($textTpl,$FromUserName,$ToUserName,time(),'text',$str);
        echo $result;
    }