您現在的位置是:首頁 > 微信公眾號

李清波 2019-08-15 微信公眾號 260

PHP實現微信登錄


登錄邏輯

1. 微信訪問網址

2. 第一次跳轉到獲取code方法

3. 第二次跳轉傳入code獲取openid,通過openid處理微信登錄

4. 跳到登錄成功頁面,或者綁定頁面

獲取code邏輯

1565853338177971.png

代碼

// 獲取code的
public function wechatLogin(){
    $code = input('code');
 
    // 如果cookie緩存里面已經保存著openid,則不會再次獲取新的openid
    if (empty($code)) {
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $url = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        header('Location:https://統一獲取code的域名/api/wechat/getCode/?url='.$url);
        exit;
    
    }else{
        // 防止刷新時導致重復帶入過期code導致獲取openid錯誤
        $options = array (
            'appid' => 'xxx', // 填寫高級調用功能的appid
            'appsecret' => 'xxx' // 填寫高級調用功能的密鑰
        );
        $wechat = new WechatApi($options);
        $result = $wechat->getOauthAccessToken($code);
        // access_token,expires_in,refresh_token,openid,scope
    }
}


上面跳轉獲取code的代碼

// 獲取code
public function getCode(){
    ob_start();
    $myurl = Request::param('url');
    $options = array (
        'token' => '', // 填寫你設定的key
        'appid' => '', // 填寫高級調用功能的appid
        'appsecret' => '' // 填寫高級調用功能的密鑰
    );

    $wechat = new WechatApi($options);
    $callback = 'https://域名/oauth.php?url= '.$myurl;
    $url = $wechat->getOauthRedirect($callback,$state='',$scope='snsapi_base');
    header("Location:".$url);
    exit;
}


oauth.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>授權頁面跳轉中</title>
</head>
<body>
<?php
    $url = $_GET['url'];
    $url = $url.'?code='.$_GET['code'];
    Header("Location: $url"); 
?>
</body>
</html>


這里有上面代碼所需要的類

點擊這里查看 WechatApi類


可以用微信打開以下地址查看演示

http://www.rnvazd.tw/apis/wechat/wechatlogin


評論