加入收藏 | 设为首页 | 会员中心 | 我要投稿 许昌站长网 (https://www.0374zz.cn/)- 专属主机、负载均衡、智能边缘云、云防火墙、数据加密!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

开发微信公众平台接口参数调试-判断用户行为

发布时间:2022-07-05 09:53:44 所属栏目:PHP教程 来源:互联网
导读:微信开发的时候,发现有个重要的变量$postObj,获得了一个xml结构装入的对象里因为用户发来的事件,之前只知道用户发送一个消息,我进行处理. 今天要弄个用户订阅就给推送一个消息的功能,却发现不知道如何判断用户是订阅的操作,还是取消订阅,还是发消息,代码如下
  微信开发的时候,发现有个重要的变量$postObj,获得了一个xml结构装入的对象里因为用户发来的事件,之前只知道用户发送一个消息,我进行处理.
 
  今天要弄个用户订阅就给推送一个消息的功能,却发现不知道如何判断用户是订阅的操作,还是取消订阅,还是发消息,代码如下:
 
  public function responseMsg()
     {
      global $db;
  //get post data, May be due to the different environments
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  writeover("msg.txt",$postStr."rn","a+");
  。。。。。
   }
  发现$postStr是之前没有封装的字符串,直接打印,即可知道用户的行为了,测试输出的文件如下:
 
  <xml><ToUserName><![CDATA[gh_a64528aca3b]]></ToUserName>
  <FromUserName><![CDATA[oSgH_jveTxJSlFK_6QSiGeVaSyk]]></FromUserName>
  <CreateTime>1394705044</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[ha]]></Content>
  <MsgId>5990212551746www.phpfensi.com353512</MsgId>
  </xml>
  MsgType即可判断用户行为text表示用户输入了一条文本信息,如果是订阅,那么就是event 大家自己测试吧.
 
  一个新用户关注公众账号发送的消息的例子,代码如下:
 
  <xml><ToUserName><![CDATA[gh_a5218aca3b]]></ToUserName>
  <FromUserName><![CDATA[oSgH_jveTxJSlFK_6QSiGeVyk]]></FromUserName>
  <CreateTime>1394706271</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
  <EventKey><![CDATA[]]></EventKey>
  </xml>
  这样就可以得到具体的事件类型了.
 
  $msgtype = $postObj->MsgType;能判断用户的行为,后续的操作就方便多了.
 
  附上写入日志文件的代码:
 
  ‘r’ 只读方式打开,将文件指针指向文件头。
 
  ‘r+’ 读写方式打开,将文件指针指向文件头。
 
  ‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
 
  ‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
 
  ‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
 
  ‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
 
  PHP实例代码如下:
 
  function writeover2($filename,$data,$method="rb+",$iflock=1)  
  {  
      @touch($filename);/*文件不存在则创建之.可以采用file_exists验证并其他创建文件函数代替.测试结果效率相当*/  
      $handle=@fopen($filename,$method);  
      if($iflock){  
          flock($handle,LOCK_EX);  
      }  
      fwrite($handle,$data);  
      if($method=="rb+") ftruncate($handle,strlen($data));  
      fclose($handle);  
  }

(编辑:许昌站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读