在使用微信公衆平臺進行第三方開發的過程中,我們經常會遇到需要調用微信頁面授權、從而獲取用戶信息。但是單一的使用微信頁面授權的方式進入頁面,總會存在跳轉到微信頁面進行授權的問題,這樣就會增加用戶進入頁面所費時間,從而影響用戶體驗。
所以我們需要一種方式,藉助其他機制等,不必要使得用戶每次均要跳轉到微信頁面授權位置。這樣在用戶不是第一次進入頁面的過程中,即可以不用跳轉微信頁面授權,從而減少用戶進入頁面時間,提升用戶體驗。
這樣的使用方式,可以藉助服務器session機制,利用if判斷,進行判斷。
示例代碼如下:
public function OAuth()
{
header('Content-type: text/html; charset=utf-8');
//首先獲取微信配置信息
$m_sssmall_conf_weixin = M('sssmall_conf_weixin');
$conf = $m_sssmall_conf_weixin->where('id=1')->find();
//將appid、appsecret設爲超全局變量,便於調用。
$appid = $conf['appid'];
$appsecret = $conf['appsecret'];
//$access_token = getApiToken();
dump($_SESSION['oauth']);
//條件判斷(假如session不存在,進行頁面授權,並設置session)
if (empty($_SESSION['oauth']) && empty($_GET['code'])) {
$redirect_uri = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; //此即爲本頁面地址
$redirect_uri = urlencode($redirect_uri);
$getCodeUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . $redirect_uri . '&response_type=code&scope=snsapi_userinfo&state=oauth#wechat_redirect';
redirect($getCodeUrl, 0);
} elseif (!empty($_GET['code']) && empty($_SESSION['oauth'])) {
$getAccesstokenUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $_GET['code'] . '&grant_type=authorization_code';
$res = WeChat_request($getAccesstokenUrl);
$openid = $res->openid;
$_SESSION['oauth'] = $openid;
dump($openid);
//獲取用戶信息存儲
} else {
dump('第二次進入');
dump($_SESSION['oauth']);
}
dump('看到我就證明成功啦');
}
此處對於頁面授權的重定向地址爲此頁面本身,重新進入頁面後會進行條件判斷,當openid信息已經存在使,即可不用在進行頁面授權,從而提升用戶體驗。