wx_callback.php 7.7 KB

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