PHP-怎样使用php模拟用户登录到web飞信,然后发短信给自己?

PHP-怎样使用php模拟用户登录到web飞信,然后发短信给自己?

偏爱自由 发布于 2017-10-10 字数 132 浏览 1177 回复 4

web飞信上登录以后是可以自己免费发短信给自己的,请问用php模拟用户登录到web飞信,然后发短信给自己怎么实现?有具体一点的代码最好

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜无邪 2017-11-03 4 楼

飞信以前有别人开源的库
可以用php和python还有c、c++调用的库
后来,基本不好用了
有验证码了

web飞信,这个如果用界面
模拟输入和点击的话
还是可以做的
curl 是无法搞定 验证码的

好运:)

夜无邪 2017-11-03 3 楼

我说下思路吧:

使用curl调用web飞信的登录接口,保存返回的cookie或者sessionId值,再用curl带这些cookie或者sessionId值去调用发送短信的接口,应该就可以发了。

看了下飞信的登录页面貌似是用https,估计比较难处理啦~~

瑾兮 2017-10-18 2 楼

哈哈 亲测可用哦

 <?php
/**
* PHP飞信发送类
* @author quanhengzhuang <blog.quanhz.com>
* @version 1.2.0
*/
class PHPFetion {

/**
* 发送者手机号
* @var string
*/
protected $_mobile;

/**
* 飞信密码
* @param string
*/
protected $_password;

/**
* Cookie字符串
* @param string
*/
protected $_cookie = '';

/**
* 构造函数
* @param string $mobile 手机号(登录者)
* @param string $password 飞信密码
*/
public function __construct($mobile, $password) {
if($mobile === '' || $password === '') {
return false;
}

$this->_mobile = $mobile;
$this->_password = $password;

$this->_login();
}

/**
* 析构函数
*/
public function __destruct() {
$this->_logout();
}

/**
* 登录
* @return string
*/
protected function _login() {
$uri = '/im/login/inputpasssubmit1.action';
$data = 'm='.$this->_mobile.'&pass='.urlencode($this->_password).'&loginstatus=1';

$result = $this->_postWithCookie($uri, $data);

// 解析Cookie
preg_match_all('/.*?rnSet-Cookie: (.*?);.*?/si', $result, $matches);
if(isset($matches[1])) {
$this->_cookie = implode('; ', $matches[1]);
}

return $result;
}

/**
* 向指定的手机号发送飞信
* @param string $mobile 手机号(接收者)
* @param string $message 短信内容
* @return string
*/
public function send($mobile, $message) {
if($message === '') {
return '';
}

// 判断是给自己发还是给好友发
if($mobile == $this->_mobile) {
return $this->_toMyself($message);
} else {
$uid = $this->_getUid($mobile);
return $uid === '' ? '' : $this->_toUid($uid, $message);
}
}

/**
* 获取飞信ID
* @param string $mobile 手机号
* @return string
*/
protected function _getUid($mobile) {
$uri = '/im/index/searchOtherInfoList.action';
$data = 'searchText='.$mobile;

$result = $this->_postWithCookie($uri, $data);

// 匹配
preg_match('/toinputMsg.action?touserid=(d+)/si', $result, $matches);

return isset($matches[1]) ? $matches[1] : '';
}

/**
* 向好友发送飞信
* @param string $uid 飞信ID
* @param string $message 短信内容
* @return string
*/
protected function _toUid($uid, $message) {
$uri = '/im/chat/sendMsg.action?touserid='.$uid;
$data = 'msg='.urlencode($message);

$result = $this->_postWithCookie($uri, $data);

return $result;
}

/**
* 给自己发飞信
* @param string $message
* @return string
*/
protected function _toMyself($message) {
$uri = '/im/user/sendMsgToMyselfs.action';
$result = $this->_postWithCookie($uri, 'msg='.urlencode($message));

return $result;
}

/**
* 退出飞信
* @return string
*/
protected function _logout() {
$uri = '/im/index/logoutsubmit.action';
$this->_postWithCookie($uri, '');

return $result;
}

/**
* 携带Cookie向f.10086.cn发送POST请求
* @param string $uri
* @param string $uri
*/
protected function _postWithCookie($uri, $data) {
$fp = fsockopen('f.10086.cn', 80);
fputs($fp, "POST $uri HTTP/1.1rn");
fputs($fp, "Host: f.10086.cnrn");
fputs($fp, "Cookie: {$this->_cookie}rn");
fputs($fp, "Content-Type: application/x-www-form-urlencodedrn");
fputs($fp, "Content-Length: ".strlen($data)."rn");
fputs($fp, "Connection: closernrn");
fputs($fp, $data);

$result = '';
while(!feof($fp)) {
$result .= fgets($fp);
}

fclose($fp);

return $result;
}

}

调用方法,创建个新对象即可:

 <?php
require 'PHPFetion.php';

$fetion = new PHPFetion('12345678910', '123456'); // 手机号、飞信密码
$fetion->send('12345678910', 'Hello!'); // 接收人手机号、飞信内容

作者在文件头部有注释~~

归属感 2017-10-16 1 楼

目前网上有很多第三方的飞信接口。缺点是都不太稳定,很多到现在都失效无法使用了,另外我们还会担心信息的外泄。其实我们可以自己动手实现一个这样的一个接口,我这里给出的思路非常简单:通过模拟登录WAP版飞信,来实现发飞信等操作。选择WAP飞信主要是因为其界面比较简单,容易分析,并且没有验证码。

请参考这篇原理性质的文章:
http://blog.quanhz.com/archives/118

模拟登陆部分:

$cookie = dirname(__FILE__).'/cookie.txt';
$post = array(
'm' => '13700001234',
'pass' => '123456',
'loginstatus' => 1,
);

$curl = curl_init('http://f.10086.cn/im/login/inputpasssubmit1.action');
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); // 注意这里!保存Cookie
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
$result = curl_exec($curl);
curl_close($curl);

POST发送数据,进行短信发送部分:

$post = array(
'msg' => 'Hello Fetion',
);

$curl = curl_init('http://f.10086.cn/im/user/sendMsgToMyselfs.action');
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); // 注意这里!
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
$result = curl_exec($curl);
curl_close($curl);

至于当前是否还能够正常使用已经不清楚了,今年8月份的时候突然这些第三方的飞信API都不能正常工作了,应该是移动封禁了第三方调用了吧~

最后是开源的飞信PHP短信工程,托管在Google上了,地址如下:
http://code.google.com/p/php-fetion/downloads/list

Good Luck~

好吧,我又测试了下,现在的确又能够正常使用了~~~ 表示无语,楼主下载源代码研究下吧~~