首页 > php教程 > php手册 > 正文

关于PHPFetion不能给好友发送飞信的问题

WBOY
发布: 2016-06-06 20:07:21
原创
1281 人浏览过

(最新版本下载:http://code.google.com/p/php-fetion/downloads/detail?name=phpfetion_v1.3.0.zip) 最近一直有网友反映,PHPFetion类不能给好友发送飞信了,但给自己还可以。通过网友的提示以及我自己的研究发现,在wap飞信中给好友发信息时,加了个csrf

(最新版本下载:http://code.google.com/p/php-fetion/downloads/detail?name=phpfetion_v1.3.0.zip)

最近一直有网友反映,PHPFetion类不能给好友发送飞信了,但给自己还可以。通过网友的提示以及我自己的研究发现,在wap飞信中给好友发信息时,加了个csrfToken字段。

不出意料的话,这个csrfToken应该就是起个防止表单跨站提交的作用。但由于这个csrfToken明文出现在了给好友发飞信的表单页面里,所以获取它也很容易。并且这个csrfToken在给其他任何好友发飞信时,都是不变的,所以只需要获取一次即可。

我写了如下代码来获取csrfToken:

/**
 * csrfToken
 * @param string
 */
protected $_csrfToten = null;
/**
 * 获取csrfToken,给好友发飞信时需要这个字段
 * @param string $uid 飞信ID
 * @return string
 */
protected function _getCsrfToken($uid)
{
    if ($this->_csrfToten === null)
    {
        $uri = '/im/chat/toinputMsg.action?touserid='.$uid;
        $result = $this->_postWithCookie($uri, '');
        preg_match('/name="csrfToken".*?value="(.*?)"/', $result, $matches);
        $this->_csrfToten = isset($matches[1]) ? $matches[1] : '';
    }
    return $this->_csrfToten;
}
登录后复制

另外也修改了给好友发飞信的_toUid()函数:

/**
 * 向好友发送飞信
 * @param string $uid 飞信ID
 * @param string $message 短信内容
 * @return string
 */
protected function _toUid($uid, $message)
{
    $uri = '/im/chat/sendMsg.action?touserid='.$uid;
    $csrfToken = $this->_getCsrfToken($uid);
    $data = 'msg='.urlencode($message).'&csrfToken='.$csrfToken;
    $result = $this->_postWithCookie($uri, $data);
    return $result;
}
登录后复制

写好的代码依然放在了Google Code中,并打包成了最新版本PHPFetion v1.3,下载地址为:http://code.google.com/p/php-fetion/downloads/list。

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板