php微信调用天气api,微信公众号接口开发--snoweek测试
注意:
前期的準(zhǔn)備工作,我是參照的微信公眾平臺開發(fā)入門教程,我自己認(rèn)為講解的還是很詳細(xì)的。
對于將要使用的天氣接口,我是在聚合數(shù)據(jù)里找的。
完整的代碼,可以前往我的github中,weixin_kaifa中download。
snoweek測試是一個基于php開發(fā)的微信公眾號,最初的目標(biāo)是做成一個校園公眾號,可以完成以下功能 :
查詢學(xué)生成績:回復(fù)成績,會返回一個包含成績結(jié)果的鏈接
查詢城市天氣:回復(fù)天氣加城市,會返回當(dāng)前天氣實況,相關(guān)天氣指數(shù),未來幾天天氣預(yù)報
查詢當(dāng)前時間:回復(fù)時間,則返回當(dāng)前時間
發(fā)送一張圖片,識別后返回信息"你發(fā)送了一張圖片"
回復(fù)天氣,返回"請按提示輸入【天氣查詢】請輸入天氣加城市;如:天氣北京"
回復(fù)此公眾號還未實現(xiàn)的功能,則會返回"抱歉,還未提供此功能。
項目結(jié)構(gòu)
index.php:微信接口文件
weather.php:天氣預(yù)報接口文件
grade_functions.php:學(xué)生查詢成績時,需要用到的相關(guān)函數(shù)
數(shù)據(jù)庫user表信息
user
CREATE TABLE `user` (
`user_id` mediumint(9) NOT NULL AUTO_INCREMENT,
`open_id` varchar(30) NOT NULL,
`student_id` varchar(12) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
表user包含三列,user_id記錄用戶綁定學(xué)號的順序,同時用作主鍵;open_id記錄用戶在此公眾號下唯一標(biāo)識;student_id記錄學(xué)生的學(xué)號。
grade_list
CREATE TABLE `grade_list` (
`grade_id` mediumint(9) NOT NULL,
`course` text NOT NULL,
`grade` int(11) NOT NULL,
`student_id` varchar(12) NOT NULL,
PRIMARY KEY (`grade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表grade_list包含四列,grade_id用于記錄成績的條數(shù);course用于記錄課程名稱;
grade記錄成績;student_id記錄學(xué)生的學(xué)號。兩個表之間以student_id來連接。
功能詳細(xì)介紹
查詢學(xué)生成績
若用戶還未綁定學(xué)號,則返回提示信息:"對不起,你還沒有綁定學(xué)號,請輸入成績加學(xué)好;如:成績199434040086"。
check_user()函數(shù)
function check_user($submit_open_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="select student_id from user where open_id='$submit_open_id'";
$r=mysql_query($q);
if(mysql_num_rows($r)==1){
while($user=mysql_fetch_array($r)){
$result=$user['student_id'];
}
}else{
$result=0;
}
return $result;
}
此函數(shù)通過發(fā)送者帳號$open_id在user表中進行查詢。
若用戶已綁定學(xué)號,但grade_list表中沒有其學(xué)生信息,則返回提示信息:"你沒有成績記錄"。
若用戶已綁定學(xué)號,且grade_list表中有其成績信息,則返回一個鏈接,學(xué)生通過點擊該鏈接查詢自己的成績。
search_grade()
function search_grade($submit_student_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="select course,grade from grade_list where student_id='$submit_student_id'";
$r=mysql_query($q);
$grade_list=array();
if(mysql_num_rows($r)!=0){
while($g=mysql_fetch_array($r)){
$grade=array();
$grade['course']=$g['course'];
$grade['grade']=$g['grade'];
$grade_list[]=$grade;
}
$result=$grade_list;
}else{
$result=0;
}
return $result;
}
若用戶進行綁定學(xué)號行為,即輸入成績加學(xué)號
function insert_user($submit_open_id,$submit_student_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="insert into user(open_id,student_id)values('$submit_open_id','$submit_student_id')";
$r=mysql_query($q);
$rows=mysql_affected_rows();
return $rows;
}
用戶可以對學(xué)號進行解綁,即輸入“解綁即可”
function delete_user($submit_open_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="delete from user where open_id='$submit_open_id'";
$r=mysql_query($q);
$rows=mysql_affected_rows();
return $rows;
}
查詢城市天氣:回復(fù)天氣加城市,會返回當(dāng)前天氣實況,相關(guān)天氣指數(shù),未來幾天天氣預(yù)報
直接在聚合函數(shù)里找的天氣接口,weather.php里包含多種查詢天氣的函數(shù)。
調(diào)用天氣接口的代碼如下:
include 'weather.php'; //引入天氣請求類
$appkey = 'f67769dc51bfad1c06bb09312b873176'; //您申請的天氣查詢appkey
$weather = new weather($appkey);
$cityname=mb_substr($keyword,2,5,'utf-8');
$cityWeatherResult = $weather->getWeather($cityname);
if($cityWeatherResult['error_code'] == 0){
$data = $cityWeatherResult['result'];
$msgType = "text";
$contentStr = "==當(dāng)前天氣實況==\n溫度:".$data['sk']['temp']."\n"."風(fēng)向:".$data['sk']['wind_direction']."(".$data['sk']['wind_strength'].")"."\n濕度:".$data['sk']['humidity'];
$contentStr.="\n\n==相關(guān)天氣指數(shù)=======\n"."穿衣指數(shù):".$data['today']['dressing_index']." , ".$data['today']['dressing_advice'];
$contentStr.="\n\n==未來幾天天氣預(yù)報==\n";
foreach($data['future'] as $wkey =>$f){
$contentStr.="日期:".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temperature']."\n";
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
$msgType = "text";
$contentStr = "【".$cityname."】".$cityWeatherResult['reason'].",請確保城市信息輸入有效";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
查詢當(dāng)前時間
$msgType = "text";
$contentStr = date("Y-m-d H:i:s",time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
發(fā)送一張圖片
if($msgtype=="image"){
$msgType = "text";
$contentStr = "你發(fā)送了一張圖片";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
回復(fù)此公眾號還未實現(xiàn)的功能
$msgType = "text";
$contentStr = "【".$keyword."】抱歉,還未提供此功能。";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
總結(jié)
以上是生活随笔為你收集整理的php微信调用天气api,微信公众号接口开发--snoweek测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 7-3 IP地址转换分数 20
- 下一篇: 安装Ubuntu后的配置
