微信开发第十四章 公司通讯录开发(三)
微信教程跳票好久了,今天总算更新一章,把通讯录这个案例完结掉,之前几章有不少朋友反映写的过于详细了,大家可能更多的是需要一些思路和方法,所以我这次是将通讯录完整代码提供下载,回复“微信代码”可以下载完整代码包,建议先下载安装了再看文章,以下是注意事项:
数据库结构有改动,大家可以将原来的数据库删除后重新创建,创建方法请查看《微信公众平台入门到精通》Vol.15,新数据库创建代码在weixincourse.txt里。
与微信接口文件为wx_interface.php,大家可以将里面源代码复制粘贴到自己的接口文件里覆盖掉。
其他的文件全部上传到SAE的代码编辑里,有同名文件可以先删除原来文件再上传。
文件说明:
base-class.php 自定义函数,无需改动
class_add.php 添加部门,无需改动
class_manager.php 部门管理,无需改动
roster_add.php 添加员工,需要改动118行的Storage空间名称
roster_manager.php 员工管理
detail.php 前端查看员工详情,无需改动
list.php 前端查看部门列表,无需改动
wx_tpl.php 回复消息的模板,无需改动
wx_interface.php 微信接口文件,根据自己实际修改名称后台文件没有加样式文件,所以看起来会很简陋,我主要是讲开发方法,CSS虽然我也很强,但是不在教程范畴里,有想学的可以自己找些网页模板。
程序没有进行优化,其实很多都可以用过程来写,但是为了让大家更好理解,就不厌其烦的写下吧……
四、公司通讯录开发
首先回答有些朋友的疑问为什么要做通讯录案例?这个案例貌似没有什么价值,确实从现实使用来看这个案例真没啥价值,但我是希望通过这个案例教大家学会数据库的使用、后台的开发、微信账号绑定、微信搜索、记录翻页等一些基本方法,然后可以结合自己的实际需求来做开发。
上传员工照片
第97行是监测是否有选择文件,$_FILES['roster_pic']['name']是上传文件的原始文件名。
第103到105行获取上传文件名的后缀
第107到111行监测后缀是否合法。
第118行是保存图片到Storage里并返回上传后的图片实际路径赋值给$old_roster_pic。
注意:
1. 上传文件的数据会保存成一个临时文件,web是不能直接访问用户电脑文件的,所以我们读取的源文件是$_FILES['roster_pic']['tmp_name'] 。
- 由于我将添加和修改是放在同一个文件里,$old_roster_pic在表单内是用来存放修改状态下旧图片文件名称的,当表单提交后如果没有上传图片并且$old_roster_pic为空(即不在修改状态)则会提示上传图片,如果上传了图片则更新$old_roster_pic这个变量,最后写入数据库时使用的都是$old_roster_pic的值。
后台的程序基本就是这些,大家可以结合《微信公众平台入门到精通》Vol.15来理解,如果有不明白的可以后台咨询。下面主要讲前台与微信通讯的程序,都在wx_interface.php里。
微信账号绑定
微信用户的账号如何与自己网站的用户系统打通,这个是很多人关心的问题,其实很简单,我们都知道微信用户在关注公众号或者发送消息时都会有一个唯一的OPENID传过来,这个OPENID就是这个用户对应这个公众账号的唯一身份标示,我们只要将这个OPENID与自己网站的用户系统一一绑定就可以了。
方法有两种,一是将OPENID作为登陆页面或者注册页面的URL参数,当用户点击这个URL时跳转到WAP页面(即自己网站)上进行绑定,另外就是在对话框里进行绑定,我今天介绍的就是在对话框里进行绑定。
第598行是通过传入的OPENID为条件,检测在员工数据表中是否存在某条记录的roster_openid等于该OPENID。
第600到609行是返回函数运行的记过,如果有记录的话返回该条数据,如果没有就返回失败。
先判断用户是否已经绑定过,绑定过给提醒中断执行。否则进入绑定流程,由于绑定操作需要分多个步骤验证多个条件,然后一并查询数据库,因此我们要保存每一步的动作和数据,这里使用memcache来保存每个用户的上一步操作。这里先保存了BD_0标示这是绑定的第一个步骤,提示用户信息为“请输入你的姓名”。
保存memcache的方法为:
$mc->set(缓存变量名, 保存的数据, 0, 缓存时间单位秒);
读取memcache的方法为:
$mc->get(缓存变量名);
这个流程使用了memcache来保存一些临时变量和多步骤操作,除了用来绑定用户账户外,也适合一些调查问卷或者注册登陆操作。
微信搜索
其实这步可以理解为进入网站的二级导航页面,一个网站有首页和各种导航栏目,那么在这个通讯录里帮助就是首页,你输入HELP就到了首页,输入XM就到员工查询这个二级栏目,之后除非你输入BM、GH等一些栏目名,其他的操作都默认是在员工栏目下进行。
微信翻页
很多人非常好奇ZTalk的公众账号是如何实现文章查询翻页的,其实原理也很简单,只是把网页上的翻页代码稍微改装一下,然后使用memcache保存每个用户当前的页码和搜索的关键字就可以了。
在这里我们获取搜索关键字会有两个来源,一个是用户输入的,一个是在翻页时在缓存中保存的,所以先得尝试从缓存里获取用户之前保存的搜索关键字,如果值为null则表示这是第一次搜索,关键字为用户输入的$from_content,否则就使用缓存中保存的关键字,这就是为什么能够翻页的关键,我们利用缓存机制存放了用户之前输入的搜索关键字。
第一个是设置每页显示的条数,我这里是设置成3条,加上封面消息和尾部翻页提示消息最后显示会是5条。
当前页码是从缓存中获取,$last_data在前面已经使用explode函数以||为分割字符变成数组,$last_data[0]为搜索关键字,$last_data1为页码,根据当前页码计算数据库查询开始的记录指针位置。
查询出结果后进行数据转化,这里做了一个数组方便后面循环输入多图文消息,每个图文消息其实就4个元素:标题、描述、图片、链接,先直接用搜索关键字+当前页等做一个封面消息,然后循环将数据库查询结果也转化成图文消息的元素。
用符合搜索条件的记录总数去除以每页显示数量,ceil是一个向上舍入为最接近的整数的函数,就是ceil(5/4)=2,而不是1.25,这样就知道总页数了,然后判断当前页是否最后一页,如果不是最后一页则将当前页加1然后存放到memcache里,在下次翻页查询时保存数据的这个memcache变量里其实已经变成“搜索关键字||2”。
关于通讯录就讲到这里了,响应朋友们的建议多讲些设计理念,希望大家能够触类旁通,和自己业务相结合。后面还有两个教程也打算用这个方法来做了,会提供完整代码,讲一些要点,就是间隔时间会比较久因为要码代码……
相关文章
- 微信开发第一章 微信公众号的注册、设置与登陆
- 微信开发第二章 公众平台后台介绍
- 微信开发第三章 公众平台群发消息
- 微信开发第四章 公众平台编辑模式(上)
- 微信开发第五章 公众平台编辑模式(下)
- 微信开发第六章 公众账号自动回复
- 微信开发第七章 公众平台开发模式
- 微信开发第八章 新浪云计算平台注册和使用
- 微信开发第九章 用微信开发模式做欢迎词
- 微信开发第十章 公众账号发送欢迎图文消息
- 微信开发第十一章 公众账号自定义回复功能
- 微信开发第十二章 公众账号接收非文字消息
- 微信开发第十三章 公众账号接收非文字消息
- 微信开发第十四章 公司通讯录开发(一)
- 微信开发第十四章 公司通讯录开发(二)
- 微信开发第十四章 公司通讯录开发(三)
- 微信开发第十四章 公司通讯录开发(四)
- 微信开发教程 微信问答系统
- 微信开发第十五章 自定义菜单开发
- 微信开发第十六章 微信音乐播放器(一)
- 微信开发第十六章 微信音乐播放器(二)
- 微信开发第十六章 微信音乐播放器(三)