微信小程序授權一般可以獲取用戶的openid、昵稱、頭像、用戶所在省和市、性別
①、首先引導用戶點擊授權按鈕
<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">點擊授權</button>
②、然后編寫bindGetUserInfo函數:
bindGetUserInfo(res) { console.log(res); if (res.detail.userInfo) { console.log("點擊了同意授權"); } else { console.log("點擊了拒絕授權"); } }
③、此時會出現一個彈出框,
④、點擊允許會返回用戶除了openid以外的基本信息:
⑤、接着是獲取用戶openid,需要用到微信的wx.login函數
bindGetUserInfo(res) { let info = res; if (info.detail.userInfo) { console.log("點擊了同意授權"); wx.login({ success: function (res) { console.log(res); } }) } else { console.log("點擊了拒絕授權"); }
此時為微信會返回一個臨時登錄憑證code,只有獲取了這個code才能進一步獲取openid 和session_key
⑦、請求服務端后台,讓后台請求微信再返回openid和session_key,再用微信的本地緩存保存用戶的基本信息
官方文檔建議:會話密鑰session_key 是對用戶數據進行加密簽名的密鑰。為了應用自身的數據安全,開發者服務器不應該把會話密鑰下發到小程序,也不應該對外提供這個密鑰
請求前端代碼:
bindGetUserInfo(res) { let info = res; console.log(info); if (info.detail.userInfo) { console.log("點擊了同意授權"); wx.login({ success: function (res) { if (res.code) { wx.request({ url: 'http://www.test.com/test', data: { code: res.code, nickName: info.detail.userInfo.nickName, city: info.detail.userInfo.city, province: info.detail.userInfo.province, avatarUrl: info.detail.userInfo.avatarUrl }, header: { 'content-type': 'application/json' // 默認值 }, success: function (res) { var userinfo = {}; userinfo['id']=res.data.id; userinfo['nickName'] = info.detail.userInfo.nickName; userinfo['avatarUrl'] = info.detail.userInfo.avatarUrl; wx.setStorageSync('userinfo', userinfo); } }) } else { console.log("授權失敗"); } }, }) } else { console.log("點擊了拒絕授權"); } }
請求后台代碼
public static $appid='你的appid'; public static $secret='你的密鑰'; public function test() { $params=Request::instance()->param(); $url="https://api.weixin.qq.com/sns/jscode2session?appid=".self::$appid."&secret=".self::$secret."&js_code=".$params['code']."&grant_type=authorization_code"; $data=$this->doCurl($url); $info['openid']=$data->openid; //獲取到用戶的openid $info['avatar']=$params['avatarUrl']; $info['province']=$params['province']; $info['city']=$params['city']; $info['nickName']=$params['nickName']; return json(['status'=>1]); } public function doCurl($url) { $curl = curl_init(); // 使用curl_setopt()設置要獲取的URL地址 curl_setopt($curl, CURLOPT_URL, $url); // 設置是否輸出header curl_setopt($curl, CURLOPT_HEADER, false); // 設置是否輸出結果 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 設置是否檢查服務器端的證書 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 使用curl_exec()將CURL返回的結果轉換成正常數據並保存到一個變量 $data = curl_exec($curl); // 使用 curl_close() 關閉CURL會話 curl_close($curl); return json_decode($data); }