Associate.class.php 7.19 KB
<?php
/**
 * 第三方操作
 */
class Controller_Associate extends Controller_Abstract
{

    /**
     * 登录
     * 
     * @param string key  应用的唯一ID
     * @param string sign  通过应用颁发的密钥所生成的签名
     * @param integer type  第三方类型:3:weibo,4:qq,5:支付宝,6:人人,7:豆瓣,8:facebook,9:instagram
     * @param string auth  唯一标识(第三方用户)
     * @param string $nick  用户的昵称
     * @param string $headpic  用户的头像
     * @param string $alipay_email  支付宝用户的邮箱或手机号,用于合并有货的老数据,必须的参数
     * @param string fields  需要返回的信息
     * @param string token  访问令牌
     * @param string expires_in  使用周期(访问令牌)
     * @param string refresh_token  刷新令牌 (第三方有则传,没有则可不传)
     * @return json
     */
    public function indexAction()
    {
        $result = Config_Code::$error['system'];
        
        do 
        {
            /* 执行第三方登录操作 */
            $type = $this->_request->post('type', false);
            $auth = $this->_request->post('auth', false);
            $nick = $this->_request->post('nick', '');
            $headpic = $this->_request->post('headpic', '');
            $alipayEmail = $this->_request->post('alipay_email', '');
            $fields = $this->_request->post('fields', '');
            // 登录成功返回订阅的用户信息,登录失败则返回提示信息
            $result = Facade_Associate::login($type, $auth, $nick, $headpic, $alipayEmail, $fields, $this->_appScope, $this->_appId);
            if (isset($result['code']))
            {
                break;
            }
            // 执行登录操作,写入Cookie及Session
            Facade_Auth::login($result['uid']);
                
            /* 保存第三方应用授权过用户的访问信息 */
            $token = $this->_request->post('token', false);
            $expiresIn = $this->_request->post('expires_in', false);
            if ($token && $expiresIn)
            {
                $refreshToken = $this->_request->post('refresh_token', null);
                            
                Facade_Associate::set($auth, $type, $result['uid'], $token, $refreshToken, $expiresIn);
            }
            
            return $this->returnJson(Config_Code::$success['system']['code'], $result, Config_Code::$success['system']['message']);
        }
        while (false);
        
        return $this->returnJson($result['code'], null, $result['message']);
    }

    /**
     * 回调登录
     * 
     * @param string key  应用的唯一ID
     * @param string sign  通过应用颁发的密钥所生成的签名
     * @param integer type  第三方类型:3:weibo,4:qq,5:支付宝,6:人人,7:豆瓣,8:facebook,9:instagram
     * @param string auth  唯一标识(第三方用户)
     * @param string $nick  用户的昵称
     * @param string $headpic  用户的头像
     * @param string $alipay_email  支付宝的邮箱或手机号,用于合并有货的老数据
     * @param string fields  需要返回的信息
     * @param string token  访问令牌
     * @param string expires_in  使用周期(访问令牌)
     * @param string refresh_token  刷新令牌
     * @param string callback  回调地址
     * @param string method  回调地址采用的方法
     */
    public function callbackloginAction()
    {
        do
        {
            /* 判断传递的回调地址是否有效 */
            $method = $this->_request->post('method', 'post');
            $callback = $this->_request->post('callback', null);
            if (null === $callback || !is_string($callback) || 0 !== stripos($callback, 'http://'))
            {
                return;
            }

            /* 执行第三方登录操作 */
            $type = $this->_request->post('type', false);
            $auth = $this->_request->post('auth', false);
            $nick = $this->_request->post('nick', '');
            $headpic = $this->_request->post('headpic', '');
            $alipayEmail = $this->_request->post('alipay_email', '');
            $fields = $this->_request->post('fields', '');
            // 登录成功返回订阅的用户信息,登录失败则返回提示信息
            $data = Facade_Associate::login($type, $auth, $nick, $headpic, $alipayEmail, $fields, $this->_appScope, $this->_appId);
            if (isset($data['code']))
            {
                break;
            }
            // 执行登录操作,写入Cookie及Session
            Facade_Auth::login($data['uid']);
                
            /* 保存第三方应用授权过用户的访问信息 */
            $token = $this->_request->post('token', false);
            $expiresIn = $this->_request->post('expires_in', false);
            if ($token && $expiresIn)
            {
                $refreshToken = $this->_request->post('refresh_token', null);
                            
                Facade_Associate::set($auth, $type, $data['uid'], $token, $refreshToken, $expiresIn);
            }
            
            $data += Config_Code::$success['system'];
            
        } while (false);

        return $this->_callback($callback, $method, $data);
    }

    /**
     * 绑定手机号或邮箱
     * 
     * @param string key  应用的唯一ID
     * @param string sign  通过应用颁发的密钥所生成的签名
     * @param integer uid  统一用户中心的ID
     * @param string account  账号 唯一的
     * @param string password  密码,当type为1或2时需要传递,默认为空
     * @return json
     */
    public function bindAction()
    {
        $result = Config_Code::$error['system'];
        
        do 
        {
            $uid = $this->_request->post('uid', null);
            $account = $this->_request->post('account', '');
            $password = $this->_request->post('password', '');
            
            $result = Facade_Associate::bind($uid, $account, $password);
        }
        while (false);
            
        return $this->returnJson($result['code'], null, $result['message']);;
    }
    
    /**
     * 获取用户的所有已授权信息
     * 
     * @return json
     */
    public function getAllAuthAction()
    {
        $result = array();
        
        $uid = $this->_request->query('uid');
        if (is_numeric($uid))
        {
            $result = Facade_Associate::getByUid($uid);
        }
        
        return $this->returnJson(Config_Code::$success['system']['code'], $result, Config_Code::$success['system']['message']);
    }

    /**
     * @todo test interface
     */
    public function testAction()
    {
        return;

        $appId = '1391846466';
        $auth = 'acf580d44fa051144e52a8e9ed31afc4';

        $test = Facade_Associate::set($auth, $appId, 39000003, '7ad7ba80e8e3a68cf25d625d52370d3e', '210eb5a022ab64befc007485ce01dc7b', '8035200');

        $test = Facade_Associate::get($auth, $appId);

        $test = Facade_Associate::upd($auth, $appId, array('uid' => 39000000));

        $test = Facade_Associate::del($auth, $appId);

        $test = Facade_Associate::setAuthInfo(39000003, 4, 'goodboy@qq.com', md5(md5('password' . 'salt')), 'salt');
    }

}