微信公众平台开发(十一) 功能整合

news/2024/7/1 10:26:53

一、简介

在前面的几篇微信功能开发文档中,各个微信的功能都是独立的,单一微信只能提供一种功能,这样不符合大众开发者和客户的需求。所以在这一篇文章中,我们将对前面开发出来的微信功能进行简单整合,以供读者参考。

二、思路分析

一种简单的做法是,截取关键字,然后进行判断,执行相应功能代码。这种做法比较适合功能不多,简单的微信;另一种做法是,给各功能编号,然后记录用户选择的功能状态,用户每次查询的时候,首先判断他的状态,然后执行相应功能代码。这种做法适合功能整合比较多,复杂的微信;开发者可以根据自己的需要来进行选择。在这篇文章中,我们将会讲解天气和翻译功能的整合,更多功能的整合类似,大家可以参考着做一下。

三、关键字截取做法

3.1 关键字截取

我们定义用户发送过来的消息格式是固定好的,查询天气格式为 “地区+天气”,例如 “苏州天气”、“北京天气”,所以首先截取后两个字,判断是否为 “天气” 关键字,然后再截取前面的城市名,进行查询。同理,翻译也是截取前面的两个字,判断是否为“翻译”关键字,然后再截取后面的文字进行查询操作。

关于关键字截取方法,请参考前面的文章介绍,地址是:http://www.cnblogs.com/mchina/p/3170551.html。

//截取关键字
$weather_key = mb_substr($keyword,-2,2,"UTF-8");
$city_key = mb_substr($keyword,0,-2,"UTF-8");
$translate_key = mb_substr($keyword,0,2,"UTF-8");
$word_key = mb_substr($keyword,2,200,"UTF-8");

3.2 功能整合

复制代码
if($weather_key == '天气' && !empty($city_key) && $translate_key != '翻译'){$contentStr = _weather($city_key);
}elseif($translate_key == '翻译' && !empty($word_key)){$contentStr = _baiduDic($word_key);
}else{$contentStr = "感谢您关注【卓锦苏州】\n微信号:zhuojinsz";
}
复制代码

说明:在这里,我们已经将查询天气和翻译封装成了函数 _weather() 和 _baiduDic(),然后引入这些文件,在这里直接调用即可,非常方便。

这样,我们就完成了天气和翻译功能的整合。

3.3 测试

测试成功。

四、状态记录做法

4.1 说明

首先,我们需要将各功能进行编号,比如:

回复序号:

1. 天气查询

2. 翻译查询

然后使用数据库记录用户的查询状态,用户每次输入消息,系统先从数据库中查询该用户的状态,然后进行相应操作。

4.2 在数据库中创建用户状态表 user_flags.

复制代码
--
-- 表的结构 `user_flags`
--CREATE TABLE IF NOT EXISTS `user_flags` (`from_user` varchar(50) NOT NULL,`flag_id` int(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码

4.3 引入数据库函数文件

操作数据库,需要引入数据的操作文件,这里使用BAE 提供的MySQL 云数据库。

//引入数据库文件
require_once('includes/mysql_bae.func.php');

4.4 判断用户状态

复制代码
//判断用户状态
$sql = "SELECT flag_id FROM user_flags WHERE from_user = '$fromUsername' LIMIT 0,1";
$result = _select_data($sql);
while (!!$rows = mysql_fetch_array($result))
{$user_flag = $rows[flag_id];
}
复制代码

说明:从user_flags 表中获取flag_id 赋给$user_flag,用于下面的判断操作。

4.5 判断用户存在的状态和新输入的状态

复制代码
if(trim($keyword) <> $user_flag && is_numeric($keyword))
{$user_flag = '';$sql = "DELETE FROM user_flags WHERE from_user = '$fromUsername'";_delete_data($sql);
}
复制代码

说明:判断用户存在的状态和新输入的状态,如果状态不一样,而且输入的keyword 是数字,则设置$user_flag 为空,数据库中清除状态,好像第一次查询流程

4.6 用户状态判断

A. 状态为空,即第一次查询

复制代码
if (empty($user_flag))
{switch ($keyword){case 1:    //查询天气$sql = "insert into user_flags(from_user,flag_id) values('$fromUsername','1')";$contentStr = "请输入要查询天气的城市:如北京、上海、苏州";break;case 2:    //翻译$sql = "insert into user_flags(from_user,flag_id) values('$fromUsername','2')";$contentStr = "请输入要翻译的内容:如:早上好、good morning、おはよう";break;default: //其他$sql = "";$contentStr = "感谢您关注【卓锦苏州】\n微信号:zhuojinsz\n请回复序号:\n1. 天气查询\n2. 翻译查询\n输入【帮助】查看提示\n更多内容,敬请期待...";break;}//判断并执行上面的插入语句if (!empty($sql)){_insert_data($sql);}
}
复制代码

说明:用户状态为空,即第一次查询,如果用户输入的关键字是功能序号,即1或2,则将用户状态写入数据库,然后给出提示信息;如果用户输入的关键字不是功能序号,则给出帮助信息,提示用户输入。

B. 用户状态不为空

复制代码
else{if ($user_flag == '1'){$contentStr = _weather($keyword);    //查询天气}elseif ($user_flag == '2'){$contentStr = _baiduDic($keyword);    //翻译}
}
复制代码

说明:用户状态不为空,用户已经有查询操作,只要用户不切换功能,则一直保持在现有功能下,执行相应代码。

4.7 测试

 

五、完整代码获取

请访问 乐思乐享 官方论坛

URL:http://pan.baidu.com/s/1c0s3Jby

六、关注

请关注 卓锦苏州 微信公众帐号,卓锦苏州 基于BAE 平台开发,针对于主流的微信功能进行开发测试。

您可以关注 卓锦苏州 公众帐号进行功能测试,以及获取新的应用开发。

1. 登录微信客户端,通讯录 -> 添加朋友 -> 查找公众号 -> zhuojinsz,查找并关注。

2. 扫描二维码:

卓锦苏州 功能列表:

转载于:https://www.cnblogs.com/dengyungao/p/7550750.html


http://lihuaxi.xjx100.cn/news/240844.html

相关文章

漫谈回溯(未完待续)

将不使用优化算法、直接用朴素算法来解决问题的做法称为暴力法。 回溯是带优化的穷举。 回溯是具有界限函数的深度优先搜索。

iOS开发 最近开发了蓝牙模块,在此记录总结一下

为什么80%的码农都做不了架构师&#xff1f;>>> 1.基本概念 <1>中心者模式&#xff1a;常用的&#xff08;其实99.99%&#xff09;就是使用中心者模式作为开发&#xff0c;就是我们手机作为主机&#xff0c;连接蓝牙外设。由于开发只用到了中心者模式&#x…

Unity接入安卓sdk查看应用内存占用

注&#xff1a;若不清楚如何在unity中接入android sdk可先了解下相关流程。项目地址&#xff1a;http://download.csdn.net/download/yhuangher/9976564 在项目后期进行内存优化&#xff0c;在android端进行内存优化时做了若干辅助工具&#xff0c;比如此款&#xff0c;查看系统…

1115 Counting Nodes in a BST

我的DFS void DFS(Node* root){if(rootNULL)return;if(root->lchild){root->lchild->layer root->layer1;cnt[root->lchild->layer] ;maxLayer max(maxLayer,root->lchild->layer);DFS(root->lchild);}if(root->rchild){root->rchild->…

CSS控制字体在一行内显示不换行

当一行文字超过DIV或者Table的宽度的时候&#xff0c;浏览器中默认是让它换行显示的&#xff0c;如果不想让他换行要怎么办呢&#xff1f;用CSS让文字在一行内显示不换行的方法&#xff1a; 一般的文字截断(适用于内联与块)&#xff1a; 1 .text-overflow { 2 display:bloc…

Linux下des对称性加密

最近对接公安审计一些经历 对方的需求&#xff1a; 打成zip包对zip包进行des-cbc对称性加密&#xff0c;使用约定好的 -K和-iv值比如 -K "abcd$#!" -iv "efgh$#!"加密后做base64编码起初是想尝试用 php 去做&#xff0c;经过一阵折腾之后发现&#xff0c;p…

1062 最简分数

注意点&#xff1a; 1. 对两个分数之间的理解&#xff0c;这应该是一个开区间而不是闭区间 2. 读入的时候用 scanf("%d/%d %d/%d %d",&N1,&M1,&N2,&M2,&K) 不可以&#xff0c;分号前后会被视为一个整体。 AC代码 #include<cstdio> #i…

linux系统开机静态分配ip地址

在/etc/sysconfig/network-scripts/ifcfg-eth0文件中 添加&#xff1a; IPADDR192.168.1.100&#xff08;设置静态地址&#xff09; NETMASK255.255.255.0&#xff08;设置子网掩码&#xff09; GATEWAY192.168.1.1&#xff08;设置网关地址&#xff09; 修改&#xff1a; BOOT…