微信开发(2)-被动回复用户消息

配置好上一篇的服务器之后,用户发送消息,就会自动post提交到我们配置的地址,我们可以通过file_get_contents(“php://input”)获取微信提交过来的数据,使用simplexml_load_string()把xml数据转成SimpleXMLElement 对象,代码如下

$postStr = file_get_contents("php://input");
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

测试的时候发现微信会回调两次,解出来的数据是这样的

SimpleXMLElement::__set_state(array(
   'ToUserName' => 'fsfsdfsdfsd',
   'FromUserName' => 'dfwfsfsdfsdfsd',
   'CreateTime' => '1590742768',
   'MsgType' => 'event',
   'Event' => 'location_select',
   'EventKey' => 'rselfmenu_2_0',
   'SendLocationInfo' => 
  SimpleXMLElement::__set_state(array(
     'Location_X' => 'xxxx',
     'Location_Y' => 'xxxx',
     'Scale' => '15',
     'Label' => 'xxxxx',
     'Poiname' => 'xxxxxx',
  )),
SimpleXMLElement::__set_state(array(
   'ToUserName' => 'fsfsdfsdfsd',
   'FromUserName' => 'dfwfsfsdfsdfsd',
   'CreateTime' => '1590742768',
   'MsgType' => 'location',
   'Location_X' => 'xxxx',
   'Location_Y' => 'xxxx',
   'Scale' => '15',
   'Label' => 'xxxx',
   'MsgId' => 'xxxx',
))

第二次的是我们需要的,我这个是给公众号发送的定位,MsgType类型是location,除了这种还有text,image,voice等等
然后就是根据传过来的数据处理逻辑,把想要返回给用户的数据备好

$textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                    </xml>";
        $result = sprintf($textTpl, $fromUserName, $toUserName, time(), $content);

ToUserName是要发送的用户的openid,fromUserName是微信号,直接把微信提交过来的数据拿来用就可以了,不过记得要把两者的位置调换一下,因为微信接收信息的时候是作为接收者,用户作为发送者,回复用户的时候微信是作为发送者,用户是作为接收者。
sprintf会把数据转成xml数据,然后直接echo用户就可以收到了
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章