【php精品源码栏目提醒】:本文主要为网学会员提供“微信公众平台入门到精通vol.17 - 其它资料”,希望对需要微信公众平台入门到精通vol.17 - 其它资料网友有所帮助,学习一下!
微信教程跳票好久了,今天总算更新一章,把通讯录这个案例完结掉,之前几章有不少朋友反映写的过于详细了,大家可能更多的是需要一些思路和方法,所以我这次是将通讯录完整代码提供下载,回复“微信代码”可以下载完整代码包,建议先下载安装了再看文章,以下是注意事项:1、数据库结构有改动,大家可以将原来的数据库删除后重新创建,创建方法请查看《微信公众平台入门到精通》Vol.15,新数据库创建代码在 weixincourse.txt里。
2、与微信接口文件为 wx_interface.
php,大家可以将里面源代码复制粘贴到自己的接口文件里覆盖掉。
3、其他的文件全部上传到 SAE 的代码编辑里,有同名文件可以先删除原来文件再上传。
4、文件说明: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 微信接口文件,根据自己实际修改名称5、后台文件没有加样式文件,所以看起来会很简陋,我主要是讲开发方法,CSS虽然我也很强,但是不在教程范畴里,有想学的可以自己找些网页模板。
6、程序没有进行优化,其实很多都可以用过程来写,但是为了让大家更好理解,就不厌其烦的写下吧……昨天有不少朋友在问如何测试不知道如何绑定账号,具体步骤是先在后台添加一个员工,然后在微信公众账号里根据提示将添加的员工信息输入完成绑定,如图添加一个员工: 第十四章 公司通讯录开发 四、公司通讯录开发首先回答有些朋友的疑问为什么要做通讯录案例?这个案例貌似没有什么价值,确实从现实使用来看这个案例真没啥价值,但我是希望通过这个案例教大家学会数据库的使用、后台的开发、微信账号绑定、微信搜索、记录翻页等一些基本方法,然后可以结合自己的实际需求来做开发。
上传员工照片在添加员工文件(roster_add.
php)中有一个图片上传功能,图片上传在表单里是使用 input 控件的 file 属性,如下图:当提交表单后,程序会收到一个名称为 roster_pic 的文件变量,文件变量获取是用_FILES,而不是_GET 或_POST,如下图:第 97 行是监测是否有选择文件,_FILESroster_picname是上传文件的原始文件名。
第 103 到 105 行获取上传文件名的后缀第 107 到 111 行监测后缀是否合法。
第 118 行是保存图片到 Storage 里并返回上传后的图片实际路径赋值给old_roster_pic。
注意:1、上传文件的数据会保存成一个临时文件,web 是不能直接访问用户电脑文件的,所以我们读取的源文件是_FILESroster_pictmp_name 。
2、由于我将添加和修改是放在同一个文件里,old_roster_pic 在表单内是用来存放修改状态下旧图片文件名称的,当表单提交后如果没有上传图片并且old_roster_pic 为空(即不在修改状态)则会提示上传图片,如果上传了图片则更新old_roster_pic 这个变量,最后写入数据库时使用的都是old_roster_pic的值。
后台的程序基本就是这些,大家可以结合《微信公众平台入门到精通》Vol.15来理解,如果有不明白的可以后台咨询。
下面主要讲前台与微信通讯的程序,都在 wx_interface.
php 里。
微信账号绑定微信用户的账号如何与自己网站的用户系统打通,这个是很多人关心的问题,其实很简单,我们都知道微信用户在关注公众号或者发送消息时都会有一个唯一的OPENID 传过来,这个 OPENID 就是这个用户对应这个公众账号的唯一身份标示,我们只要将这个 OPENID 与自己网站的用户系统一一绑定就可以了。
方法有两种,一是将 OPENID 作为登陆页面或者注册页面的 URL 参数,当用户点击这个 URL 时跳转到 WAP 页面(即自己网站)上进行绑定,另外就是在对话框里进行绑定,我今天介绍的就是在对话框里进行绑定。
首先是检测用户是否绑定了微信号,这里我写了个函数,如下图:第 593 行是定义函数的名字为 check_user,函数传入的变量为fromUsername,即微信用户的 OPENID。
第 598 行是通过传入的 OPENID 为条件,检测在员工数据表中是否存在某条记录的 roster_openid 等于该 OPENID。
第 600 到 609 行是返回函数运行的记过,如果有记录的话返回该条数据,如果没有就返回失败。
在用户关注公众账号时我就判断是否有绑定过账号,并且根据绑定情况回复不同的欢迎词,如下图:当检测到用户关注的事件,调用 check_user 这个函数,如果返回不是失败则提示使用帮助,否则提示绑定账号,效果如图:当用户输入 BD 字符时进入账号绑定模式,如下图:先判断用户是否已经绑定过,绑定过给提醒中断执行。
否则进入绑定流程,由于绑定操作需要分多个步骤验证多个条件,然后一并查询数据库,因此我们要保存每一步的动作和数据,这里使用 memcache 来保存每个用户的上一步操作。
这里先保存了 BD_0 标示这是绑定的第一个步骤,提示用户信息为“请输入你的姓名”。
memcache 服务的开启请查看《微信公众平台入门到精通》Vol.13,在程序里使用方法为在代码最开头启动 memcache,如下图:保存 memcache 的方法为:mc-set缓存变量名 保存的数据 0 缓存时间单位秒读取 memcache 的方法为:mc-get缓存变量名我在程序的开头加了获取 memcache 值的代码,每次用户请求时都会从memcache 中获取用户上一步的操作和数据。
其中fromUsername. _do 为用户操作,fromUsername. _data 为用户数据,用fromUsername 可以保证每个用户都有独立的缓存变量名。
接下来等用户输入姓名后,接口会收到新的请求,这个时候由于 memcache 保存过上步标示,因此这里会根据操作缓存的数据判断进入到第二步,last_do的值是从程序开始就获取 memcache 值后获取的,如下图:这里多了一个保存数据的缓存设置,保存了用户提交的姓名数据,同时将操作缓存的值改为了 BD_1,然后继续提示用户输入工号。
当用户输入工号后,会进入第三步,如下图:继续保存数据,将上一步的数据(姓名)与本次数据(工号)合并用“”分割,同时将操作缓存的值改为了 BD_2,然后继续提示用户输入手机号。
当用户输入手机号后,就进入最后一步验证,如下图:进入最后一步后先清空操作和数据缓存,然后将之前保存的数据last_do 加上本次用户输入内容合并转换成数组,并用 list 函数分别赋值给roster_nameroster_numberroster_mp。
再进行数据库查询满足用户姓名、工号和手机与输入数据完全相同并且roster_openid(员工 openid)为空的记录,如果有符合条件的记录则更新该记录,将fromUsername(当前操作用户的 openid)保存 到 roster_openid 里,完成绑定。
这个时候我们输入“help”就会可以进行后续操作了。
PS:“输入 exit 退出操作”这个也很简单,当用户输入 exit 的时候程序会清空操作和数据缓存, 也就是说所有之前的操作和数据都没有了, 即所有操作重新开始,如下图:这个流程使用了 memcache 来保存一些临时变量和多步骤操作,除了用来绑定用户账户外,也适合一些调查问卷或者注册登陆操作。
微信搜索搜索其实就是编辑模式下的关键字自动回复,我这里拿姓名搜索举例,首先我们要先切换当前模式到姓名搜索,如下图:这部分代码与账号绑定的第一步是一样的,我们用 memcache 存放当前的操作,这个时候存放操作动作的缓存变量里就标示了当前是在姓名搜索状态下。
同时输出提示,请输入员工姓名。
其实这步可以理解为进入网站的二级导航页面,一个网站有首页和各种导航栏目,那么在这个通讯录里帮助就是首页,你输入 HELP 就到了首页,输入 XM就到员工查询这个二级栏目,之后除非你输入 BM、GH 等一些栏目名,其他的操作都默认是在员工栏目下进行。
然后根据提示输入员工名字进行查询,如下图:从数据库中查找与用户输入一致的记录,如果没有则返回提醒:如果查询到则返回一个图文消息,这里没有去考虑员工重名的情况,所以查询和返回结果都是只取一条记录的。
前端展现原因我只取工号、姓名、当前状态、照片等字段返回,查看详情点击阅读原文进入到 detail 页,把该员工的 ID 号(不是工号)作为 URL 参数传递过去,然后再做一次数据库查询将所有字段提取出来展现。
微信翻页很多人非常好奇 ZTalk 的公众账号是如何实现文章查询翻页的,其实原理也很简单,只是把网页上的翻页代码稍微改装一下,然后使用 memcache 保存每个用户当前的页码和搜索的关键字就可以了。
在通讯录里是用部门查询来示例的,首先依然是进入部门查询这个栏目,如下图:上面的代码除了保存当前操作状态为部门查询以外,又用另外一个 memcache的变量保存当前搜索关键字和页码“null 1”,其中 null 为当前搜索关键字(因为一开始用户没有输入所以是空的),1 表示起始页是第一页,然后输出提示,请输入部门名称。
当用户输入部门名称后,先查询这个部门的 ID 号,因为在员工表里没有直接存放部门名称而是存放的与部门对应的 ID 号,如下图:
上一篇:
数据库高级应用
下一篇:
数字图像的可逆数字水印研究