qq_callback.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <?php
  2. function get_qquser_info()
  3. {
  4. $get_user_info = 'https://graph.qq.com/user/get_user_info?' . 'access_token=' . $_SESSION['access_token'] . '&oauth_consumer_key=' . $_SESSION['appid'] . '&openid=' . $_SESSION['openid'] . '&format=json';
  5. $info = get_url_contents($get_user_info);
  6. $arr = json_decode($info, true);
  7. return $arr;
  8. }
  9. function qq_callback()
  10. {
  11. if ($_REQUEST['state'] == $_SESSION['state']) {
  12. $token_url = 'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&' . 'client_id=' . $_SESSION['appid'] . '&redirect_uri=' . urlencode($_SESSION['callback']) . '&client_secret=' . $_SESSION['appkey'] . '&code=' . $_REQUEST['code'];
  13. $response = get_url_contents($token_url);
  14. if (strpos($response, 'callback') !== false) {
  15. $lpos = strpos($response, '(');
  16. $rpos = strrpos($response, ')');
  17. $response = substr($response, $lpos + 1, $rpos - $lpos - 1);
  18. $msg = json_decode($response);
  19. if (isset($msg->error)) {
  20. echo '<h3>error:</h3>' . $msg->error;
  21. echo '<h3>msg :</h3>' . $msg->error_description;
  22. exit();
  23. }
  24. }
  25. $params = array();
  26. parse_str($response, $params);
  27. $_SESSION['access_token'] = $params['access_token'];
  28. }
  29. else {
  30. echo 'The state does not match. You may be a victim of CSRF.';
  31. }
  32. }
  33. function get_openid()
  34. {
  35. $graph_url = 'https://graph.qq.com/oauth2.0/me?access_token=' . $_SESSION['access_token'];
  36. $str = get_url_contents($graph_url);
  37. if (strpos($str, 'callback') !== false) {
  38. $lpos = strpos($str, '(');
  39. $rpos = strrpos($str, ')');
  40. $str = substr($str, $lpos + 1, $rpos - $lpos - 1);
  41. }
  42. $user = json_decode($str);
  43. if (isset($user->error)) {
  44. echo '<h3>error:</h3>' . $user->error;
  45. echo '<h3>msg :</h3>' . $user->error_description;
  46. exit();
  47. }
  48. $_SESSION['openid'] = $user->openid;
  49. }
  50. function reusername($userid)
  51. {
  52. global $db;
  53. global $db_mymps;
  54. $ifreuser = $db->getOne('SELECT COUNT(id) FROM `' . $db_mymps . 'member` WHERE userid = \'' . $userid . '\'');
  55. if (0 < $ifreuser) {
  56. return true;
  57. }
  58. else {
  59. return false;
  60. }
  61. }
  62. function matchname($chars, $encoding = 'utf8')
  63. {
  64. $chars = trim($chars);
  65. $pattern = $encoding == 'utf8' ? '/[\\x{4e00}-\\x{9fa5}a-zA-Z0-9]/u' : '/[\\x80-\\xFF]/';
  66. preg_match_all($pattern, $chars, $result);
  67. $temp = join('', $result[0]);
  68. return $temp;
  69. }
  70. error_reporting(32767 ^ 8);
  71. @header('Content-Type: text/html; charset=utf-8');
  72. define('IN_MYMPS', true);
  73. define('QQLOGINDIR', dirname(__FILE__));
  74. @define('MYMPS_ROOT', ereg_replace('[/\\]{1,}', '/', substr(QQLOGINDIR, 0, -15)));
  75. define('MYMPS_DATA', MYMPS_ROOT . '/data');
  76. define('MYMPS_INC', MYMPS_ROOT . 'include');
  77. require_once MYMPS_DATA . '/config.php';
  78. if (function_exists('date_default_timezone_set')) {
  79. date_default_timezone_set('Hongkong');
  80. }
  81. require_once MYMPS_DATA . '/config.db.php';
  82. require_once MYMPS_INC . '/db.class.php';
  83. require_once MYMPS_INC . '/common.fun.php';
  84. require_once MYMPS_INC . '/openlogin.fun.php';
  85. require_once MYMPS_INC . '/cache.fun.php';
  86. require_once MYMPS_ROOT . '/member/include/common.func.php';
  87. $timestamp = time();
  88. if (!pcclient()) {
  89. $_GET['mod'] = 'm';
  90. }
  91. else {
  92. $_GET['mod'] = 'pc';
  93. }
  94. require_once 'session.php';
  95. require_once 'config.php';
  96. qq_callback();
  97. get_openid();
  98. $openid = $_SESSION['openid'];
  99. if (empty($openid)) {
  100. write_msg('登录失败,请返回重新登陆!', $mymps_global[SiteUrl] . '/include/qqlogin/qq_login.php');
  101. }
  102. $row = NULL;
  103. $row = $db->getRow('SELECT userid,userpwd FROM `' . $db_mymps . 'member` WHERE openid = \'' . $openid . '\'');
  104. require_once MYMPS_INC . '/member.class.php';
  105. if (is_array($row)) {
  106. $userid = $row['userid'];
  107. $userpwd = $row['userpwd'];
  108. $db->query('UPDATE `' . $db_mymps . 'member` SET logintime=\'' . $timestamp . '\' WHERE userid = \'' . $userid . '\' ');
  109. if (PASSPORT_TYPE == 'phpwind') {
  110. require MYMPS_ROOT . '/pw_client/uc_client.php';
  111. $user_login = uc_user_login($userid, $userpwd, 0);
  112. $member_log->in($userid, $userpwd, 'off', 'noredirect');
  113. echo $user_login['synlogin'];
  114. }
  115. else if (PASSPORT_TYPE == 'ucenter') {
  116. $member_log->in($userid, $userpwd, 'off', 'noredirect');
  117. require MYMPS_ROOT . '/uc_client/client.php';
  118. list($uid, $username, $password, $email) = uc_user_login($userid, $userpwd);
  119. echo uc_user_synlogin($uid);
  120. }
  121. else {
  122. $member_log->in($userid, $userpwd, 'off', 'noredirect');
  123. }
  124. if (!pcclient() && $view != 'pc') {
  125. echo mymps_goto($mymps_global['SiteUrl'] . '/m/index.php?mod=member');
  126. }
  127. else {
  128. echo mymps_goto($mymps_global['SiteUrl'] . '/member/index.php');
  129. }
  130. }
  131. else {
  132. $qquser = get_qquser_info();
  133. $_SESSION['nickname'] = $charset == 'gbk' ? iconv('UTF-8', 'GBK', matchname($qquser['nickname'])) : matchname($qquser['nickname']);
  134. $nickname = cutstr($_SESSION['nickname'], 15);
  135. $prelogo = $logo = $qquser['figureurl_qq_2'];
  136. $userid = !reusername($nickname) ? $nickname : $nickname . '_' . random(3);
  137. $userid = !reusername($userid) ? $userid : $userid . '_' . random(3);
  138. $userpwd = md5(random());
  139. if ($db->getOne('SELECT COUNT(id) FROM `' . $db_mymps . 'member` WHERE userid = \'' . $userid . '\'') < 1) {
  140. $email = random() . '@qq.com';
  141. if (PASSPORT_TYPE == 'phpwind') {
  142. require MYMPS_ROOT . '/pw_client/uc_client.php';
  143. $checkuser = uc_check_username($userid);
  144. if ($checkuser == -2) {
  145. write_msg('用户名重复,请换一个用户名注册');
  146. }
  147. else if ($checkuser == -1) {
  148. write_msg('用户名不符合规范,请换一个用户名注册');
  149. }
  150. else if ($checkuser == 1) {
  151. }
  152. else {
  153. write_msg('未知错误,请换一个用户名注册');
  154. }
  155. if ($email) {
  156. $checkemail = uc_check_email($email);
  157. $checkemail == -3 && write_msg('Email格式不正确,请填写正确的Email');
  158. $checkemail == -4 && write_msg('该Email地址已重复,请更换一个Email地址');
  159. }
  160. uc_user_register($userid, md5($userpwd), $email);
  161. $user_login = uc_user_login($userid, $userpwd, 0);
  162. echo $user_login['synlogin'];
  163. }
  164. else if (PASSPORT_TYPE == 'ucenter') {
  165. require MYMPS_ROOT . '/uc_client/client.php';
  166. if ($activation && ($activeuser = uc_get_user($activation))) {
  167. list($uid, $userid) = $activeuser;
  168. }
  169. else {
  170. $user = $db->getRow('SELECT id,userid FROM `' . $db_mymps . 'member` WHERE userid = \'' . $userid . '\'');
  171. if (uc_get_user($userid) && !$user['userid']) {
  172. write_msg('该用户无需注册,请重新登录', $mymps_global[SiteUrl] . '/' . $mymps_global['cfg_member_logfile']);
  173. }
  174. $uid = uc_user_register($userid, $userpwd, $email);
  175. if ($uid <= 0) {
  176. if ($uid == -1) {
  177. write_msg('用户名不合法');
  178. }
  179. else if ($uid == -2) {
  180. write_msg('包含不允许注册的词语');
  181. }
  182. else if ($uid == -3) {
  183. write_msg('用户名已经存在');
  184. }
  185. else if ($uid == -4) {
  186. write_msg('Email 格式有误');
  187. }
  188. else if ($uid == -5) {
  189. write_msg('Email 不允许注册');
  190. }
  191. else if ($uid == -6) {
  192. write_msg('该 Email 已经被注册');
  193. }
  194. else {
  195. write_msg('未定义');
  196. }
  197. }
  198. else {
  199. $userid = trim($userid);
  200. $userpwd = trim($userpwd);
  201. $email = trim($email);
  202. }
  203. list($uid, $username, $password, $email) = uc_user_login($userid, $userpwd);
  204. echo uc_user_synlogin($uid);
  205. }
  206. }
  207. member_reg($userid, $userpwd, '', '', '', $openid, '', 1, '', $logo, $prelogo);
  208. }
  209. $member_log->in($userid, $userpwd, 'off', 'noredirect');
  210. if (!pcclient() && $view != 'pc') {
  211. echo mymps_goto($mymps_global['SiteUrl'] . '/m/index.php?mod=member');
  212. }
  213. else {
  214. echo mymps_goto($mymps_global['SiteUrl'] . '/member/index.php');
  215. }
  216. }
  217. ?>