<?php
class
Weixin {
public
$userFakeid
;
private
$_account
;
private
$_password
;
private
$url
;
private
$send_data
;
private
$getHeader
= 0;
private
$token
;
private
$host
= 'mp.weixin.qq.com';
private
$origin
= 'https:
private
$referer
;
private
$cookie
;
private
$pageSize
= 100000;
private
$userAgent
= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';
public
function
__construct(
$options
){
$this
->_account = isset(
$options
['account'])?
$options
['account']:'';
$this
->_password = isset(
$options
['password'])?
$options
['password']:'';
$this
->login();
}
private
function
login(){
$url
= 'https:
$this
->send_data =
array
(
'username' =>
$this
->_account,
'pwd' => md5(
$this
->_password),
'f' => 'json'
);
$this
->referer =
"https://mp.weixin.qq.com/"
;
$this
->getHeader = 1;
$result
=
explode
(
"\n"
,
$this
->curlPost(
$url
));
foreach
(
$result
as
$key
=>
$value
) {
$value
= trim(
$value
);
if
(preg_match('/token=(\d+)/i',
$value
,
$match
))
{
$this
->token = trim(
$match
[1]);
}
if
(preg_match('/
"ret"
:(.*)/i',
$value
,
$match
)){
switch
(
$match
[1]) {
case
-1:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"系统错误"
)));
case
-2:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"帐号或密码错误"
)));
case
-3:
die
(urldecode(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>urlencode(
"密码错误"
)))));
case
-4:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"不存在该帐户"
)));
case
-5:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"访问受限"
)));
case
-6:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"需要输入验证码"
)));
case
-7:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"此帐号已绑定私人微信号,不可用于公众平台登录"
)));
case
-8:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"邮箱已存在"
)));
case
-32:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"验证码输入错误"
)));
case
-200:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"因频繁提交虚假资料,该帐号被拒绝登录"
)));
case
-94:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"请使用邮箱登陆"
)));
case
10:
die
(json_encode(
array
('status'=>1,'errCode'=>
$match
[1],'msg'=>
"该公众会议号已经过期,无法再登录使用"
)));
case
0:
$this
->userFakeid =
$this
->getUserFakeid();
break
;
}
}
if
(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i',
$value
,
$match
)){
$this
->cookie .=
$match
[1].'='.
$match
[2].'; ';
}
}
}
private
function
send(
$fakeid
,
$content
){
$url
= 'https:
$this
->send_data =
array
(
'type' => 1,
'f' => 'json',
'action' => 'sync',
'content' =>
$content
,
'tofakeid' =>
$fakeid
,
'token' =>
$this
->token,
'ajax' => 1,
);
$this
->referer = 'https:
return
$this
->curlPost(
$url
);
}
public
function
sendMessage(
$content
='',
$userId
='') {
if
(
is_array
(
$userId
) && !
empty
(
$userId
)){
foreach
(
$userId
as
$v
){
$json
= json_decode(
$this
->send(
$v
,
$content
));
if
(
$json
->ret!=0){
$errUser
[] =
$v
;
}
}
}
else
{
foreach
(
$this
->userFakeid
as
$v
){
$json
= json_decode(
$this
->send(
$v
['fakeid'],
$content
));
if
(
$json
->ret!=0){
$errUser
[] =
$v
['fakeid'];
}
}
}
$count
=
count
(
$this
->userFakeid);
$errCount
=
count
(
$errUser
);
$succeCount
=
$count
-
$errCount
;
$data
=
array
(
'status'=>0,
'
count
'=>
$count
,
'succeCount'=>
$succeCount
,
'errCount'=>
$errCount
,
'errUser'=>
$errUser
);
return
json_encode(
$data
);
}
public
function
getAllUserInfo(){
foreach
(
$this
->userFakeid
as
$v
){
$info
[] =
$this
->getUserInfo(
$v
['groupid'],
$v
['fakeid']);
}
return
$info
;
}
public
function
getUserInfo(
$groupId
,
$fakeId
){
$url
=
"https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid={$fakeId}"
;
$this
->getHeader = 0;
$this
->referer = 'https:
$this
->send_data =
array
(
'token'=>
$this
->token,
'ajax'=>1
);
$message_opt
=
$this
->curlPost(
$url
);
return
$message_opt
;
}
private
function
getUserFakeid(){
ini_set
('max_execution_time',600);
$pageSize
= 1000000;
$this
->referer =
"https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$this->token}"
;
$url
=
"https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize={$pageSize}&pageidx=0&type=0&groupid=0&token={$this->token}&lang=zh_CN"
;
$user
=
$this
->vget(
$url
);
$preg
=
"/\"id\":(\d+),\"nick_name\"/"
;
preg_match_all(
$preg
,
$user
,
$b
);
$i
= 0;
foreach
(
$b
[1]
as
$v
)
{
$arr
[
$i
]['fakeid'] =
$v
;
$arr
[
$i
]['groupid'] = 0;
$i
++;
}
return
$arr
;
}
private
function
curlPost(
$url
) {
$header
=
array
(
'Accept:*
*',
'Connection: keep-alive',
'Host: mp.weixin.qq.com',
'Referer: '.
$this
->referer,
'X-Requested-With: XMLHttpRequest'
);
$useragent
= 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';
$curl
= curl_init();
curl_setopt(
$curl
, CURLOPT_URL,
$url
);
curl_setopt(
$curl
, CURLOPT_HTTPHEADER,
$header
);
curl_setopt(
$curl
, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(
$curl
, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt(
$curl
, CURLOPT_USERAGENT,
$useragent
);
curl_setopt(
$curl
, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt(
$curl
, CURLOPT_AUTOREFERER, 1);
curl_setopt(
$curl
, CURLOPT_HTTPGET, 1);
curl_setopt(
$curl
, CURLOPT_COOKIE,
$this
->cookie);
curl_setopt(
$curl
, CURLOPT_TIMEOUT, 30);
curl_setopt(
$curl
, CURLOPT_HEADER,
$this
->getHeader);
curl_setopt(
$curl
, CURLOPT_RETURNTRANSFER, 1);
$tmpInfo
= curl_exec(
$curl
);
if
(curl_errno(
$curl
)) {
}
curl_close(
$curl
);
return
$tmpInfo
;
}
}