QQ独自のパッケージの把握だけでなく、優れたパッケージのコードを持っているいくつかのインターネットの統合
次のように:
QQ:
<?PHPの クラス延びCurl_Api QQ { //ログインコードの パブリックQRコード関数() { $ URL =「HTTPS://ssl.ptlogin2.qq.com/ptqrshowのAppID = 549 000 912 E&M = L = 2&&&D = S = 72 4&V = T =&0.5409099'.time 4() '=&DAID 5' ;.。 $ ARR =の$ this - > get_curl_split($ URL); するpreg_match( '/ qrsig =(*)。?/'、$ ARR [ 'ヘッダ'] 、$マッチ); IF([1] $ qrsig = $マッチ) リターンアレイ( 'コード' => 200である、 'qrsig' => $ qrsig、 'データ' => BASE64_ENCODE($ ARR [ 'ボディ'])) ; そうでなければ 、リターン・アレイ(「コード」=> 400、「MSG」=>「2次元コード取得失敗」)。 } パブリック関数ListenQR($ qrsig) { $ qrsig = $ qrsig [0]。 IF(空($ qrsig))リターン・アレイ( 'コード' => - 1、 'MSG' => 'qrsig不能为空')。 $ URL = 'HTTPS:?//ssl.ptlogin2.qq.com/ptqrlogin U1 = HTTPS%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptqrtoken ='の$ this - >。 ;時間() '0000&js_ver = 10194&js_type = 1&pt_uistyle = 40&援助= 549000912&DAID = 5&' - ($ qrsig)getqrtoken '&login_sig =&ptredirect = 0&H = 1&T = 1&G = 1&from_ui = 1&ptlang = 2052&アクション= 0-0'。。。 $ RET =の$ this - > get_curl($ urlには、0、$ urlには、 'qrsig =' $ qrsig。。 ';'、1); もし(するpreg_match( "/ ptuiCB \( '(。*?)' \)/"、$ RET、$ ARR)){ $ R = " ''"、str_replace( " ''"、 "」(爆発'」、$のARR [1])); IF($ R [0] == 0){ するpreg_match( '/信号Uin =(\ D +)及び/'、$右、$ UIN)。 [1]における= Uで$ $ U。 するpreg_match( '/ SKEY = @({9}); /'、右$、$ SKEY)。 するpreg_match( '/スーパーキー=(*);?/'、$ RET、$スーパーキー)。 $データ=の$ this - > get_curl($ R [2]、0,0,0,1)。 もし($データ){ するpreg_match( "/ p_skey =(*);?/"、$データ、$ matchs)。 $ pskey = $ matchs [1]。 } IF($ pskey){ IF(ISSET($ _ GET [ 'findpwd'])){ $ _SESSION [ 'findpwd_qq'] = $ UIN。 } 戻り配列( 'コード' => 200、 'UIN' => $ UIN、 'SKEY' =>'@'.$ SKEY [1]、 'pskey' => $ pskey、 'スーパーキー' => $スーパーキー[ 1]、 'ニック' => $ R [5])。 }他{ リターンアレイ( 'コード' => 201、 'MSG' =>」ログインに成功すると、関連情報へのアクセスに失敗しました! 「$ R&LT [2]); } } ELSEIF(R&LT $ [0] == 65){ 戻りアレイ( 'コード' => 400 => 'MSG '二次元コードが期限切れになった。'); } ELSEIF(R&LT $ [0] == 66){ リターン・アレイ( 'コード' => 202、 'MSG' => '二维码未失效。'); } ELSEIF($ R [0] == 67){ リターンアレイ( 'コード' => 302、 'MSG' => '正在验证二维码。'); }他{ リターンアレイ( 'コード' => 401、 'MSG' => $ R [4])。 } }他{ リターンアレイ( 'コード' => 403、 'MSG' => $ RET)。 } } getqrtokenプライベート関数($ qrsig){ $ LEN = STRLEN($ qrsig)。 $ハッシュ= 0; 用(; iは<$がlen $、$ i = 0 $ I ++){ $ハッシュ+ =(($ハッシュ<< 5)&2147483647)+ ORD($ qrsig [$ i])と&2147483647。 $ハッシュ&= 2147483647; } $ハッシュ&2147483647を返します。 } }
マイクロ手紙:
<?PHPの Curl_Api拡張微信クラス { //获取验证码 パブリック関数QRコード() { $ URL = "https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zh_CNを"。 $ UUID =の$ this - > get_curl($のURL); //のvar_dump($ UUID)。 $ UUID = SUBSTR($ UUID、strpos($ UUID、 '"')+ 1、-2); $ URL =" https://login.wx.qq.com/qrcode/{$uuid}?t=webwx 「; $ QRコード=のfile_get_contents($ URL); $結果= [ 'コード' => 200、 'UUID' => $ UUID、 'QRコード' => BASE64_ENCODE($ QRコード)]; リターン$結果。 $パラス[ 'RTIME'] = 1000; $パラス[ '指す'] = 'https://wx2.qq.com/'; $ API = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid='。$ UUID [0]。'&先端= 0'。 $体=の$ this - >カール($ API、$パラス)。 するpreg_match( '/(\ D){3} /'、$体、$コード)。 するpreg_match( '/ REDIRECT_URI = "(*)。?" /'、$体、$ URL); IF($コード[0] == '200'){ $体=の$ this - >カール($ URL [1])。 するpreg_match( '/ <wxuin>(\ D *)<\ / wxuin> /?'、$体、$ wxuin)。 $ RET [ 'コード'] = 200。 $ RET [ 'データ'] [ 'UIN'] = $ wxuin [1]。 $ retの[ 'データ' RET $ [ 'コード'] = 408; $ RET [ 'MSG'] = '電話用マイクロチャンネルスキャンコードログ'; } $ RETを返します; } }
ジャンプを容易にするために、ここで私のクラスは、カプセル化
マテリアライズド即時のクラス名の文字列を動的に入ってくるQQマイクロ手紙
テンセントのカテゴリは:
<?PHP クラステンセント{ = '/'保護$ __ DIR__パス;. プライベート$ Clであり; / * * QQまたは動的WX着信文字列を自動的に対応するログインAPIクラスに変換される * / パブリック関数__construct($型) { / /オートロード機能レジスタ spl_autoload_register([$この、 'Psr4Autoload']); //導入カール の$ this - > Clで=新しい新しいタイプ$(); } パブリック関数Psr4Autoload($クラス) { $ class_file =の$ this - >パス... '/' $クラスのの.php '; IF(file_exists($ class_file)) { 含める"$ class_file"; }他{ ダイス($ class_file '不在' .. 'クラスファイル'); } } パブリック関数QRコード() { リターンcall_user_func([の$ this - > CL、__ FUNCTION__]); } パブリック関数ListenQR(... $引数) { 戻りcall_user_func([の$ this - > CL、__ FUNCTION __]、$引数)。 } パブリック関数__call($名、$引数) { call_user_func_array([の$ this - > CL、$名]、(アレイ)$引数)。 } }
そして、最後に、カールカテゴリ:
<?phpの クラスCurl_Api { 公共$ UA = "Mozillaの/ 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36(ヤモリのようにKHTML、)クローム/ 69.0.3497.100サファリ/ 537.36"。 パブリック関数get_curl($ URL、$ポスト= 0、$リファラ= 0、$クッキー= 0、$ヘッダ= 0、$ UA = 0、$ nobaody = 0){ $ CH = curl_init(); ますcurl_setopt($ chの、CURLOPT_URL、$ URL); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYPEER、偽); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYHOST、偽); $ httpheader [] = "受け入れ:アプリケーション/ JSONを"; $ httpheader [] = "-受け入れエンコード:gzipで、デフレート、SDCH"。 $ httpheader [] = "受け入れ言語:ZH-CN、ZH; qは= 0.8"; $ httpheader [] = "接続:キープアライブ"。 ますcurl_setopt($ chの、CURLOPT_HTTPHEADER、$ httpheader)。 IF($ポスト){ ますcurl_setopt($ CH、CURLOPT_POST、1)。 ますcurl_setopt($ chの、CURLOPT_POSTFIELDS、$ポスト)。 } ($ヘッダ){もし ますcurl_setopt($ CH、CURLOPT_HEADER、TRUE)。 } ($クッキー){もし ますcurl_setopt($ CH、CURLOPT_COOKIE、$クッキー)。 } ($リファラ){もし ますcurl_setopt($ CH、CURLOPT_REFERER、$リファラ); } IF($ UA){ ますcurl_setopt($ CH、CURLOPT_USERAGENT、$ UA)。 }他{ ますcurl_setopt($ CH、CURLOPT_USERAGENT、の$ this - > UA)。 } IF($ nobaody){ ますcurl_setopt($ CH、CURLOPT_NOBODY、1)。 } ますcurl_setopt($ CH、CURLOPT_TIMEOUT、10)。 ますcurl_setopt($ chの、CURLOPT_ENCODING、 "GZIP"); ますcurl_setopt($ chの、CURLOPT_RETURNTRANSFER、1); $ RET = curl_exec($ chの); curl_close($ chの); $ RETを返します。 } 関数カール($ URL、$パラス=配列()){ $ CH = curl_init(); ますcurl_setopt($ chの、CURLOPT_URL、$ URL); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYPEER、偽); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYHOST、偽); $ httpheader [] = "受け入れ:* / *"; $ httpheader [] = "-受け入れエンコード:gzipで、デフレート、SDCH"。 $ httpheader [] = "受け入れ言語:ZH-CN、ZH; qは= 0.8"; $ httpheader [] = "接続:閉じます"; ますcurl_setopt($ chの、CURLOPT_HTTPHEADER、$ httpheader)。 ($パラス[ 'ctimeの']){//连接超时場合 ますcurl_setopt($ CH、CURLOPT_CONNECTTIMEOUT_MS、$パラス[ 'ctimeの'])。 } IF($パラス[ 'RTIME']){//读取超时 ますcurl_setopt($ CH、CURLOPT_TIMEOUT_MS、$パラス[ 'RTIME'])。 } ($パラス[ '後']){もし ますcurl_setopt($ CH、CURLOPT_POST、1)。 ますcurl_setopt($ chの、CURLOPT_POSTFIELDS、$パラス[ 'ポスト']); ($ chの、CURLOPT_HEADER、真)しますcurl_setopt。 } IF($パラス[ 'クッキー']){ ますcurl_setopt($ CH、CURLOPT_COOKIE、$パラス[ 'クッキー'])。 } ($パラス[ '参照']){もし あれば($パラス[ '参照'] == 1){ ますcurl_setopt($ CH、CURLOPT_REFERER、 'http://m.qzone.com/infocenter?g_f=') ; }他{ ますcurl_setopt($ CH、CURLOPT_REFERER、$パラス[ '参照'])。 } } もし($パラス[ 'UA']){ ますcurl_setopt($ CH、CURLOPT_USERAGENT、$パラス[ 'UA'])。 } そうしないと { ますcurl_setopt($ chの、CURLOPT_USERAGENT、 "Mozillaの/ 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 65.0.3325.181サファリ/ 537.36"); } ($パラス[ '誰']){もし ますcurl_setopt($ CH、CURLOPT_NOBODY、1)。 } しますcurl_setopt($ chの、CURLOPT_ENCODING、 "GZIP"); ますcurl_setopt($ chの、CURLOPT_RETURNTRANSFER、1); $ RET = curl_exec($ chの); curl_close($ chの); $ RETを返します。 } パブリック関数get_curl_split($ URL){ $ CH = curl_init(); ますcurl_setopt($ chの、CURLOPT_URL、$ URL); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYPEER、偽); ますcurl_setopt($ chの、CURLOPT_SSL_VERIFYHOST、偽); $ httpheader [] = "受け入れ:* / *"; $ httpheader [] = "-受け入れエンコード:gzipで、デフレート、SDCH"。 $ httpheader [] = "受け入れ言語:ZH-CN、ZH; qは= 0.8"; $ httpheader [] = "接続:キープアライブ"。 ますcurl_setopt($ chの、CURLOPT_HTTPHEADER、$ httpheader)。 ますcurl_setopt($ chの、CURLOPT_HEADER、TRUE); ますcurl_setopt($ chの、CURLOPT_USERAGENT、ます$ this-> UA); ますcurl_setopt($ chの、CURLOPT_TIMEOUT、10); ますcurl_setopt($ chの、CURLOPT_ENCODING、 "GZIP"); ますcurl_setopt($ chの、CURLOPT_RETURNTRANSFER、1); $ RET = curl_exec($ chの); $ headerSize = curl_getinfo($ chを、 $ヘッダ= SUBSTR($ RET、0、$ headerSize)。 $体= SUBSTR($ RET、$ headerSize)。 $ RET =配列(); $ RET [ 'ヘッダ'] = $ヘッダ。 $ RET [ '体']は$体を=。 curl_close($ chの); $ RETを返します。 } }
プロセスは、実質的に呼び出し
4クラス内に格納されたファイルに、1
2、ドキュメントの導入
3、別々の書き込み二つのインターフェース、コード生成QR(Base64で)、二次元コードスキャンコードのポーリング状態
、ユーザ正常スキャンコードの後に4、戻りユニークマイクロチャネルQQ、前記ID上記火災
5、私はちょうどマイクロチャンネルスキャンコード着陸の例を実証するには、
二次元コードや二次元コードポーリング検出状態login.phpを生成します。
<?PHP //私はちょうどここにドキュメントを紹介し、クラス微信QQが導入されていないので理由は、単に必要Curl_Apiの要求が入ってきたクラスの導入は、のようなものですが、私はテンセントクラス内で紹介されています。だからここに私だけのような文書を導入する必要がある "のLib /テンセント/ Tencent.php"が含まれる; $ WX =新新テンセント( "微信を"); $ RET = $ Wx-> QRコード(); ?> <! -直接生成QRコードは、UUID持参することを忘れないように- > <IMG ID = "WX" SRC = "データ:テキスト/ HTML、Base64で、<RET = $ [ 'QRコード'] ??>" UUID =「<=? RET $ [ 'UUID']?> "> <SCRIPT SRC =" https://cdn.bootcss.com/jquery/3.4.1/jquery.js「> </ SCRIPT> <SCRIPT> // setTimeoutメソッド(関数( ){ // VAR UUID =のdocument.getElementById( 'WX')のgetAttribute( "UUID");. // URLのVAR = "/ ajax.php UUID =?" + UUID; //コンソール。 setInterval(関数(){ 。VAR UUID =のdocument.getElementById( 'WX')のgetAttribute( "UUID"); VARのURL = "?/ ajax.php UUID =" + UUID; $アヤックス({タイプ: "GET" 、URL:URL、成功:関数(データ){ IF(data.code == 200) { アラート( "登陆成功、UIN为:" + data.uid); } }}); }、1000)。 }); </ SCRIPT>
ajax.php:
<?PHPは "Libの/テンセント/ Tencent.php"を含む; $ WXは、新たな新テンセント( "微信")を=; // UUIDに直接アクセスした後、同様に聴い $ RET = $ wx-> ListenQR( $ _ GET [ ' UUID「]); //のvar_dump($ RET); エコーjson_encode($ RET)trueに、終了します。
この例では、マイクロチャネルである、QQは、同じコードを実行することができ
- ユーザを保存するためのマルチユーザーデータベーステーブルとwxuinフィールドQQ、QQおよびマイクロチャネルが結合されています
- それは単なる一例である上に、あなたは非常によく書き込みをしないことがあります。ギャングスターはスプレーしないでください
- 以下の私のポストを表現することができますどのような質問