微信開發獲取使用者授權方式
阿新 • • 發佈:2019-01-26
1、引導使用者進入授權頁面同意授權,獲取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect2、通過code換取網頁授權access_token(與基礎支援中的access_token不同)
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
3、如果需要,開發者可以重新整理網頁授權access_token,避免過期
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
4、通過網頁授權access_token和openid獲取使用者基本資訊(支援UnionID機制)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN //這樣返回值有subscribe
/** * 根據access_token 和openid獲得使用者資訊 */ function get_user_info($accessToken,$openid){ //獲取使用者資訊 $url='https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$accessToken.'&openid='.$openid.'&lang=zh_CN'; $ret=https_request($url); $arr=json_decode($ret,true); return $arr; } /** * https請求(包含Get和post) * * @param string $url * @param unknown $data */ function https_request($url, $data = NULL) { if (! empty ( $url )) { // 初始化一個cURL $curl = curl_init (); // 對提取項的設定 // ssl版本的設定 curl_setopt ( $curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1 ); curl_setopt ( $curl, CURLOPT_URL, $url ); // 提取url地址 // 在不是bae sae環境下的整合環境下 要設定一下項(不驗證https證書、host) curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE ); // post方式傳遞資料 if (! empty ( $data )) { //interface_log ( "INFO", 0, "post方式傳遞資料" ); curl_setopt ( $curl, CURLOPT_POST, 1 ); // 如果你想PHP去做一個正規的HTTP POST,設定這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 型別,多數被HTML表單使用。 curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // 傳遞一個作為HTTP “POST”操作的所有資料的字串。 } // 使用php curl獲取頁面內容或提交資料, 有時候希望返回的內容作為變數儲存, 而不是直接輸出. // 這個時候就必需設定curl的CURLOPT_RETURNTRANSFER選項為1或true. curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); $output = curl_exec ( $curl ); // 提取資料 curl_close ( $curl ); return $output; } else { echo "INPUT URL IS NULL"; } }