>  기사  >  백엔드 개발  >  PHP는 WeChat 웹 페이지 인증 로그인을 구현합니다.

PHP는 WeChat 웹 페이지 인증 로그인을 구현합니다.

不言
不言원래의
2018-04-16 14:16:099728검색

이 글은 주로 WeChat 웹페이지 인증 로그인의 PHP 구현을 소개합니다. 이제는 모든 사람과 공유합니다. 필요한 친구는 이를 참조할 수 있습니다.

회사에서는 WeChat 인증이 필요합니다. tp3.2.

공식 개발 문서 주소

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN;

1. 브라우저를 식별하면 일반 브라우저가 로그인 페이지로 이동합니다. WeChat이 열리면 WeChat 웹페이지 인증 로그인이 시작됩니다. WeChat 사용자가 제3자 애플리케이션 인증을 허용하면 WeChat이 시작됩니다. 신청하거나 타사 웹사이트로 리디렉션하고 인증 임시 티켓 코드 매개변수를 가져옵니다.

2.코드 매개변수를 통해 AppID 및 AppSecret을 추가하고 API를 통해 access_token을 교환합니다. access_token을 통해 인터페이스 호출을 만들어 사용자의 기본 데이터 리소스를 얻거나 사용자가 기본 작업을 수행하도록 돕습니다.

<?php
namespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {
    /*
    * 自动执行
    */
    public function _initialize(){
        //判断是否在微信打开
        $ua = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
        //MicroMessenger 是android/iphone版微信所带的
        //Windows Phone 是winphone版微信带的  (这个标识会误伤winphone普通浏览器的访问)
        if(strpos($ua, &#39;MicroMessenger&#39;) == false && strpos($ua, &#39;Windows Phone&#39;) == false){
            //普通浏览器
            if(!$_SESSION[&#39;username&#39;]) {
                header(&#39;Location:xxx&#39;);
            }
        }else{  
            //微信浏览器
            $users = M(&#39;User&#39;);
            $appid = &#39;xxx&#39;;
            $secret = &#39;xxx&#39;;
            if(!$_SESSION[&#39;username&#39;]) {
                //微信网页授权
                $redirect_uri = urlencode (&#39;http://&#39;.$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;]);
                $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect";
                header("Location:".$url);
                $code = $_GET["code"];

                //第一步:取得openid
                $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
                $oauth2 = $this->getJson($oauth2Url);
                //第二步:根据全局access_token和openid查询用户信息
                $access_token = $oauth2["access_token"];
                $openid = $oauth2[&#39;openid&#39;];
                $get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
                $userinfo = $this->getJson($get_user_info_url);
                //save用户信息
                if($userinfo[&#39;openid&#39;]){
                    $username = $userinfo[&#39;openid&#39;];
                    $nickname = $userinfo[&#39;nickname&#39;];
                    $headimg = $userinfo[&#39;headimgurl&#39;];
                    $province = $userinfo[&#39;province&#39;];
                    $city = $userinfo[&#39;city&#39;];
                    $sex = $userinfo[&#39;sex&#39;];
                    $user = $users->where(array(&#39;username&#39; => $username))->find();
                    if ($user) {
                        $users->where(array(&#39;username&#39; => $username))->save(array(&#39;nickname&#39; => $nickname, &#39;avatar&#39; => $headimg, &#39;lasttime&#39; => time()));
                    }else{
                        $users->add(array(&#39;username&#39; => $username, &#39;nickname&#39; => $nickname, &#39;avatar&#39; => $headimg, &#39;province&#39; => $province, &#39;city&#39; => $city, &#39;gender&#39; => $sex, &#39;regtime&#39; => time(), &#39;lasttime&#39; => time()));
                        // $data = array(&#39;username&#39; => $username, &#39;nickname&#39; => $nickname, &#39;avatar&#39; => $headimg, &#39;province&#39; => $province, &#39;city&#39; => $city, &#39;gender&#39; => $sex, &#39;regtime&#39; => time(), &#39;lasttime&#39; => time());
                    }
                    $_SESSION[&#39;username&#39;] = $username;
                    if($user[&#39;tel&#39;] == NULL){
                        //如果用户手机号为空的话跳转到绑定手机号页面
                        header(&#39;Location:xxx&#39;); 
                    }
                }                
            }else{
                $user = D(&#39;User&#39;)->getUserInfo();  //getUserInfo()是model根据session(&#39;username&#39;)获取用户数据的方法
                if($user[&#39;tel&#39;] == NULL){
                    header(&#39;Location:xxx&#39;);
                }
            }

            //获取接口调用凭证access_token
            $accessurl = &#39;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&#39;.$appid.&#39;&secret=&#39;.$secret;
            $access_token = S(&#39;access_token&#39;);
            if(!$access_token){
                $access = $this->getJson($accessurl);
                if(!empty($access[&#39;access_token&#39;])){
                    S(&#39;access_token&#39;,$access[&#39;access_token&#39;],$access[&#39;expires_in&#39;]);
                }
            }
            //分享
            /*$share = new WechatShare($appid, $_SESSION[&#39;username&#39;]);
            $this->shareScript = $share->getSgin($access_token);
            $this->assign(&#39;shareScript&#39;, $this->shareScript);
            $this->assign(&#39;sharewechaid&#39;, $_SESSION[&#39;username&#39;]);
            if($_GET[&#39;sharewechaid&#39;]){
                $this->assign(&#39;getsharewechaid&#39;, $_GET[&#39;sharewechaid&#39;]);
            }*/ 
        }
    
}

    public function getJson($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }
}
<br/>
관련 권장 사항: php는 로그 기능을 구현합니다.

php는 장바구니 기능에 제품 추가를 구현합니다. (1)_php 예

php는 WeChat 템플릿 메시지를 구현합니다.

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

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