***************************************/
error_reporting(E_ALL ^ E_NOTICE);
require_once( 'http.inc.php' );
require_once( 'class. Chinese.php');
//成功2xx
定義( 'QQ_RETURN_SUCCESS', 200 );
定義( 'QQ_LOGIN_SUCCESS', 201 );
定義( 'QQ_LIST_NONE', 202 );
定義( 'QQ_ADDTOLIST_SUCCESS', 203 );
定義( 'QQ_REPLYADD_SUCCESS', 204 );
定義( 'QQ_GETMSG_NONE', 205 );
//警告3xx
定義( 'QQ_ADDTOLIST_NEEDAUTH',300 );
定義( 'QQ_ADDTOLIST_REFUSE', 301 );
定義( 'QQ_ADDTOLIST_UNKNOWN', 302 );
//失败4xx
定義( 'QQ_RETURN_FAILED', 400 );
定義( 'QQ_LIST_ERROR', 401 );
定義( 'QQ_GETMSG_ERROR', 402 );
//在中状態
定義( 'QQ_STATUS_ONLINE', 10);
定義( 'QQ_STATUS_OFFLINE', 20);
定義( 'QQ_STATUS_BUSY', 30);
//血型
$QQ_DATA_BT = 配列
(
=> ”、
=> 「A型」
=> 「B型」、
=> 「O型」
=> 「AB型」
=> 「その他」
);
//星座
$QQ_DATA_CO = 配列
(
=> ”、
=> 「水瓶座」
=> 「双鱼座」、
=> 「牡羊座」、
=> 「金牛座」
=> 「双子座」
=> 「巨蟹座」
=> 「狮子座」
=> 「处女座」
=> 「天秤座」
=> 「天蝎座」
=> 「射手座」、
=> 『摩羯座』
);
//生ショウ
$QQ_DATA_SH = 配列
(
=> ”、
=> 「ネズミ」、
=> 「牛」
=> 「虎」
=> 「兔」、
=> 「龙」、
=> 「蛇」
=> 「马」、
=> 「羊」
=> 「猴」、
=> 「鸡」、
=> 「犬」、
=> 「猪」
);
//性别
$QQ_DATA_SX = 配列
(
=> 「男」、
=> 「女」
);
クラスQQクライアント
{
var $uin;
var $pwd;
var $server = 'kconn.tencent.com';
//备用:219.133.51.11
var $port = 21001;
//备用:8000
var $httpclient;
var $chs = NULL;
関数 QQClient($uin,$pwd)
{
$this->uin = $uin;
$this->pwd = $pwd;
}
関数エンコード($str)
/*
说説明:ハンドルKEY1=VAL1&KEY2=VAL2格式变は数組
*/
{
$arr =explode('&' , $str);
$return = array();
foreach($arr as $k=>$v)
{
list($key,$val) =explode('=',$v);
$return[$key] = $val;
$this->chs = NULL;
}
$return;
を返す
}
関数 utf8_to_gb2312($str)
{
$this->chs = 新しい中国語("UTF8","GB2312", $str );
return $this->chs->ConvertIT();
}
関数 gb2312_to_utf8($str)
{
$this->chs = 新しい中国語("GB2312","UTF8", $str );
return $this->chs->ConvertIT();
}
関数クエリ($str)
{
$this->httpclient = 新しい http( HTTP_V11, true );
$this->httpclient->host = 'kconn.tencent.com';
$this->httpcilent->ポート = 21001;
$query = $this->encode($str);
$status = $this->httpclient->post( '', $query, '' );
if ( $status == HTTP_STATUS_OK ) {
return $this->httpclient->get_response_body();
}
それ以外
{
print_r($this->httpclient);
false を返します;
}
$this->httpclient->disconnect();
unset($this->httpclient);
}
関数 split_str($str)
{
$arr =explode("," , $str);
if($arr[count($arr)-1] == NULL)
{
unset($arr[count($arr)-1]);
}
$arr を返します;
}
関数login()
{
//登陆
//VER=1.1&CMD=ログイン&SEQ=&UIN=&PS=&M5=1&LC=9326B87B234E7235
$str = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&PS=".md5($this->pwd)."&M5= 1&LC=9326B87B234E7235";
$return = $this->encode($this->query($str));
if($return['RES']==0 および $return['UIN'] == $this->uin)
{
//成功
を返す
if($return['RS']==0)
{
//登陆成功
QQ_LOGIN_SUCCESS を返します;
}
それ以外
{
//登陆失败
$GLOBALS['QQ_ERROR_MSG'] = $this->utf8_to_gb2312($return['RA']);
QQ_LOGIN_FAILED を返す;
}
}
それ以外
{
//失敗した
を返します
QQ_RETURN_FAILED を返す;
}
}
関数getFriendsList()
{
//友達リストを取得
//VER=1.1&CMD=リスト&SEQ=&UIN=&TN=160&UN=0
$str = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=160&UN=0";
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//正常に戻りました
return $this->split_str($return['UN']);
}
その他
{
//リターン失敗
return QQ_RETURN_FAILED;
}
}
関数getOnlineList()
{
//オンライン友達のリストを取得します
//VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN=50&UN=0
$str = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=50&UN=0";
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//正常に戻りました
If($return['SN'] > 0)
{
//オンライン友達の数>0
$uns = $this->split_str($return['UN']);
$nks = $this->split_str($return['NK']); // ニックネームリスト
$sts = $this->split_str($return['ST']); //ステータスリスト
$fcs = $this->split_str($return['FC']); //アバターリスト
$error = 0;
((count($uns)==count($nks))==(count($sts)==count($fcs)))==(count($nks)==count($sts)) ?
$num = count($uns)
:
$error = 1;
;
If($error == 1) は QQ_LIST_ERROR を返します;
$arr = array();
for($i=0;$i
{
$arr[] = array(
"UN" => $uns[$i] ,
"NK" => $this->utf8_to_gb2312($nks[$i]) 、
"ST" => $sts[$i] ,
"FC" => $fcs[$i]
);
}
return ($arr);
}
その他
{
//オンライン友達の数
QQ_LIST_NONE を返します;
}
}
その他
{
//リターン失敗
return QQ_RETURN_FAILED;
}
}
関数getInfo($uin)
{
//友達情報を取得します
//ADは連絡先アドレス、AGは年齢、EMはMAIL、FCはアバター、HPはウェブサイト、JBは職業、PCは郵便番号、PHは連絡先番号、PRはプロフィール、 PVは州、RNは本名、SCは出身校、SXは性別、UNはQQ番号、NKはQQのニックネームです
//Hackfan による以下のアノテーションの研究
//BTは血液型、COは星座、CTは都市、CYは国、MOは携帯電話、SHは星座
//LV はクエリする番号です (1 は簡易クエリ、2 は通常のクエリ、3 は詳細クエリ)
//CV不明、ID不明(IDカード?)、MT不明、MV不明、
//VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=3&UN=
$str = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&LV=3&UN=".$uin;
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//正常に戻りました
$arr = 配列
(
'Ad' = & gt; $this-> UTF8_TO_GB2312 ($ Return ['Ad']), // 連絡先アドレス
;
'Ag' = & gt; $ this- & gt; ($ Return ['ag']), // 年齢
'Bt' = & gt; $ Return ['bt'], // 血液型
'CO' =>
'Ct' = & gt; $ this- & gt; ($ Return ['ct']), // 都市
;
'Cy' = & gt; $ this- & gt; ($ Return ['cy']), //
'Em' = & gt; $ this-& gt; ($ Return ['em']), // メール
;
'Fc' = & gt; $ Return ['fc'], // アバター
;
'Hp' = & gt; $ this- & gt; ($ Return ['hp']), // ウェブサイト
;
'Jb' = & gt; $ this-& gt; ($ Return ['jb']), // 職業
;
'Mo' = & gt; $ Return ['mo'], // 携帯電話
「PC」 =>
'PH' = & gt; $ this- & gt; ($ Return ['ph']), //
'PR' = & gt; $ this- & gt; ($ Return ['PR']), // はじめに
「PV」 =>
'Rn' = & gt; $ this-& gt; ($ Return ['rn']), // 本名
;
'SC' = & GT; $this-> UTF8_TO_GB2312 ($ Return ['SC']), // 大学
;
'Sh' = & gt; $ return ['sh'], // 星座
;
'SX' =>
「国連」 =>
'Nk' = & gt; $ this- & gt; ($ Return ['nk']) // ニックネーム
;
);
return $arr;
}
その他
{
//リターン失敗
return QQ_RETURN_FAILED;
}
}
関数addFriend($uin)
{
//新しい友達を追加します
//VER=1.1&CMD=AddToList&SEQ=&UIN=&UN=
$str = "VER=1.1&CMD=AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin;
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//正常に戻りました
switch($return['CD'])
{
ケース0:
//相手は誰でも友達追加を許可しています
QQ_ADDTOLIST_SUCCESS を返します;
休憩;
ケース 1:
アウトアウト - から
QQ_ADDTOLIST_NEEDAUTH を返します;
休憩;
ケース 3:
//誰も友達として追加することはできません
return QQ_ADDTOLIST_REFUSE;
休憩;
//不明なコード
QQ_ADDTOLIST_UNKNOWN を返します;
休憩;
}
}
その他
{
//リターン失敗
return QQ_RETURN_FAILED;
}
}
関数 ReplyAdd($uin,$type,$msg)
{
// 友達追加に応答します
//VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&UN=&CD=&RS=
//CD は応答ステータスで、CD 0 は「検証に合格」を意味します。 CDが1の場合は「相手の友達追加を拒否する」という意味になります。 CDが2というのは「相手に友達追加をリクエストする」という意味です。 RSがあなたのリクエストの理由です
$str = "VER=1.2&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&CD=".$type."&RS =".$this->gb2312_to_utf8($msg);
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
return QQ_RETURN_SUCCESS;
}
その他
{
//失敗しました
return QQ_RETURN_FAILED;
}
}
{
//友達を削除
//VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN=
$str = "VER=1.1&CMD=DelFromList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=$uin";
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
return QQ_RETURN_SUCCESS;
}
その他
{
//失敗しました
return QQ_RETURN_FAILED;
}
}
{
//ステータスを変更します
//VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST=
//STは変更するステータス、10はオンライン、20はオフライン、30はビジーです。
$str = "VER=1.1&CMD=Change_stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&ST=".$status;
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
return QQ_RETURN_SUCCESS;
}
その他
{
//失敗
return QQ_RETURN_FAILED;
}
}
関数logout()
{
//ログアウト
//VER=1.1&CMD=ログアウト&SEQ=&UIN=
$str = "VER=1.1&CMD=Logout&SEQ=".rand(1000,9000)."&UIN=".$this->uin;
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
return QQ_RETURN_SUCCESS;
}
その他
{
//失敗
return QQ_RETURN_FAILED;
}
}
関数getMsg()
{
//ニュースを入手
//VER=1.1&CMD=GetMsgEx&SEQ=&UIN=
//MT はメッセージ タイプを表し、99 はシステム メッセージを表し、9 はユーザー メッセージを表します。 UN はメッセージの送信元のユーザーを表し、MG は送信されたメッセージを表し、MG メッセージは特定のシステムの意味を表すことができます
//MT=99 の場合: MG=10 はユーザーがオンラインであることを意味し、MG=20 はユーザーがオフラインであることを意味し、MG=30 はユーザーがビジーであることを意味します
$str = "VER=1.1&CMD=GetMsgEx&SEQ=".rand(1000,9000)."&UIN=".$this->uin;
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
If($return['MN'] > 0)
{
//メッセージ数>0
$mts = $this->split_str($return['MT']);
$uns = $this->split_str($return['UN']); //送信者番号
$mgs = $this->split_str($return['MG']); //メッセージ内容
$error = 0;
(カウント($mts)==カウント($uns))==(カウント($uns)==カウント($mgs))?
$num = count($uns)
$error = 1;
;
If($error == 1) return QQ_GETMSG_ERROR //何か問題が発生しました
;
$arr = array();
for($i=0;$i
{
$arr[] = array(
"MT" => $mts[$i] 、
"UN" => $uns[$i] ,
"MG" => $this->utf8_to_gb2312($mgs[$i])
);
}
return ($arr);
}
その他
{
//オンライン友達の数
QQ_GETMSG_NONE を返します;
}
}
その他
{
//失敗
return QQ_RETURN_FAILED;
}
}
関数 sendMsg($uin,$msg)
{
//メッセージを送信
//VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&MG=
$str = "VER=1.1&CMD=CLTMSG&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&MG=".$this-> gb2312_to_utf8($msg);
$return = $this->encode($this->query($str));
If($return['RES']==0 かつ $return['UIN'] == $this->uin)
{
//サーバーは情報を正常に取得しました
return QQ_RETURN_SUCCESS;
}
その他
{
//失敗
return QQ_RETURN_FAILED;
}
}
}
?>