公司通讯录开发

原文:http://www.cnblogs.com/imaker/p/6251219.html

四、公司通讯录开发

 

首先回答有些朋友的疑问为什么要做通讯录案例?这个案例貌似没有什么价值,确实从现实使用来看这个案例真没啥价值,但我是希望通过这个案例教大家学会数据库的使用、后台的开发、微信账号绑定、微信搜索、记录翻页等一些基本方法,然后可以结合自己的实际需求来做开发。

上传员工照片

在添加员工文件(roster_add.php)中有一个图片上传功能,图片上传在表单里是使用input控件的file属性,如下图:

当提交表单后,程序会收到一个名称为roster_pic的文件变量,文件变量获取是用$_FILES,而不是$_GET或$_POST,如下图:

第97行是监测是否有选择文件,$_FILES['roster_pic']['name']是上传文件的原始文件名。

第103到105行获取上传文件名的后缀

第107到111行监测后缀是否合法。

第118行是保存图片到Storage里并返回上传后的图片实际路径赋值给$old_roster_pic。

注意:

1、上传文件的数据会保存成一个临时文件,web是不能直接访问用户电脑文件的,所以我们读取的源文件是$_FILES['roster_pic']['tmp_name'] 。

2、由于我将添加和修改是放在同一个文件里,$old_roster_pic在表单内是用来存放修改状态下旧图片文件名称的,当表单提交后如果没有上传图片并且$old_roster_pic为空(即不在修改状态)则会提示上传图片,如果上传了图片则更新$old_roster_pic这个变量,最后写入数据库时使用的都是$old_roster_pic的值。

后台的程序基本就是这些,下面主要讲前台与微信通讯的程序,都在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,如下图:


保存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_name,$roster_number,$roster_mp。

再进行数据库查询满足用户姓名、工号和手机与输入数据完全相同并且roster_openid(员工openid)为空的记录,如果有符合条件的记录则更新该记录,将$fromUsername(当前操作用户的openid)保存到roster_openid里,完成绑定。

这个时候我们输入“help”就会可以进行后续操作了。

PS:“输入exit退出操作”这个也很简单,当用户输入exit的时候程序会清空操作和数据缓存,也就是说所有之前的操作和数据都没有了,即所有操作重新开始,如下图:

这个流程使用了memcache来保存一些临时变量和多步骤操作,除了用来绑定用户账户外,也适合一些调查问卷或者注册登陆操作。

微信搜索

搜索其实就是编辑模式下的关键字自动回复,我这里拿姓名搜索举例,首先我们要先切换当前模式到姓名搜索,如下图:

这部分代码与账号绑定的第一步是一样的,我们用memcache存放当前的操作,这个时候存放操作动作的缓存变量里就标示了当前是在姓名搜索状态下。同时输出提示,请输入员工姓名。

其实这步可以理解为进入网站的二级导航页面,一个网站有首页和各种导航栏目,那么在这个通讯录里帮助就是首页,你输入HELP就到了首页,输入XM就到员工查询这个二级栏目,之后除非你输入BM、GH等一些栏目名,其他的操作都默认是在员工栏目下进行。

然后根据提示输入员工名字进行查询,如下图:

从数据库中查找与用户输入一致的记录,如果没有则返回提醒:

如果查询到则返回一个图文消息,这里没有去考虑员工重名的情况,所以查询和返回结果都是只取一条记录的。

前端展现原因我只取工号、姓名、当前状态、照片等字段返回,查看详情点击阅读原文进入到detail页,把该员工的ID号(不是工号)作为URL参数传递过去,然后再做一次数据库查询将所有字段提取出来展现。

转载于:https://www.cnblogs.com/imaker/p/6251219.html

微信公众号教程(16)公司通讯录开发 终相关推荐

  1. php 微信开发 菜单,微信公众号中个性化菜单的开发实例

    微信公众号中个性化菜单的开发实例 个性化菜单让公众号的不同用户群体看到不一样的自定义菜单.该接口开放给已认证订阅号和已认证服务号,个性化菜单要求用户的微信客户端版本在iPhone6.2.2,Andro ...

  2. 微信公众号教程-注册发布文章

    用博文来说,不便理解,直接上教学视频! 视频地址:微信公众号教程-注册发布文章

  3. 微信公众号代运营公司哪家好?

    公众号的推广和营销是常用的宣传手段,现在很多企业和实体店都有自己的品牌公众号,公众号上有不少粉丝,但是,很少有企业会自己经营公众号,由于投入到公众号运营方面的时间.精力和成本有限,很多公司都会考虑代运 ...

  4. 微信公众号代运营公司有哪些_广州微信代运营公司有哪些

    随着微信的普及,微信用户逐步在壮大,很多商家企业都开通了自己的微信公众号,然而,要运营好微信公众号还是有一定难度的.这个时候,最好找一些微信公众号代运营公司来帮忙做.微信公众号代运营公司有哪些呢?在广 ...

  5. 上篇: php 微信公众号 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  6. Python微信公众号教程基础篇——收发文本消息

    1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...

  7. 自助微信公众号客服提醒功能开发的实现

    本周我公司的技术人员做了一个有技术含量的一个新功能:客服功能.此功能主要用于微信公众号客服提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约. 1. ...

  8. 公众号第三方平台和微信公众号平台的区别与开发步骤

    我们知道通过微信公众号平台的开放API可以实现用户个性制定制的功能,我们又知道使用开放API时必须知道AppID(应用ID)和AppSecret(应用密钥),而且还要配置URL(服务器地址).Toke ...

  9. Java开发微信公众号之整合weixin-java-tools框架开发微信公众号

    微信开发者接入文档 : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 微信公众平台测试账号申请: http ...

  10. html5转apicloud,APICloud app应用转微信公众号教程

    概要 现在,APICloud 应用,可以一键生成微信公众号! APICloud 基于积淀已久的 iOS/Android 原生引擎开发技术,结合微信公众号运行环境的特点,针对性地推出了为其量身定制的适配 ...

最新文章

  1. union--求集合的并集
  2. 生成TFrecord
  3. 2014\Province_C_C++_B\2 切面条
  4. docker 镜像 导入导出
  5. 10. 我的第一个Java应用程序
  6. python socket-tcp逻辑
  7. UIScrollView, 滚动视图
  8. 网页标题前面的logo怎么设置
  9. 恩尼格玛模拟器_使用ENIGMA模拟器进行数据加密和解密
  10. Mysql安装之后没有my.ini的解决办法
  11. 灰度直方图及直方图均衡化的MATLAB实现
  12. PDF文件如何压缩大小
  13. Spark SQL 编程初级实践
  14. 一位父亲给女儿的九条人生忠告
  15. android 广播失败,android - 发送广播Intent SIM_STATE_CHANGED失败 - 堆栈内存溢出
  16. 数据库多表查询优化思路之笛卡儿积
  17. 【剑桥摄影协会】超焦距
  18. steam插件_教程丨如何查询Steam游戏的历史价格信息
  19. 同个局域网内的A,B两个电脑主机,A能PING通B电脑,B无法PING通A 电脑,双方均能学习到对方ARP地址
  20. 设计心理学读后的随想

热门文章

  1. 【转】演化博弈理论(EGT)
  2. perl操作postsql
  3. 计算机无法读取手机内存,手机sd卡无法读取,教您解决手机sd卡无法读取的方法...
  4. 基于能量采集的认知无线电时间和功率分配(二)
  5. java adt教程_用Eclipse安装ADT插件搭建Android环境(图文)
  6. OSGEARTH三维地形开源项目
  7. 23个适合logo设计的常用英文字体
  8. NTP详解(网络时间协议)
  9. 电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等
  10. 最好用的php编程软件_php 编程软件 php编程软件有哪些