찾다
CMS 튜토리얼PHPCMSphpcms에서 WeChat 로그인을 구현하는 방법

phpcms에서 Wechat 로그인을 구현하는 방법: 1. 루트 디렉터리에 새 "wechat.php"를 만듭니다. 2. "phpcmsmodulesmemberindex.php" 아래에 "public function wechat() {...}"를 추가합니다. "foreground.class.php" 파일을 통해 사용자가 wechat 기능을 통해 로그인했는지 여부를 확인합니다.

phpcms에서 WeChat 로그인을 구현하는 방법

이 튜토리얼의 운영 환경: Windows 10 시스템, phpcms v9 버전, DELL G3 컴퓨터

phpcms에서 WeChat 로그인을 구현하는 방법은 무엇입니까?

phpcms는 Wechat 로그인을 구현합니다(등록 필요 없음, 직접 입금)

아이디어: 콜백 매개변수, 직접 등록(코드가 충분히 표준화되지 않았으므로 직접 구성)

루트 디렉터리에 새 wechat.php 만들기

방문: http://www .xxxxxx.cn/wechat.php

콜백 주소에 주의하세요

phpcms는 WeChat 로그인을 구현합니다(등록 필요 없음, 직접 입금)

wechat.php

<?php
if(!empty( $_GET[&#39;code&#39;]) && !empty( $_GET[&#39;state&#39;])){
    $code = $_GET[&#39;code&#39;];
    $state = $_GET[&#39;state&#39;];
    $url = "http://www.xxxxxx.cn/index.php?m=member&c=index&a=wechat&code=$code&state=$state";
    header(&#39;location:&#39;.$url);
    exit;
}
$appid = &#39;wx5a3878682fa32bd5&#39;;
$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(&#39;location:&#39;.$url);
?>

phpcmsmodulesmemberindex.php 추가됨

참고: 등록 상태는 $status를 출력하며, 오류 메시지를 반환하고 오류 메시지에 따라 매개변수 내용을 수정할 수 있습니다.

사용자 이름과 비밀번호는 단순히 구분하여 실제 상황에 맞게 수정합니다. 이메일 주소는 필수 항목입니다. , 그러니 하나만 넣으세요.

<?php
public function wechat() {
        $this->_session_start();
        //获取用户siteid
        $siteid = isset($_REQUEST[&#39;siteid&#39;]) && trim($_REQUEST[&#39;siteid&#39;]) ? intval($_REQUEST[&#39;siteid&#39;]) : 1;
        //定义站点id常量
        if (!defined(&#39;SITEID&#39;)) {
           define(&#39;SITEID&#39;, $siteid);
        }
        //加载用户模块配置
        //加载用户模块配置
        $member_setting = getcache(&#39;member_setting&#39;);
        if(!$member_setting[&#39;allowregister&#39;]) {
            showmessage(L(&#39;deny_register&#39;), &#39;/login.html&#39;);
        }
        /*----------------------微信获取用户信息------------------------*/
        //换成自己的接口信息
        $code = $_GET[&#39;code&#39;];
        $state = $_GET[&#39;state&#39;];
        $appid = &#39;xxxxxxxx&#39;;
        $appsecret = &#39;xxxxxxxx&#39;;
        if (empty($code)) $this->error(&#39;授权失败&#39;);
        $token_url = &#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$appid.&#39;&secret=&#39;.$appsecret.&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;
        $token = json_decode(file_get_contents($token_url));
        if (isset($token->errcode)) {
            showmessage(L(&#39;<br/><h2 id="错误信息">错误信息:</h2>&#39;.$token->errmsg), HTTP_REFERER);
            exit;
        }
        $access_token_url = &#39;https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=&#39;.$appid.&#39;&grant_type=refresh_token&refresh_token=&#39;.$token->refresh_token;
        //转成对象
        $access_token = json_decode(file_get_contents($access_token_url));
        if (isset($access_token->errcode)) {
            showmessage(L(&#39;<br/><h2 id="错误信息">错误信息:</h2>&#39;.$access_token->errmsg), HTTP_REFERER);
            exit;
        }
        $user_info_url = &#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;.$access_token->access_token.&#39;&openid=&#39;.$access_token->openid.&#39;&lang=zh_CN&#39;;
        //转成对象
        $user_info = json_decode(file_get_contents($user_info_url));
        if (isset($user_info->errcode)) {
            showmessage(L( &#39;<br/><h2 id="错误信息">错误信息:</h2>&#39;.$user_info->errmsg), HTTP_REFERER);
            exit;
        }
        $rs =  json_decode(json_encode($user_info),true);//转换成数组
        /*------------------------获取用户信息代码结束-----------------------*/
        header("Cache-control: private");
        $checkname = trim($rs[&#39;nickname&#39;])."_".substr(md5($rs[&#39;unionid&#39;]),0,5) ;
        $this->_init_phpsso();
        $cstatus = $this->client->ps_checkname($checkname);
        //如果存在用户 用户登陆   
        if($cstatus == -4 || $cstatus == -1) {
            $username = $rs[&#39;nickname&#39;]."_".substr(md5($rs[&#39;unionid&#39;]),0,5) ;
            $password = substr(md5($rs[&#39;unionid&#39;]),0,10);
            //is_password($_POST[&#39;password&#39;]) && is_badword($_POST[&#39;password&#39;])==false ? trim($_POST[&#39;password&#39;]) : showmessage(L(&#39;password_format_incorrect&#39;), HTTP_REFERER);
            $cookietime = intval($_POST[&#39;cookietime&#39;]);
            $synloginstr = &#39;&#39;; //同步登陆js代码
            if(pc_base::load_config(&#39;system&#39;, &#39;phpsso&#39;)) {
                $this->_init_phpsso();
                $status = $this->client->ps_member_login($username, $password);
                $memberinfo = unserialize($status);
                if(isset($memberinfo[&#39;uid&#39;])) {
                    //查询帐号
                    $r = $this->db->get_one(array(&#39;phpssouid&#39;=>$memberinfo[&#39;uid&#39;]));
                    if(!$r) {
                        //插入会员详细信息,会员不存在 插入会员
                        $info = array(
                                    &#39;phpssouid&#39;=>$memberinfo[&#39;uid&#39;],
                                    &#39;username&#39;=>$memberinfo[&#39;username&#39;],
                                    &#39;password&#39;=>$memberinfo[&#39;password&#39;],
                                    &#39;encrypt&#39;=>$memberinfo[&#39;random&#39;],
                                    &#39;email&#39;=>$memberinfo[&#39;email&#39;],
                                    &#39;regip&#39;=>$memberinfo[&#39;regip&#39;],
                                    &#39;regdate&#39;=>$memberinfo[&#39;regdate&#39;],
                                    &#39;lastip&#39;=>$memberinfo[&#39;lastip&#39;],
                                    &#39;lastdate&#39;=>$memberinfo[&#39;lastdate&#39;],
                                    &#39;groupid&#39;=>$this->_get_usergroup_bypoint(),    //会员默认组
                                    &#39;modelid&#39;=>10,  //普通会员
                                    );
                        //如果是connect用户
                        if(!empty($_SESSION[&#39;connectid&#39;])) {
                            $userinfo[&#39;connectid&#39;] = $_SESSION[&#39;connectid&#39;];
                        }
                        if(!empty($_SESSION[&#39;from&#39;])) {
                            $userinfo[&#39;from&#39;] = $_SESSION[&#39;from&#39;];
                        }
                        unset($_SESSION[&#39;connectid&#39;], $_SESSION[&#39;from&#39;]);
                        $this->db->insert($info);
                        unset($info);
                        $r = $this->db->get_one(array(&#39;phpssouid&#39;=>$memberinfo[&#39;uid&#39;]));
                    }
                    $password = $r[&#39;password&#39;];
                    $synloginstr = $this->client->ps_member_synlogin($r[&#39;phpssouid&#39;]);
                } else {
                    if($status == -1) {    //用户不存在
                        showmessage(L(&#39;user_not_exist&#39;), &#39;/login.html&#39;);
                    } elseif($status == -2) { //密码错误
                        showmessage(L(&#39;password_error&#39;), &#39;/login.html&#39;);
                    } else {
                        showmessage(L(&#39;login_failure&#39;), &#39;/login.html&#39;);
                    }
                }
            } else {
                //密码错误剩余重试次数
                $this->times_db = pc_base::load_model(&#39;times_model&#39;);
                $rtime = $this->times_db->get_one(array(&#39;username&#39;=>$username));
                if($rtime[&#39;times&#39;] > 4) {
                    $minute = 60 - floor((SYS_TIME - $rtime[&#39;logintime&#39;]) / 60);
                    showmessage(L(&#39;wait_1_hour&#39;, array(&#39;minute&#39;=>$minute)));
                }
                //查询帐号
                $r = $this->db->get_one(array(&#39;username&#39;=>$username));
                if(!$r) showmessage(L(&#39;user_not_exist&#39;),&#39;/login.html&#39;);
                //验证用户密码
                $password = md5(md5(trim($password)).$r[&#39;encrypt&#39;]);
                if($r[&#39;password&#39;] != $password) {                
                    $ip = ip();
                    if($rtime && $rtime[&#39;times&#39;] < 5) {
                        $times = 5 - intval($rtime[&#39;times&#39;]);
                        $this->times_db->update(array(&#39;ip&#39;=>$ip, &#39;times&#39;=>&#39;+=1&#39;), array(&#39;username&#39;=>$username));
                    } else {
                        $this->times_db->insert(array(&#39;username&#39;=>$username, &#39;ip&#39;=>$ip, &#39;logintime&#39;=>SYS_TIME, &#39;times&#39;=>1));
                        $times = 5;
                    }
                    showmessage(L(&#39;password_error&#39;, array(&#39;times&#39;=>$times)), &#39;/login.html&#39;, 3000);
                }
                $this->times_db->delete(array(&#39;username&#39;=>$username));
            }
            //如果用户被锁定
            if($r[&#39;islock&#39;]) {
                showmessage(L(&#39;user_is_lock&#39;));
            }
            $userid = $r[&#39;userid&#39;];
            $groupid = $r[&#39;groupid&#39;];
            $username = $r[&#39;username&#39;];
            $nickname = empty($r[&#39;nickname&#39;]) ? $username : $r[&#39;nickname&#39;];
            $updatearr = array(&#39;lastip&#39;=>ip(), &#39;lastdate&#39;=>SYS_TIME);
            //vip过期,更新vip和会员组
            if($r[&#39;overduedate&#39;] < SYS_TIME) {
                $updatearr[&#39;vip&#39;] = 0;
            }       
            //检查用户积分,更新新用户组,除去邮箱认证、禁止访问、游客组用户、vip用户,如果该用户组不允许自助升级则不进行该操作        
            if($r[&#39;point&#39;] >= 0 && !in_array($r[&#39;groupid&#39;], array(&#39;1&#39;, &#39;7&#39;, &#39;8&#39;)) && empty($r[vip])) {
                $grouplist = getcache(&#39;grouplist&#39;);
                if(!empty($grouplist[$r[&#39;groupid&#39;]][&#39;allowupgrade&#39;])) {   
                    $check_groupid = $this->_get_usergroup_bypoint($r[&#39;point&#39;]);
                    if($check_groupid != $r[&#39;groupid&#39;]) {
                        $updatearr[&#39;groupid&#39;] = $groupid = $check_groupid;
                    }
                }
            }
            //如果是connect用户
            if(!empty($_SESSION[&#39;connectid&#39;])) {
                $updatearr[&#39;connectid&#39;] = $_SESSION[&#39;connectid&#39;];
            }
            if(!empty($_SESSION[&#39;from&#39;])) {
                $updatearr[&#39;from&#39;] = $_SESSION[&#39;from&#39;];
            }
            unset($_SESSION[&#39;connectid&#39;], $_SESSION[&#39;from&#39;]);
            $this->db->update($updatearr, array(&#39;userid&#39;=>$userid));
            if(!isset($cookietime)) {
                $get_cookietime = param::get_cookie(&#39;cookietime&#39;);
            }
            $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
            $cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;
            $phpcms_auth = sys_auth($userid."\t".$password, &#39;ENCODE&#39;, get_auth_key(&#39;login&#39;));
            param::set_cookie(&#39;auth&#39;, $phpcms_auth, $cookietime);
            param::set_cookie(&#39;_userid&#39;, $userid, $cookietime);
            param::set_cookie(&#39;_username&#39;, $username, $cookietime);
            param::set_cookie(&#39;_groupid&#39;, $groupid, $cookietime);
            param::set_cookie(&#39;_nickname&#39;, $nickname, $cookietime);
            //print_r($_COOKIE);
            //exit;
            //param::set_cookie(&#39;cookietime&#39;, $_cookietime, $cookietime); 
            //https 与 http 传递用户名   跨域跳转cooike
            $forward = isset($_POST[&#39;forward&#39;]) && !empty($_POST[&#39;forward&#39;]) ? urldecode($_POST[&#39;forward&#39;]) : &#39;index.php?m=member&c=index&#39;;
            $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE[&#39;vuGYB__nickname&#39;]."&username=".$_COOKIE[&#39;vuGYB__username&#39;]."&userid=".$_COOKIE[&#39;vuGYB__userid&#39;]."&groupid=".$_COOKIE[&#39;vuGYB__groupid&#39;];
            header("Location: ".$url.""); 
        } 
        //如果不存在用户注册
            $userinfo = array();
            $userinfo[&#39;encrypt&#39;] = create_randomstr(6);
            $userinfo[&#39;username&#39;] = $rs[&#39;nickname&#39;]."_".substr(md5($rs[&#39;unionid&#39;]),0,5) ;
            $userinfo[&#39;nickname&#39;] = $rs[&#39;nickname&#39;]."_".substr(md5($rs[&#39;unionid&#39;]),0,5) ;
            $userinfo[&#39;email&#39;] = time().&#39;@yangpeili.com&#39;;
            $userinfo[&#39;password&#39;] = substr(md5($rs[&#39;unionid&#39;]),0,10);
            $userinfo[&#39;modelid&#39;] = isset($_POST[&#39;modelid&#39;]) ? intval($_POST[&#39;modelid&#39;]) : 10;
            $userinfo[&#39;regip&#39;] = ip();
            $userinfo[&#39;point&#39;] = $member_setting[&#39;defualtpoint&#39;] ? $member_setting[&#39;defualtpoint&#39;] : 0;
            $userinfo[&#39;amount&#39;] = $member_setting[&#39;defualtamount&#39;] ? $member_setting[&#39;defualtamount&#39;] : 0;
            $userinfo[&#39;regdate&#39;] = $userinfo[&#39;lastdate&#39;] = SYS_TIME;
            $userinfo[&#39;siteid&#39;] = $siteid;
            $userinfo[&#39;connectid&#39;] = isset($_SESSION[&#39;connectid&#39;]) ? $_SESSION[&#39;connectid&#39;] : &#39;&#39;;
            $userinfo[&#39;from&#39;] = isset($_SESSION[&#39;from&#39;]) ? $_SESSION[&#39;from&#39;] : &#39;&#39;;
            //手机强制验证
            //附表信息验证 通过模型获取会员信息
            if($member_setting[&#39;choosemodel&#39;]) {
                require_once CACHE_MODEL_PATH.&#39;member_input.class.php&#39;;
                require_once CACHE_MODEL_PATH.&#39;member_update.class.php&#39;;
                $member_input = new member_input($userinfo[&#39;modelid&#39;]);     
                $_POST[&#39;info&#39;] = array_map(&#39;new_html_special_chars&#39;,$_POST[&#39;info&#39;]);
                $user_model_info = $member_input->get($_POST[&#39;info&#39;]);                                       
            }
            if(pc_base::load_config(&#39;system&#39;, &#39;phpsso&#39;)) {
                $this->_init_phpsso();
                $status = $this->client->ps_member_register($userinfo[&#39;username&#39;], $userinfo[&#39;password&#39;], $userinfo[&#39;email&#39;], $userinfo[&#39;regip&#39;], $userinfo[&#39;encrypt&#39;]);
                echo $status;
                if($status > 0) {
                    $userinfo[&#39;phpssouid&#39;] = $status;
                    //传入phpsso为明文密码,加密后存入phpcms_v9
                    $password = $userinfo[&#39;password&#39;];
                    $userinfo[&#39;password&#39;] = password($userinfo[&#39;password&#39;], $userinfo[&#39;encrypt&#39;]); 
                    $userid = $this->db->insert($userinfo, 1);
                    if($member_setting[&#39;choosemodel&#39;]) {   //如果开启选择模型
                        $user_model_info[&#39;userid&#39;] = $userid;
                        //插入会员模型数据
                        $this->db->set_model($userinfo[&#39;modelid&#39;]);
                        $this->db->insert($user_model_info);
                    }
                    if($userid > 0) {
                        //执行登陆操作
                        if(!$cookietime) $get_cookietime = param::get_cookie(&#39;cookietime&#39;);
                        $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
                        $cookietime = $_cookietime ? TIME + $_cookietime : 0;
                        if($userinfo[&#39;groupid&#39;] == 7) {
                            param::set_cookie(&#39;_username&#39;, $userinfo[&#39;username&#39;], $cookietime);
                            param::set_cookie(&#39;email&#39;, $userinfo[&#39;email&#39;], $cookietime);                           
                        } else {
                            $phpcms_auth = sys_auth($userid."\t".$userinfo[&#39;password&#39;], &#39;ENCODE&#39;, get_auth_key(&#39;login&#39;));
                            //$this->db->update(array(&#39;groupid&#39;=> "6"), array(&#39;userid&#39;=>$userid));
                            $sql = "UPDATE `v9_member` SET `groupid`=&#39;6&#39; WHERE `userid` = $userid ";//修改用户级别为注册用户
                            mysql_query($sql);
                            param::set_cookie(&#39;auth&#39;, $phpcms_auth, $cookietime);
                            param::set_cookie(&#39;_userid&#39;, $userid, $cookietime);
                            param::set_cookie(&#39;_username&#39;, $userinfo[&#39;username&#39;], $cookietime);
                            param::set_cookie(&#39;_nickname&#39;, $userinfo[&#39;nickname&#39;], $cookietime);
                            param::set_cookie(&#39;_groupid&#39;, $userinfo[&#39;groupid&#39;], $cookietime);
                            param::set_cookie(&#39;cookietime&#39;, $_cookietime, $cookietime);
                            $forward = isset($_POST[&#39;forward&#39;]) && !empty($_POST[&#39;forward&#39;]) ? urldecode($_POST[&#39;forward&#39;]) : &#39;index.php?m=member&c=index&#39;;
                            //https 与 http 传递用户名   跨域跳转cooike
                            $url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE[&#39;vuGYB__nickname&#39;]."&username=".$_COOKIE[&#39;vuGYB__username&#39;]."&userid=".$_COOKIE[&#39;vuGYB__userid&#39;]."&groupid=".$_COOKIE[&#39;vuGYB__groupid&#39;];
                            header("Location: ".$url.""); 
                        }
                    }
                }
            } else {
                showmessage(L(&#39;enable_register&#39;).L(&#39;enable_phpsso&#39;), &#39;/login.html&#39;);
            }
            showmessage(L(&#39;operation_failure&#39;), HTTP_REFERER);
        }
?>

마지막 단계를 추가했습니다

매우 중요하면서도 가장 무시하기 쉬운 부분이기도 합니다! ! !

여기에 몇몇 사람이 갇혀 있습니다!

사용자가 wechat 기능을 통해 로그인했는지 확인하려면 phpcmsmodulesmemberclassesforeground.class.php 파일의 21번째 줄이 필요합니다.

phpcms에서 WeChat 로그인을 구현하는 방법

PHP 중국어 웹사이트, 수많은 무료 PHPCMS 튜토리얼, 온라인 학습을 환영합니다!

위 내용은 phpcms에서 WeChat 로그인을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.