1. 程式人生 > >微信開發獲取使用者授權方式

微信開發獲取使用者授權方式

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_redirect

2、通過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

//返回值無subscribe,就是不知道是否關注了微訊號。網頁授權獲取使用者資訊,官方用的這個方法。

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";
 	}
 }