phpcms如何实现微信登陆

后端开发   发布日期:2023年08月11日   浏览次数:756

本篇内容介绍了“phpcms如何实现微信登陆”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

phpcms实现微信登录的方法:1、在根目录新建“wechat.php”;2、在“phpcmsmodulesmemberindex.php”下增加“public function wechat() {...}”;3、在“foreground.class.php”文件中通过wechat函数判断用户是否登录即可。

phpcms实现微信登陆(无需注册,直接存入)

思路:回调参数,直接register (代码不够规范,自己整理)

在根目录新建wechat.php

访问: http://www.xxxxxx.cn/wechat.php

注意回调地址

phpcms实现微信登陆(无需注册,直接存入)

wechat.php

  1. <?php
  2. if(!empty( $_GET['code']) && !empty( $_GET['state'])){
  3. $code = $_GET['code'];
  4. $state = $_GET['state'];
  5. $url = "http://www.xxxxxx.cn/index.php?m=member&c=index&a=wechat&code=$code&state=$state";
  6. header('location:'.$url);
  7. exit;
  8. }
  9. $appid = 'wx5a3878682fa32bd5';
  10. $url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://www.xxxxxx.cn/wechat.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect";
  11. header('location:'.$url);
  12. ?>

phpcmsmodulesmemberindex.php下增加

注:注册状态输出 $status, 可以返回错误信息 根据错误信息修改参数内容

用户名称和密码做了简单区别处理,根据实际情况修改,邮箱为必须字段,随便放了一个。

  1. <?php
  2. public function wechat() {
  3. $this->_session_start();
  4. //获取用户siteid
  5. $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
  6. //定义站点id常量
  7. if (!defined('SITEID')) {
  8. define('SITEID', $siteid);
  9. }
  10. //加载用户模块配置
  11. //加载用户模块配置
  12. $member_setting = getcache('member_setting');
  13. if(!$member_setting['allowregister']) {
  14. showmessage(L('deny_register'), '/login.html');
  15. }
  16. /*----------------------微信获取用户信息------------------------*/
  17. //换成自己的接口信息
  18. $code = $_GET['code'];
  19. $state = $_GET['state'];
  20. $appid = 'xxxxxxxx';
  21. $appsecret = 'xxxxxxxx';
  22. if (empty($code)) $this->error('授权失败');
  23. $token_url = 'https://api.weixin.qq.com/sns/oauth3/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
  24. $token = json_decode(file_get_contents($token_url));
  25. if (isset($token->errcode)) {
  26. showmessage(L('<br/><h3>错误信息:</h3>'.$token->errmsg), HTTP_REFERER);
  27. exit;
  28. }
  29. $access_token_url = 'https://api.weixin.qq.com/sns/oauth3/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
  30. //转成对象
  31. $access_token = json_decode(file_get_contents($access_token_url));
  32. if (isset($access_token->errcode)) {
  33. showmessage(L('<br/><h3>错误信息:</h3>'.$access_token->errmsg), HTTP_REFERER);
  34. exit;
  35. }
  36. $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';
  37. //转成对象
  38. $user_info = json_decode(file_get_contents($user_info_url));
  39. if (isset($user_info->errcode)) {
  40. showmessage(L( '<br/><h3>错误信息:</h3>'.$user_info->errmsg), HTTP_REFERER);
  41. exit;
  42. }
  43. $rs = json_decode(json_encode($user_info),true);//转换成数组
  44. /*------------------------获取用户信息代码结束-----------------------*/
  45. header("Cache-control: private");
  46. $checkname = trim($rs['nickname'])."_".substr(md5($rs['unionid']),0,5) ;
  47. $this->_init_phpsso();
  48. $cstatus = $this->client->ps_checkname($checkname);
  49. //如果存在用户 用户登陆
  50. if($cstatus == -4 || $cstatus == -1) {
  51. $username = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;
  52. $password = substr(md5($rs['unionid']),0,10);
  53. //is_password($_POST['password']) && is_badword($_POST['password'])==false ? trim($_POST['password']) : showmessage(L('password_format_incorrect'), HTTP_REFERER);
  54. $cookietime = intval($_POST['cookietime']);
  55. $synloginstr = ''; //同步登陆js代码
  56. if(pc_base::load_config('system', 'phpsso')) {
  57. $this->_init_phpsso();
  58. $status = $this->client->ps_member_login($username, $password);
  59. $memberinfo = unserialize($status);
  60. if(isset($memberinfo['uid'])) {
  61. //查询帐号
  62. $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));
  63. if(!$r) {
  64. //插入会员详细信息,会员不存在 插入会员
  65. $info = array(
  66. 'phpssouid'=>$memberinfo['uid'],
  67. 'username'=>$memberinfo['username'],
  68. 'password'=>$memberinfo['password'],
  69. 'encrypt'=>$memberinfo['random'],
  70. 'email'=>$memberinfo['email'],
  71. 'regip'=>$memberinfo['regip'],
  72. 'regdate'=>$memberinfo['regdate'],
  73. 'lastip'=>$memberinfo['lastip'],
  74. 'lastdate'=>$memberinfo['lastdate'],
  75. 'groupid'=>$this->_get_usergroup_bypoint(), //会员默认组
  76. 'modelid'=>10, //普通会员
  77. );
  78. //如果是connect用户
  79. if(!empty($_SESSION['connectid'])) {
  80. $userinfo['connectid'] = $_SESSION['connectid'];
  81. }
  82. if(!empty($_SESSION['from'])) {
  83. $userinfo['from'] = $_SESSION['from'];
  84. }
  85. unset($_SESSION['connectid'], $_SESSION['from']);
  86. $this->db->insert($info);
  87. unset($info);
  88. $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid']));
  89. }
  90. $password = $r['password'];
  91. $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
  92. } else {
  93. if($status == -1) { //用户不存在
  94. showmessage(L('user_not_exist'), '/login.html');
  95. } elseif($status == -2) { //密码错误
  96. showmessage(L('password_error'), '/login.html');
  97. } else {
  98. showmessage(L('login_failure'), '/login.html');
  99. }
  100. }
  101. } else {
  102. //密码错误剩余重试次数
  103. $this->times_db = pc_base::load_model('times_model');
  104. $rtime = $this->times_db->get_one(array('username'=>$username));
  105. if($rtime['times'] > 4) {
  106. $minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60);
  107. showmessage(L('wait_1_hour', array('minute'=>$minute)));
  108. }
  109. //查询帐号
  110. $r = $this->db->get_one(array('username'=>$username));
  111. if(!$r) showmessage(L('user_not_exist'),'/login.html');
  112. //验证用户密码
  113. $password = md5(md5(trim($password)).$r['encrypt']);
  114. if($r['password'] != $password) {
  115. $ip = ip();
  116. if($rtime && $rtime['times'] < 5) {
  117. $times = 5 - intval($rtime['times']);
  118. $this->times_db->update(array('ip'=>$ip, 'times'=>'+=1'), array('username'=>$username));
  119. } else {
  120. $this->times_db->insert(array('username'=>$username, 'ip'=>$ip, 'logintime'=>SYS_TIME, 'times'=>1));
  121. $times = 5;
  122. }
  123. showmessage(L('password_error', array('times'=>$times)), '/login.html', 3000);
  124. }
  125. $this->times_db->delete(array('username'=>$username));
  126. }
  127. //如果用户被锁定
  128. if($r['islock']) {
  129. showmessage(L('user_is_lock'));
  130. }
  131. $userid = $r['userid'];
  132. $groupid = $r['groupid'];
  133. $username = $r['username'];
  134. $nickname = empty($r['nickname']) ? $username : $r['nickname'];
  135. $updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME);
  136. //vip过期,更新vip和会员组
  137. if($r['overduedate'] < SYS_TIME) {
  138. $updatearr['vip'] = 0;
  139. }
  140. //检查用户积分,更新新用户组,除去邮箱认证、禁止访问、游客组用户、vip用户,如果该用户组不允许自助升级则不进行该操作
  141. if($r['point'] >= 0 && !in_array($r['groupid'], array('1', '7', '8')) && empty($r[vip])) {
  142. $grouplist = getcache('grouplist');
  143. if(!empty($grouplist[$r['groupid']]['allowupgrade'])) {
  144. $check_groupid = $this->_get_usergroup_bypoint($r['point']);
  145. if($check_groupid != $r['groupid']) {
  146. $updatearr['groupid'] = $groupid = $check_groupid;
  147. }
  148. }
  149. }
  150. //如果是connect用户
  151. if(!empty($_SESSION['connectid'])) {
  152. $updatearr['connectid'] = $_SESSION['connectid'];
  153. }
  154. if(!empty($_SESSION['from'])) {
  155. $updatearr['from'] = $_SESSION['from'];
  156. }
  157. unset($_SESSION['connectid'], $_SESSION['from']);
  158. $this->db->update($updatearr, array('userid'=>$userid));
  159. if(!isset($cookietime)) {
  160. $get_cookietime = param::get_cookie('cookietime');
  161. }
  162. $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
  163. $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;
  164. $phpcms_auth = sys_auth($userid." ".$password, 'ENCODE', get_auth_key('login'));
  165. param::set_cookie('auth', $phpcms_auth, $cookietime);
  166. param::set_cookie('_userid', $userid, $cookietime);
  167. param::set_cookie('_username', $username, $cookietime);
  168. param::set_cookie('_groupid', $groupid, $cookietime);
  169. param::set_cookie('_nickname', $nickname, $cookietime);
  170. //print_r($_COOKIE);
  171. //exit;
  172. //param::set_cookie('cookietime', $_cookietime, $cookietime);
  173. //https 与 http 传递用户名 跨域跳转cooike
  174. $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index';
  175. $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE['vuGYB__nickname']."&username=".$_COOKIE['vuGYB__username']."&userid=".$_COOKIE['vuGYB__userid']."&groupid=".$_COOKIE['vuGYB__groupid'];
  176. header("Location: ".$url."");
  177. }
  178. //如果不存在用户注册
  179. $userinfo = array();
  180. $userinfo['encrypt'] = create_randomstr(6);
  181. $userinfo['username'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;
  182. $userinfo['nickname'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ;
  183. $userinfo['email'] = time().'@yangpeili.com';
  184. $userinfo['password'] = substr(md5($rs['unionid']),0,10);
  185. $userinfo['modelid'] = isset($_POST['modelid']) ? intval($_POST['modelid']) : 10;
  186. $userinfo['regip'] = ip();
  187. $userinfo['point'] = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0;
  188. $userinfo['amount'] = $member_setting['defualtamount'] ? $member_setting['defualtamount'] : 0;
  189. $userinfo['regdate'] = $userinfo['lastdate'] = SYS_TIME;
  190. $userinfo['siteid'] = $siteid;
  191. $userinfo['connectid'] = isset($_SESSION['connectid']) ? $_SESSION['connectid'] : '';
  192. $userinfo['from'] = isset($_SESSION['from']) ? $_SESSION['from'] : '';
  193. //手机强制验证
  194. //附表信息验证 通过模型获取会员信息
  195. if($member_setting['choosemodel']) {
  196. require_once CACHE_MODEL_PATH.'member_input.class.php';
  197. require_once CACHE_MODEL_PATH.'member_update.class.php';
  198. $member_input = new member_input($userinfo['modelid']);
  199. $_POST['info'] = array_map('new_html_special_chars',$_POST['info']);
  200. $user_model_info = $member_input->get($_POST['info']);
  201. }
  202. if(pc_base::load_config('system', 'phpsso')) {
  203. $this->_init_phpsso();
  204. $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']);
  205. echo $status;
  206. if($status > 0) {
  207. $userinfo['phpssouid'] = $status;
  208. //传入phpsso为明文密码,加密后存入phpcms_v9
  209. $password = $userinfo['password'];
  210. $userinfo['password'] = password($userinfo['password'], $userinfo['encrypt']);
  211. $userid = $this->db->insert($userinfo, 1);
  212. if($member_setting['choosemodel']) { //如果开启选择模型
  213. $user_model_info['userid'] = $userid;
  214. //插入会员模型数据
  215. $this->db->set_model($userinfo['modelid']);
  216. $this->db->insert($user_model_info);
  217. }
  218. if($userid > 0) {
  219. //执行登陆操作
  220. if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
  221. $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
  222. $cookietime = $_cookietime ? TIME + $_cookietime : 0;
  223. if($userinfo['groupid'] == 7) {
  224. param::set_cookie('_username', $userinfo['username'], $cookietime);
  225. param::set_cookie('email', $userinfo['email'], $cookietime);
  226. } else {
  227. $phpcms_auth = sys_auth($userid." ".$userinfo['password'], 'ENCODE', get_auth_key('login'));
  228. //$this->db->update(array('groupid'=> "6"), array('userid'=>$userid));
  229. $sql = "UPDATE `v9_member` SET `groupid`='6' WHERE `userid` = $userid ";//修改用户级别为注册用户
  230. mysql_query($sql);
  231. param::set_cookie('auth', $phpcms_auth, $cookietime);
  232. param::set_cookie('_userid', $userid, $cookietime);
  233. param::set_cookie('_username', $userinfo['username'], $cookietime);
  234. param::set_cookie('_nickname', $userinfo['nickname'], $cookietime);
  235. param::set_cookie('_groupid', $userinfo['groupid'], $cookietime);
  236. param::set_cookie('cookietime', $_cookietime, $cookietime);
  237. $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index';
  238. //https 与 http 传递用户名 跨域跳转cooike
  239. $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE['vuGYB__nickname']."&username=".$_COOKIE['vuGYB__username']."&userid=".$_COOKIE['vuGYB__userid']."&groupid=".$_COOKIE['vuGYB__groupid'];
  240. header("Location: ".$url."");
  241. }
  242. }
  243. }
  244. &nbs

以上就是phpcms如何实现微信登陆的详细内容,更多关于phpcms如何实现微信登陆的资料请关注九品源码其它相关文章!