File Coverage

blib/lib/Webqq/Client/Method/_login1.pm
Criterion Covered Total %
statement 9 68 13.2
branch 0 28 0.0
condition 0 6 0.0
subroutine 3 4 75.0
pod n/a
total 12 106 11.3


line stmt bran cond sub pod time code
1 1     1   697 use JE;
  1         106721  
  1         33  
2 1     1   7 use Digest::MD5 qw(md5 md5_hex);
  1         2  
  1         137  
3 1     1   5 use Webqq::Client::Util qw(console);
  1         1  
  1         668  
4             sub Webqq::Client::_login1{
5 0     0     console "尝试进行登录(阶段1)...\n";
6 0           my $self = shift;
7 0           my $ua = $self->{ua};
8 0           my $api_url = 'https://ssl.ptlogin2.qq.com/login';
9 0 0         my @headers = $self->{type} eq 'webqq'? (Referer => 'https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20140612002')
10             : (Referer => 'https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=16&mibao_css=m_webqq&appid=501004106&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fw.qq.com%2Fproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20131024001')
11             ;
12              
13 0           my $passwd;
14              
15 0 0         if($self->{type} eq 'webqq'){
16 0           $md5_salt = eval qq{"$self->{qq_param}{md5_salt}"};
17 0           $passwd = pack "H*",$self->{qq_param}{pwd};
18 0           $passwd = uc md5_hex( uc(md5_hex( $passwd . $md5_salt)) . uc( $self->{qq_param}{verifycode} ) );
19              
20             }
21             else{
22 0           console "客户端加密算法生成中,这可能会花费几分钟,请耐心等待...\n";
23 0           my $je;
24 0 0         if(defined $self->{je}){
25 0           $je = $self->{je};
26             }
27             else{
28 0           my $javascript;
29 0 0         if(defined $Webqq::Client::_javascript){
30 0           $javascript = $Webqq::Client::_javascript;
31             }
32             else{
33 0           local $/ = undef;
34 0           $javascript = ;
35 0           $Webqq::Client::_javascript = $javascript;
36 0           close DATA;
37             }
38 0           $je = JE->new;
39 0           $je->eval($javascript);
40 0 0         if($@){
41 0           console "客户端加密算法执行错误:$@\n";
42 0           return 0;
43             }
44 0           $self->{je} = $je;
45             }
46 0           my $p = $je->eval(qq#
47             var p = '$self->{qq_param}{pwd}';
48             var salt = '$self->{qq_param}{md5_salt}';
49             var verifycode = '$self->{qq_param}{verifycode}';
50             var r = \$.Encryption.getEncryption(p,salt,verifycode,1);
51             return(r);
52             #);
53              
54 0 0 0       if($p and !$@){
55 0           $passwd = $p;
56             }
57             else{
58 0           console "客户端加密算法执行错误:$@\n";
59 0           return 0;
60             }
61            
62             }
63 0 0         my $query_string_ul = $self->{type} eq 'webqq'? 'http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10'
64             : 'http%3A%2F%2Fw.qq.com%2Fproxy.html%3Flogin2qq%3D1%26webqq_type%3D10'
65             ;
66 0 0         my $query_string_action = $self->{type} eq 'webqq' ? '3-14-15279'
67             : '0-23-19230'
68             ;
69              
70            
71 0   0       my @query_string = (
72             u => $self->{qq_param}{qq},
73             p => $passwd,
74             verifycode => $self->{qq_param}{verifycode},
75             webqq_type => 10,
76             remember_uin => 1,
77             login2qq => 1,
78             aid => $self->{qq_param}{g_appid},
79             u1 => $query_string_ul,
80             h => 1,
81             ptredirect => 0,
82             ptlang => 2052,
83             daid => $self->{qq_param}{g_daid},
84             from_ui => 1,
85             pttype => 1,
86             dumy => undef,
87             fp => 'loginerroralert',
88             action => $query_string_action,
89             mibao_css => $self->{qq_param}{g_mibao_css},
90             t => 1,
91             g => 1,
92             js_type => 0,
93             js_ver => $self->{qq_param}{g_pt_version},
94             pt_vcode_v1 => 0,
95             pt_verifysession_v1 => $self->{qq_param}{verifysession} || $self->search_cookie("verifysession"),
96            
97             );
98 0 0         if($self->{type} eq 'webqq'){
99 0           splice @query_string,-4,0,(pt_uistyle => $self->{qq_param}{g_style});
100             }
101             else{
102 0           splice @query_string,-4,0,(login_sig => $self->{qq_param}{g_login_sig});
103 0           splice @query_string,-4,0,(pt_randsalt => $self->{qq_param}{isRandSalt} );
104             }
105            
106 0           my @query_string_pairs;
107 0           push @query_string_pairs , shift(@query_string) . "=" . shift(@query_string) while(@query_string) ;
108              
109 0           for(my $i=1;$i<=$self->{ua_retry_times};$i++){
110 0           my $response = $ua->get($api_url.'?'.join("&",@query_string_pairs),@headers );
111 0 0         if($response->is_success){
112 0 0         print $response->content() if $self->{debug};
113 0           my $content = $response->content();
114 0           my %d = ();
115 0           @d{qw( retcode unknown_1 api_check_sig unknown_2 status uin )} = $content=~/'(.*?)'/g;
116             #ptuiCB('4','0','','0','您输入的验证码不正确,请重新输入。', '12345678');
117             #ptuiCB('3','0','','0','您输入的帐号或密码不正确,请重新输入。', '2735534596');
118            
119 0 0         if($d{retcode} == 4){
    0          
    0          
120 0           console "您输入的验证码不正确,需要重新输入...\n";
121 0           return -1;
122             }
123             elsif($d{retcode} == 3){
124 0           console "您输入的帐号或密码不正确,客户端终止运行...\n";
125 0           $self->stop();
126             }
127             elsif($d{retcode} != 0){
128 0           console "$d{status},客户端终止运行...\n";
129 0           $self->stop();
130             }
131 0           $self->{qq_param}{api_check_sig} = $d{api_check_sig};
132 0           $self->{qq_param}{ptwebqq} = $self->search_cookie('ptwebqq');
133 0           return 1;
134             }
135             }
136 0           return 0;
137             }
138             1;
139             __DATA__