微信公衆番号インタフェース開発--snoweekテスト

6653 ワード

注意:
  • 前期の準備作業は、私が参照した微信公衆プラットフォーム開発入門チュートリアルで、私自身が説明したのはまだ詳細だと思います.
  • 使用する天気インタフェースについて、集約データで探しました.
  • 完全なコード、私のgithubに行くことができます、weixin_kaifaでdownload.

  • snoweekテストはphpに基づいて開発された微信公衆番号であり、最初の目標はキャンパス公衆番号を作成することであり、以下の機能を完成することができる.
  • 学生成績照会:成績を返信すると、成績結果を含むリンク
  • が返されます.
  • 都市の天気を検索します:天気に返事して都市をプラスして、現在の天気の実況を返して、関連する天気指数、未来の数日の天気予報
  • 現在時刻を問い合わせる:返信時間、現在時刻を返す
  • は1枚の画像を送信し、認識した後にメッセージ「あなたは1枚の画像を送信しました」
  • を返します.
  • 回复天气,回归"请按提示入力【天气查询】请入力天气加城市;如:天气北京"
  • この公衆番号がまだ実現していない機能に返信すると、「申し訳ありませんが、この機能はまだ提供されていません.
  • プロジェクト構造

  • index.php:微信インタフェースファイル
  • weather.php:天気予報インタフェースファイル
  • grade_functions.php:学生が成績を照会する際に使用する関連関数
  • データベース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には3つの列が含まれています.user_idは、ユーザが学号をバインドする順序を記録し、同時にプライマリ・キーとして使用する.open_idユーザーがこの公衆番号の下で唯一の標識を記録する.student_idは学生の学号を記録する.
  • 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_リストには4つの列が含まれていますgrade_id成績を記録するための項目数;courseはカリキュラム名を記録するために使用されます.grade記録成績;student_idは学生の学号を記録する.2つのテーブルの間にstudent_idで接続します.

    機能の詳細


    学生の成績を調べる

  • ユーザーがまだ学号をバインドしていない場合は、「すみません、まだ学号をバインドしていません.成績を入力してマスターしてください.例えば、成績199440086」というヒントを返します.check_user()関数
  • 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;   
        }
    

    この関数は送信者アカウント$open_を介してidはuserテーブルでクエリーを行います.
  • ユーザーが学号をバインドしている場合、grade_リスト表に学生情報がない場合は、「成績記録がありません」というヒントを返します.
  • ユーザーが学号をバインドし、grade_Listテーブルに成績情報がある場合は、リンクを返し、学生はそのリンクをクリックして自分の成績を検索します.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;           
        }
    
  • ユーザが学号をバインドする行為を行うと、すなわち成績プラス学号
  • を入力する.
    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;    
    }
    
  • ユーザーは学号を解縛することができ、すなわち「解縛すればよい」
  • と入力することができる.
    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;    
        }
    

    都市の天気を検索します:天気を回復して都市をプラスして、現在の天気の実況に帰って、関連する天気の指数、未来の数日の天気の予報


    集約関数で直接探した天気インタフェースphpには天気を調べる関数がたくさん含まれています.天気インタフェースを呼び出すコードは次のとおりです.
    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 = "== ==
    :".$data['sk']['temp']."
    "." :".$data['sk']['wind_direction']."(".$data['sk']['wind_strength'].")"."
    :".$data['sk']['humidity']; $contentStr.="

    == =======
    "." :".$data['today']['dressing_index']." , ".$data['today']['dressing_advice']; $contentStr.="

    == ==
    "; foreach($data['future'] as $wkey =>$f){ $contentStr.=" :".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temperature']."
    "; } $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; }

    現在時刻の問合せ

    $msgType = "text";
    $contentStr = date("Y-m-d H:i:s",time());
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
    echo $resultStr;
    

    画像を送信

    if($msgtype=="image"){
      $msgType = "text";
      $contentStr = " ";
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
      echo $resultStr;
    }
    

    まだ実装されていない公衆番号に返信する機能

    $msgType = "text";
    $contentStr = "【".$keyword."】 , 。";
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
    echo $resultStr;