微信公衆平臺開發(十一) 功能整合

1、簡介php

在前面的幾篇微信功能開發文檔中,各個微信的功能都是獨立的,單一微信只能提供一種功能,這樣不符合大衆開發者和客戶的需求。因此在這一篇文章中,咱們將對前面開發出來的微信功能進行簡單整合,以供讀者參考。html

2、思路分析mysql

一種簡單的作法是,截取關鍵字,而後進行判斷,執行相應功能代碼。這種作法比較適合功能很少,簡單的微信;另外一種作法是,給各功能編號,而後記錄用戶選擇的功能狀態,用戶每次查詢的時候,首先判斷他的狀態,而後執行相應功能代碼。這種作法適合功能整合比較多,複雜的微信;開發者能夠根據本身的須要來進行選擇。在這篇文章中,咱們將會講解天氣和翻譯功能的整合,更多功能的整合相似,你們能夠參考着作一下。sql

3、關鍵字截取作法數據庫

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 功能整合fetch

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(),而後引入這些文件,在這裏直接調用便可,很是方便。ui

這樣,咱們就完成了天氣和翻譯功能的整合。

3.3 測試

測試成功。

4、狀態記錄作法

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 測試

 

5、完整代碼獲取

請訪問 樂思樂享 官方論壇

URLhttp://pan.baidu.com/s/1c0s3Jby

6、關注

請關注 卓錦蘇州 微信公衆賬號,卓錦蘇州 基於BAE 平臺開發,針對於主流的微信功能進行開發測試。

您能夠關注 卓錦蘇州 公衆賬號進行功能測試,以及獲取新的應用開發。

1. 登陸微信客戶端,通信錄 -> 添加朋友 -> 查找公衆號 -> zhuojinsz,查找並關注。

2. 掃描二維碼:

卓錦蘇州 功能列表:

 


David Camp

咱們永遠相信,分享是一種美德 | We Believe, Great People Share Knowledge...

相關文章
相關標籤/搜索