3、微信公众号开发之接收用户消息

接受用户消息

当Token通过验证之后,在用户发送消息过来的时候,微信服务器将也会带上前面3个参数(signature、timestamp和nonce)访问开发者设置的URL,同时还会将消息的XML数据包POST到URL 上。


第一步:获取POST数据

	$postData = $HTTP_RAW_POST_DATA; //获取POST数据


第二步:解析XML数据

 	$postObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);


第三步:根据用户的消息类型执行不同的操作

例如:文本消息;

	<xml>
 	<ToUserName><![CDATA[toUser]]></ToUserName>
 	<FromUserName><![CDATA[fromUser]]></FromUserName> 
 	<CreateTime>1348831860</CreateTime>
 	<MsgType><![CDATA[text]]></MsgType>
 	<Content><![CDATA[this is a test]]></Content>
	 <MsgId>1234567890123456</MsgId>
 	</xml>
	参数		描述
	ToUserName	开发者微信号
	FromUserName	发送方帐号(一个OpenID)
	CreateTime	消息创建时间 (整型)
	MsgType		text
	Content		文本消息内容
	MsgId		消息id,64位整型

获取消息对应的参数:

        $FromUserName = $postObj->FromUserName;//发送方
        $ToUserName = $postObj->ToUserName;//接收方
        $Content = $postObj->Content; //用户发送的消息内容

案例(实现用户发送文本消息内容,回复自定义的内容):

<?php
//--------------------------- 接收用户文字记录--------------------------------
        //1.获取微信服务器post请求过来的数据;
        // $postData = $HTTP_RAW_POST_DATA; //获取POST数据  
                $postData = $HTTP_RAW_POST_DATA; //获取POST数据
    // $formxml = " <xml>
                         // <ToUserName><![CDATA[接收方:J、wen]]></ToUserName>
                         // <FromUserName><![CDATA[发送方:User]]></FromUserName> 
                         // <CreateTime>2017-1-1</CreateTime>
                         // <MsgType><![CDATA[text]]></MsgType>
                         // <Content><![CDATA[消息发送成功...]]></Content>
                         // <MsgId>1234567890123456</MsgId>
                         // </xml>";

//2.解析服务器的xml包
        $postObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);
        // echo "<pre>";
        // print_r($postObj);
        // echo "</pre>";
        
// 3.获取用户发的消息:
        $FromUserName = $postObj->FromUserName;//发送方
        $ToUserName = $postObj->ToUserName;//接收方
        $MsgType = $postObj->MsgType;//消息类型
        $CreateTime = $postObj->CreateTime;//创建时间
        $Content = $postObj->Content;//消息内容
        $MsgId = $postObj->MsgId;//消息ID

        $time = time();//获取当前时间;
//--------------------------- 回传记录--------------------------------

        // if("text" != $MsgType){
        //         $reMsg = "用户发送的不是文本消息!";
        // }else{
        //         $reMsg = $FromUserName;
        //         echo $FromUserName.$ToUserName.$MsgType.$CreateTime.$Content.$MsgId;
        //         exit;
        // }

        $toxml = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        </xml>";
        $Content2 = "我试管理员 ,你是谁?";


        //格式化消息模板 
        $resultStr = sprintf($toxml,$FromUserName,$ToUserName,$time,$Content2);
        echo $resultStr; //输出结果 


?>
本节用到的PHP函数:
$HTTP_RAW_POST_DATA — 原生POST数据

simplexml_load_string - 解释XML字符串转换成对象

sprintf的 - 返回一个格式化字符串




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值