>백엔드 개발 >PHP 튜토리얼 >PHP微信公众开发笔记(三)

PHP微信公众开发笔记(三)

WBOY
WBOY원래의
2016-06-23 13:49:58722검색

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'];


在代码中再做相应的调整,便可以实现我们的需求了。然后现在觉得不足的地方是,我该在哪个时候销毁保存的用户选择的菜单类型呢?假如用户选择了“查询”菜单,那么我们这边就是响应用户的查询行为了,至少在用户查询的过程中我们不应该销毁掉保存的菜单类型。我感觉合理的销毁有三种情况:用户关掉了对话框(即用户退出了和我们这个公众号的聊天框,但网上没查到怎么知道用户退出了);用户长时间内没有执行查询操作(即用户在选择了“查询”菜单的前提下,经过了一个给定的时间内没有执行相应的查询操作,这个时候自动销毁);最后就是用户自动选择退出。不销毁记录的信息,会出现这样的问题,在用户选择了“查询”菜单,然后用户退出了与公众号的聊天,下一次再进入的时候,还会保存记录的用户选择的菜单信息,感觉这样是不合理的。


抛开上面提到的问题,至少这一步我们需要的功能是实现了,有关的问题慢慢修复吧。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.