シェア、PHPは、インターネットにアクセスしないだけでなく、マイクロチャネルQQの開発者プラットフォームのユーザーがドッキングガチョウの工場を達成することができ、第四党QQマイクロチャンネルスキャンコードの着陸を実現し、phpQQマイクロチャンネルスキャンコード着陸

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およびマイクロチャネルが結合されています
    • それは単なる一例である上に、あなたは非常によく書き込みをしないことがあります。ギャングスターはスプレーしないでください
    • 以下の私のポストを表現することができますどのような質問

 

おすすめ

転載: www.cnblogs.com/death-satan/p/12666886.html