PHP微信公众开发笔记系列
日期:2014.9.2
今天主要的任务是昨天提到的那个处理缓存信息的问题,我需要保存一些消息用来做二次判断。
首先,记录一些PHP语法知识吧。
1、PHP中字符串的连接语法:
在lua中,两个字符串的连接很简单,加入有两个字符串 "aaa";"bbb"; 需要将这两个字符串连接起来,只需要用两个句点 .. 便可以了:"aaa" .. "bbb"; 这里要注意,字符串与句点直接需要有空格,没有空格会报错;
而在PHP中,连接只需要一个句点就可以了:"aaa"."bbb"; 而且不需要强制在字符串和句点之间用空格;
2、得到时间,转换为日期格式:
使用date函数,格式为:date('Y-m-d H:i:s',time());挺简单的,记录一下
公众平台开发需求完成进度。
现在回到昨天留下的那个任务:利用session缓存记录信息,实现我们构想的那个菜单:
php中关于session的使用,我不是很清楚,所以就一直度娘度娘的,折腾了一番,总算是实现了我的功能需求了,不过还是觉得有一些不足的地方,留给以后再来修正吧。
昨天提到了,我要实现的菜单,希望能记住上一条信息。即提醒用户输入查询,进入查询菜单,在用户发送过来“查询”之后,下一条信息就应该转入查询菜单了,即我需要记住用户发送过“查询”这个信息。在度娘度了好久之后,查找到了要么就用数据库,要么就用session,在PHP中用数据库还不会,然后我感觉就简单的处理一下记住信息应该不需要动用数据库,所以采用的是使用session。
使用Session来实现我们的需求:
php中关于session具体该怎么用,以后还是需要度娘来详细了解一番,现在我们这只是简单的使用。
在查阅资料的时候,有网友提到用用户的username作为唯一id,这样就使得针对每个用户存储的信息会不一致(因为我们现在是服务器发送消息,每个用户都会发送消息过来,不能影响别的用户的使用),所以代码实现如下:
session_id($postObj->fromUsername); //这个是微信服务器post过来的xml数据包中用户名字,用这个作为id
session_start(); //这个应该是开启session的意思吧?
而我这两行代码该放到哪里也不是很清楚,现在我是将这个代码放在 responseMsg函数中了,不知道是不是这样的,后面的测试是有用的。
开启了session之后,就是记录信息了:
$_SESSION['menu_type'] = $this->getUserMenu($textWord); //这里的getusermenu是我用来根据用户输入得到菜单类型的函数;记录信息用到了$_SESSION这个变量,这里是以数组形式使用??
在我们记录好了信息之后,该进行信息的判断了,使用到:
isset($_SESSION['menu_type']); //用isset来判断我们是否设置了这个值,这样就能判断用户是否选择了一个菜单了
然后在我们不需要使用的时候,则使用以下函数来销毁这个:
unset($_SESSION['menu_type'];
在代码中再做相应的调整,便可以实现我们的需求了。然后现在觉得不足的地方是,我该在哪个时候销毁保存的用户选择的菜单类型呢?假如用户选择了“查询”菜单,那么我们这边就是响应用户的查询行为了,至少在用户查询的过程中我们不应该销毁掉保存的菜单类型。我感觉合理的销毁有三种情况:用户关掉了对话框(即用户退出了和我们这个公众号的聊天框,但网上没查到怎么知道用户退出了);用户长时间内没有执行查询操作(即用户在选择了“查询”菜单的前提下,经过了一个给定的时间内没有执行相应的查询操作,这个时候自动销毁);最后就是用户自动选择退出。不销毁记录的信息,会出现这样的问题,在用户选择了“查询”菜单,然后用户退出了与公众号的聊天,下一次再进入的时候,还会保存记录的用户选择的菜单信息,感觉这样是不合理的。
抛开上面提到的问题,至少这一步我们需要的功能是实现了,有关的问题慢慢修复吧。