예제 #1
0
 /**
  * (non-PHPdoc)
  * @see \tfc\mvc\interfaces\Action::run()
  */
 public function run()
 {
     $req = Ap::getRequest();
     $cookie = new Cookie('cookie');
     $appid = Cfg::getApp('appid', 'qq', 'extlogin');
     $appkey = Cfg::getApp('appkey', 'qq', 'extlogin');
     $callback = Options::getSiteUrl() . '/index.php?r=member/data/qqcallback';
     if ($cookie->get('state') !== $req->getParam('state')) {
         exit('The state does not match. You may be a victim of CSRF.');
     }
     $tokenUrl = 'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code' . '&client_id=' . $appid . '&redirect_uri=' . urlencode($callback) . '&client_secret=' . $appkey . '&code=' . $req->getParam('code');
     $response = file_get_contents($tokenUrl);
     if (strpos($response, 'callback') !== false) {
         $lpos = strpos($response, '(');
         $rpos = strrpos($response, ')');
         $response = substr($response, $lpos + 1, $rpos - $lpos - 1);
         $msg = json_decode($response);
         if (isset($msg->error)) {
             echo '<h3>error:</h3>' . $msg->error;
             echo '<h3>msg  :</h3>' . $msg->error_description;
             exit;
         }
     }
     $params = array();
     parse_str($response, $params);
     $graphUrl = 'https://graph.qq.com/oauth2.0/me?access_token=' . $params['access_token'];
     $str = file_get_contents($graphUrl);
     if (strpos($str, 'callback') !== false) {
         $lpos = strpos($str, '(');
         $rpos = strrpos($str, ')');
         $str = substr($str, $lpos + 1, $rpos - $lpos - 1);
     }
     $user = json_decode($str);
     if (isset($user->error)) {
         echo '<h3>error:</h3>' . $user->error;
         echo '<h3>msg  :</h3>' . $user->error_description;
         exit;
     }
     $openid = $user->openid;
     $mod = Model::getInstance('Account', 'member');
     $ret = $mod->extlogin(DataAccount::PARTNER_QQ, $openid);
     if ($ret['err_no'] === DataAccount::SUCCESS_LOGIN_NUM) {
         $httpReferer = HttpCookie::get('http_referer', 'index.php');
         HttpCookie::remove('http_referer');
         Ap::getResponse()->location($httpReferer);
     } else {
         Ap::getResponse()->location('index.php?r=member/show/login');
     }
 }
예제 #2
0
 /**
  * (non-PHPdoc)
  * @see \tfc\mvc\interfaces\Action::run()
  */
 public function run()
 {
     $cookie = new Cookie('cookie');
     $httpReferer = Ap::getRequest()->getTrim('http_referer');
     if ($httpReferer === '') {
         $httpReferer = 'index.php';
     }
     HttpCookie::add('http_referer', $httpReferer);
     $appid = Cfg::getApp('appid', 'wechat', 'extlogin');
     $callback = Options::getSiteUrl() . '/index.php?r=member/data/wechatcallback';
     $scope = 'snsapi_base';
     $state = md5(uniqid(rand(), TRUE));
     //CSRF protection
     $cookie->add('state', $state);
     $loginUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?response_type=code' . '&appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&state=' . $state . '&scope=' . $scope . '#wechat_redirect';
     Ap::getResponse()->location($loginUrl);
 }
예제 #3
0
파일: Qqlogin.php 프로젝트: suyuanen/trotri
 /**
  * (non-PHPdoc)
  * @see \tfc\mvc\interfaces\Action::run()
  */
 public function run()
 {
     $cookie = new Cookie('cookie');
     $httpReferer = Ap::getRequest()->getTrim('http_referer');
     if ($httpReferer === '') {
         $httpReferer = 'index.php';
     }
     HttpCookie::add('http_referer', $httpReferer);
     $appid = Cfg::getApp('appid', 'qq', 'extlogin');
     $callback = Options::getSiteUrl() . '/index.php?r=member/data/qqcallback';
     $scope = 'get_user_info';
     $state = md5(uniqid(rand(), TRUE));
     //CSRF protection
     $cookie->add('state', $state);
     $loginUrl = 'https://graph.qq.com/oauth2.0/authorize?response_type=code' . '&client_id=' . $appid . '&redirect_uri=' . urlencode($callback) . '&state=' . $state . '&scope=' . $scope;
     Ap::getResponse()->location($loginUrl);
 }
예제 #4
0
파일: Repwd.php 프로젝트: suyuanen/trotri
 /**
  * 发送邮件
  * @param string $memberMail
  * @return integer
  */
 public function sendMail($memberMail)
 {
     $ret = $this->encryptMail($memberMail);
     if ($ret['err_no'] !== DataRepwd::SUCCESS_REPWD_NUM) {
         $ret['err_msg'] = DataRepwd::getErrMsgByErrNo($ret['err_no']);
         unset($ret['ciphertext']);
         return $ret;
     }
     $url = Options::getSiteUrl() . '?r=member/show/repwdmail&cipher=' . $ret['ciphertext'];
     $subject = Lang::_('SRV_FILTER_REPWD_REPWD_LABEL');
     $body = $subject . ': ' . $url;
     if (!Tools::sendMail($memberMail, $subject, $body)) {
         $errNo = DataRepwd::ERROR_SEND_MAIL_FAILED;
         Log::warning(sprintf('Repwd send mail failed, member_mail "%s"', $memberMail), $errNo, __METHOD__);
         return array('err_no' => $errNo, 'err_msg' => DataRepwd::getErrMsgByErrNo($errNo));
     }
     $mailHost = substr($memberMail, strpos($memberMail, '@') + 1);
     $errNo = DataRepwd::SUCCESS_REPWD_NUM;
     $errMsg = Lang::_('SRV_FILTER_REPWD_SEND_MAIL_SUCCESS') . '&nbsp;&nbsp;' . '<a href="http://' . $mailHost . '">' . $mailHost . '</a>';
     return array('err_no' => $errNo, 'err_msg' => $errMsg);
 }