curl 模擬登陸微信公衆平臺帶驗證碼

  這段時間一直寫個項目, 從切圖到前端到後臺都要搞定,真tm累。 今天下午手殘,不停用錯誤的密碼去模擬登陸微信公衆平臺,結果後來出現驗證碼,瞬間悲劇(菜鳥歷來沒搞過帶驗證碼的)。javascript

  研究了一下,發現其實很簡單,直接把生成的二維碼圖片拉過來,讓用戶本身輸入,再提交一遍表單便可。其實中間仍是有些坑,好比生成驗證碼的時候,要把cookie保存下,登陸的時候要帶上這個cookie,要否則會老是提示須要驗證碼。 php

      客戶端:前端

 1 <body>
 2 <form>
 3 <p><input type="text" name="user" value="" />賬號</p>
 4 <p><input type="password" name="pass" value="" />密碼</p>
 5 <div style="display:none">
 6 <input type="text" name="code" />驗證碼
 7 <img src="" id="imgcode" /><a href="javascript:;" id="changCode">換一張</a>
 8 </div>
 9 <input type="button" class="submit" value="綁定"/>
10 </form>
11 <script src="http://code.jquery.com/jquery-1.9.0.js"></script>
12 <script type="text/javascript">
13 $(function(){
14     $('.submit').on('click', function(){
15         
16         var user = $('input[name=user]').val(),
17             pass = $('input[name=pass]').val();
18         
19         var data = {
20             'user' : user,
21             'pass' : pass
22         };
23         
24         if ( $('img').attr('src') != '' ) {
25             var code = $('input[name=code]').val();
26             data.code = code;
27         }
28         
29         $.post('wx-login.php', data, function(res){
30             
31             var oRes = JSON.parse(res);
32             //console.log(oRes);
33             // -8 須要驗證碼
34             if ( oRes.base_resp.ret == '-8') {
35                 $('img').attr('src','code.php?u='+user);
36                 $('div').show();
37             } else if( oRes.base_resp.ret == 0 ){
38                 alert('登陸成功');
39             } else {
40                 alert('登陸失敗');
41             }
42         });
43         
44     });
45     
46     $('#changCode').on('click', function(){
47         var user = $('input[name=user]').val();
48         $('img').attr('src','code.php?u='+user+'&s='+Math.random(1));
49     });
50 });
51 </script>
52 </body>

 

  服務端-驗證碼:java

  code.phpjquery

 1 $username = $_GET['u'];
 2 $url = "https://mp.weixin.qq.com/cgi-bin/verifycode?username={$username}&r=".time();
 3 
 4 //必須絕對路徑
 5 $file = dirname(__FILE__).'/cookie/cookie_'.$username.'.txt';
 6 
 7 $curl = curl_init();
 8 curl_setopt($curl, CURLOPT_URL, $url);
 9 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
10 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
11 curl_setopt ($curl, CURLOPT_TIMEOUT, 10 );   
12 curl_setopt($curl, CURLOPT_HEADER, 0);
13 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
15 curl_setopt($curl, CURLOPT_COOKIEJAR, $file); 16 $res = curl_exec ($curl); 17 curl_close ( $curl ); 18 header("Content-type:image/jpeg"); 19 echo $res;

    服務端-登陸:json

  wx-login.php微信

 1 $arr = array(
 2     'username'=>$_POST['user'], //wx公衆賬號
 3     'pwd'=>md5($_POST['pass']), //wx公衆賬號密碼
 4     'f'=>'json'
 5 );
 6 
 7 if (isset($_POST['code'])) {
 8     $arr['imgcode'] = $_POST['code'];
 9 }
10 
11 $file = dirname(__FILE__).'/cookie/cookie_'.$arr['username'].'.txt';
12 
13 $headers = array(
14     'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',
15     'Referer:https://mp.weixin.qq.com/',
16 );
17 
18 $curl = curl_init();
19 curl_setopt($curl, CURLOPT_URL, 'https://mp.weixin.qq.com/cgi-bin/login');
20 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
21 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
22 curl_setopt ($curl, CURLOPT_TIMEOUT, 10 );   
23 curl_setopt($curl, CURLOPT_HEADER, 0);
24 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);26 curl_setopt($curl, CURLOPT_POST, 1);
27 curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arr));
28 curl_setopt($curl, CURLOPT_HTTPHEADER,$headers);
29 
30 if (!empty($arr['imgcode'])) {
31     curl_setopt($curl, CURLOPT_COOKIEFILE, $file);
32 }
33 
34 $result = curl_exec ($curl);
35 curl_close ( $curl );
36 echo $result;
相關文章
相關標籤/搜索