phpcms method to implement Wechat login: 1. Create a new "wechat.php" in the root directory; 2. Add "public function wechat() {. ..}"; 3. Use the wechat function in the "foreground.class.php" file to determine whether the user is logged in.
The operating environment of this tutorial: Windows 10 system, phpcms v9 version, DELL G3 computer
How to implement WeChat login in phpcms?
phpcms implements WeChat login (no registration required, direct deposit)
Idea: callback parameters, register directly (the code is not standardized enough, organize it yourself)
At the root Create a new directory wechat.php
Visit: http://www.xxxxxx.cn/wechat.php
Note the callback address
phpcms implements WeChat login (no registration required, directly Deposit)
wechat.php
<?php if(!empty( $_GET['code']) && !empty( $_GET['state'])){ $code = $_GET['code']; $state = $_GET['state']; $url = "http://www.xxxxxx.cn/index.php?m=member&c=index&a=wechat&code=$code&state=$state"; header('location:'.$url); exit; } $appid = 'wx5a3878682fa32bd5'; $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"; header('location:'.$url); ?>
\phpcms\modules\member\index.php and add
Note: The registration status output $status, you can return error information according to Error message modification parameter content
The user name and password are simply distinguished and modified according to the actual situation. The email address is a required field, so just put one in it.
<?php public function wechat() { $this->_session_start(); //獲取用戶(hù)siteid $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1; //定義站點(diǎn)id常量 if (!defined('SITEID')) { define('SITEID', $siteid); } //加載用戶(hù)模塊配置 //加載用戶(hù)模塊配置 $member_setting = getcache('member_setting'); if(!$member_setting['allowregister']) { showmessage(L('deny_register'), '/login.html'); } /*----------------------微信獲取用戶(hù)信息------------------------*/ //換成自己的接口信息 $code = $_GET['code']; $state = $_GET['state']; $appid = 'xxxxxxxx'; $appsecret = 'xxxxxxxx'; if (empty($code)) $this->error('授權(quán)失敗'); $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code'; $token = json_decode(file_get_contents($token_url)); if (isset($token->errcode)) { showmessage(L('<br/><h2>錯(cuò)誤信息:</h2>'.$token->errmsg), HTTP_REFERER); exit; } $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token; //轉(zhuǎn)成對(duì)象 $access_token = json_decode(file_get_contents($access_token_url)); if (isset($access_token->errcode)) { showmessage(L('<br/><h2>錯(cuò)誤信息:</h2>'.$access_token->errmsg), HTTP_REFERER); exit; } $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN'; //轉(zhuǎn)成對(duì)象 $user_info = json_decode(file_get_contents($user_info_url)); if (isset($user_info->errcode)) { showmessage(L( '<br/><h2>錯(cuò)誤信息:</h2>'.$user_info->errmsg), HTTP_REFERER); exit; } $rs = json_decode(json_encode($user_info),true);//轉(zhuǎn)換成數(shù)組 /*------------------------獲取用戶(hù)信息代碼結(jié)束-----------------------*/ header("Cache-control: private"); $checkname = trim($rs['nickname'])."_".substr(md5($rs['unionid']),0,5) ; $this->_init_phpsso(); $cstatus = $this->client->ps_checkname($checkname); //如果存在用戶(hù) 用戶(hù)登陸 if($cstatus == -4 || $cstatus == -1) { $username = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ; $password = substr(md5($rs['unionid']),0,10); //is_password($_POST['password']) && is_badword($_POST['password'])==false ? trim($_POST['password']) : showmessage(L('password_format_incorrect'), HTTP_REFERER); $cookietime = intval($_POST['cookietime']); $synloginstr = ''; //同步登陸js代碼 if(pc_base::load_config('system', 'phpsso')) { $this->_init_phpsso(); $status = $this->client->ps_member_login($username, $password); $memberinfo = unserialize($status); if(isset($memberinfo['uid'])) { //查詢(xún)帳號(hào) $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid'])); if(!$r) { //插入會(huì)員詳細(xì)信息,會(huì)員不存在 插入會(huì)員 $info = array( 'phpssouid'=>$memberinfo['uid'], 'username'=>$memberinfo['username'], 'password'=>$memberinfo['password'], 'encrypt'=>$memberinfo['random'], 'email'=>$memberinfo['email'], 'regip'=>$memberinfo['regip'], 'regdate'=>$memberinfo['regdate'], 'lastip'=>$memberinfo['lastip'], 'lastdate'=>$memberinfo['lastdate'], 'groupid'=>$this->_get_usergroup_bypoint(), //會(huì)員默認(rèn)組 'modelid'=>10, //普通會(huì)員 ); //如果是connect用戶(hù) if(!empty($_SESSION['connectid'])) { $userinfo['connectid'] = $_SESSION['connectid']; } if(!empty($_SESSION['from'])) { $userinfo['from'] = $_SESSION['from']; } unset($_SESSION['connectid'], $_SESSION['from']); $this->db->insert($info); unset($info); $r = $this->db->get_one(array('phpssouid'=>$memberinfo['uid'])); } $password = $r['password']; $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']); } else { if($status == -1) { //用戶(hù)不存在 showmessage(L('user_not_exist'), '/login.html'); } elseif($status == -2) { //密碼錯(cuò)誤 showmessage(L('password_error'), '/login.html'); } else { showmessage(L('login_failure'), '/login.html'); } } } else { //密碼錯(cuò)誤剩余重試次數(shù) $this->times_db = pc_base::load_model('times_model'); $rtime = $this->times_db->get_one(array('username'=>$username)); if($rtime['times'] > 4) { $minute = 60 - floor((SYS_TIME - $rtime['logintime']) / 60); showmessage(L('wait_1_hour', array('minute'=>$minute))); } //查詢(xún)帳號(hào) $r = $this->db->get_one(array('username'=>$username)); if(!$r) showmessage(L('user_not_exist'),'/login.html'); //驗(yàn)證用戶(hù)密碼 $password = md5(md5(trim($password)).$r['encrypt']); if($r['password'] != $password) { $ip = ip(); if($rtime && $rtime['times'] < 5) { $times = 5 - intval($rtime['times']); $this->times_db->update(array('ip'=>$ip, 'times'=>'+=1'), array('username'=>$username)); } else { $this->times_db->insert(array('username'=>$username, 'ip'=>$ip, 'logintime'=>SYS_TIME, 'times'=>1)); $times = 5; } showmessage(L('password_error', array('times'=>$times)), '/login.html', 3000); } $this->times_db->delete(array('username'=>$username)); } //如果用戶(hù)被鎖定 if($r['islock']) { showmessage(L('user_is_lock')); } $userid = $r['userid']; $groupid = $r['groupid']; $username = $r['username']; $nickname = empty($r['nickname']) ? $username : $r['nickname']; $updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME); //vip過(guò)期,更新vip和會(huì)員組 if($r['overduedate'] < SYS_TIME) { $updatearr['vip'] = 0; } //檢查用戶(hù)積分,更新新用戶(hù)組,除去郵箱認(rèn)證、禁止訪問(wèn)、游客組用戶(hù)、vip用戶(hù),如果該用戶(hù)組不允許自助升級(jí)則不進(jìn)行該操作 if($r['point'] >= 0 && !in_array($r['groupid'], array('1', '7', '8')) && empty($r[vip])) { $grouplist = getcache('grouplist'); if(!empty($grouplist[$r['groupid']]['allowupgrade'])) { $check_groupid = $this->_get_usergroup_bypoint($r['point']); if($check_groupid != $r['groupid']) { $updatearr['groupid'] = $groupid = $check_groupid; } } } //如果是connect用戶(hù) if(!empty($_SESSION['connectid'])) { $updatearr['connectid'] = $_SESSION['connectid']; } if(!empty($_SESSION['from'])) { $updatearr['from'] = $_SESSION['from']; } unset($_SESSION['connectid'], $_SESSION['from']); $this->db->update($updatearr, array('userid'=>$userid)); if(!isset($cookietime)) { $get_cookietime = param::get_cookie('cookietime'); } $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0; $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login')); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $username, $cookietime); param::set_cookie('_groupid', $groupid, $cookietime); param::set_cookie('_nickname', $nickname, $cookietime); //print_r($_COOKIE); //exit; //param::set_cookie('cookietime', $_cookietime, $cookietime); //https 與 http 傳遞用戶(hù)名 跨域跳轉(zhuǎn)cooike $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index'; $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']; header("Location: ".$url.""); } //如果不存在用戶(hù)注冊(cè) $userinfo = array(); $userinfo['encrypt'] = create_randomstr(6); $userinfo['username'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ; $userinfo['nickname'] = $rs['nickname']."_".substr(md5($rs['unionid']),0,5) ; $userinfo['email'] = time().'@yangpeili.com'; $userinfo['password'] = substr(md5($rs['unionid']),0,10); $userinfo['modelid'] = isset($_POST['modelid']) ? intval($_POST['modelid']) : 10; $userinfo['regip'] = ip(); $userinfo['point'] = $member_setting['defualtpoint'] ? $member_setting['defualtpoint'] : 0; $userinfo['amount'] = $member_setting['defualtamount'] ? $member_setting['defualtamount'] : 0; $userinfo['regdate'] = $userinfo['lastdate'] = SYS_TIME; $userinfo['siteid'] = $siteid; $userinfo['connectid'] = isset($_SESSION['connectid']) ? $_SESSION['connectid'] : ''; $userinfo['from'] = isset($_SESSION['from']) ? $_SESSION['from'] : ''; //手機(jī)強(qiáng)制驗(yàn)證 //附表信息驗(yàn)證 通過(guò)模型獲取會(huì)員信息 if($member_setting['choosemodel']) { require_once CACHE_MODEL_PATH.'member_input.class.php'; require_once CACHE_MODEL_PATH.'member_update.class.php'; $member_input = new member_input($userinfo['modelid']); $_POST['info'] = array_map('new_html_special_chars',$_POST['info']); $user_model_info = $member_input->get($_POST['info']); } if(pc_base::load_config('system', 'phpsso')) { $this->_init_phpsso(); $status = $this->client->ps_member_register($userinfo['username'], $userinfo['password'], $userinfo['email'], $userinfo['regip'], $userinfo['encrypt']); echo $status; if($status > 0) { $userinfo['phpssouid'] = $status; //傳入phpsso為明文密碼,加密后存入phpcms_v9 $password = $userinfo['password']; $userinfo['password'] = password($userinfo['password'], $userinfo['encrypt']); $userid = $this->db->insert($userinfo, 1); if($member_setting['choosemodel']) { //如果開(kāi)啟選擇模型 $user_model_info['userid'] = $userid; //插入會(huì)員模型數(shù)據(jù) $this->db->set_model($userinfo['modelid']); $this->db->insert($user_model_info); } if($userid > 0) { //執(zhí)行登陸操作 if(!$cookietime) $get_cookietime = param::get_cookie('cookietime'); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0); $cookietime = $_cookietime ? TIME + $_cookietime : 0; if($userinfo['groupid'] == 7) { param::set_cookie('_username', $userinfo['username'], $cookietime); param::set_cookie('email', $userinfo['email'], $cookietime); } else { $phpcms_auth = sys_auth($userid."\t".$userinfo['password'], 'ENCODE', get_auth_key('login')); //$this->db->update(array('groupid'=> "6"), array('userid'=>$userid)); $sql = "UPDATE `v9_member` SET `groupid`='6' WHERE `userid` = $userid ";//修改用戶(hù)級(jí)別為注冊(cè)用戶(hù) mysql_query($sql); param::set_cookie('auth', $phpcms_auth, $cookietime); param::set_cookie('_userid', $userid, $cookietime); param::set_cookie('_username', $userinfo['username'], $cookietime); param::set_cookie('_nickname', $userinfo['nickname'], $cookietime); param::set_cookie('_groupid', $userinfo['groupid'], $cookietime); param::set_cookie('cookietime', $_cookietime, $cookietime); $forward = isset($_POST['forward']) && !empty($_POST['forward']) ? urldecode($_POST['forward']) : 'index.php?m=member&c=index'; //https 與 http 傳遞用戶(hù)名 跨域跳轉(zhuǎn)cooike $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']; header("Location: ".$url.""); } } } } else { showmessage(L('enable_register').L('enable_phpsso'), '/login.html'); } showmessage(L('operation_failure'), HTTP_REFERER); } ?>
Additional last step
is very important, and it is also the easiest to ignore! ! !
Several people are stuck here!
You need to determine whether the user is logged in through the wechat function around line 21 of the phpcms\modules\member\classes\foreground.class.php file
PHP Chinese website , a large number of free PHPCMS tutorials, welcome to learn online!
The above is the detailed content of How to implement WeChat login in phpcms. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The login portal for the Douyin web version is https://www.douyin.com/. The login steps include: 1. Open the browser; 2. Enter the URL https://www.douyin.com/; 3. Click the "Login" button and select the login method; 4. Enter the account password; 5. Complete login. The web version provides functions such as browsing, searching, interaction, uploading videos and personal homepage management, and has advantages such as large-screen experience, multi-tasking, convenient account management and data statistics.

Binance C2C transactions allow users to buy and sell cryptocurrencies directly, and pay attention to the risks of counterparty, payment and price fluctuations. Choosing high-credit users and secure payment methods can reduce risks.

Copying comics is undoubtedly a treasure that cannot be missed. Here you can find basketball comics in various styles, from passionate and inspiring competitive stories to relaxed and humorous daily comedy. Whether you want to relive the classics or discover new works, copying comics can meet your needs. Through the authentic online reading portal provided by copy comics, you will bid farewell to the trouble of pirated resources, enjoy a high-definition and smooth reading experience, and can support your favorite comic authors and contribute to the development of authentic comics.

Choosing UC browser or QQ browser depends on your needs: 1. UC browser is suitable for users who pursue fast loading and rich entertainment functions; 2. QQ browser is suitable for users who need stability and seamless connection with Tencent products.

Combining the latest industry trends and multi-dimensional evaluation data in 2025, the following are the top ten comprehensive AI writing software recommendations, covering mainstream scenarios such as general creation, academic research, and commercial marketing, while taking into account Chinese optimization and localization services:

Nice Comics, an immersive reading experience platform dedicated to creating for comic lovers, brings together a large number of high-quality comic resources at home and abroad. It is not only a comic reading platform, but also a community that connects comic artists and readers and shares comic culture. Through simple and intuitive interface design and powerful search functions, NES Comics allows you to easily find your favorite works and enjoy a smooth and comfortable reading experience. Say goodbye to the long waiting and tedious operations, enter the world of Nice comics immediately and start your comic journey!

Frogman Comics has become the first choice for many comic lovers with its rich and diverse comic resources and convenient and smooth online reading experience. It is like a vibrant pond, with fresh and interesting stories constantly emerging, waiting for you to discover and explore. Frog Man comics cover a variety of subjects, from passionate adventures to sweet love, from fantasy and science fiction to suspense reasoning, no matter which genre you like, you can find your favorite works here. Its simple and intuitive interface design allows you to easily get started, quickly find the comics you want to read, and immerse yourself in the exciting comic world.

Here, you can enjoy the vast ocean of comics and explore works of various themes and styles, from passionate young man comics to delicate and moving girl comics, from suspenseful and brain-burning mystery comics to relaxed and funny daily comics, there is everything, and there is always one that can touch your heartstrings. We not only have a large amount of genuine comic resources, but also constantly introduce and update the latest works to ensure that you can read your favorite comics as soon as possible.
