做過微信登入的都知道,我們需要一個識別來記錄用戶的身份的唯一性,在微信中unionId就是我們所需要的記錄唯一ID,那麼如何拿到unionId就成了關鍵,將項目分為小程式和後台PHP代碼兩部分來講。
先從我們的小程式碼開始
簡單的說一下我們小程式的js程式碼登入流程
login ->取得code ->getUserInfo取得iv和encryptedData ->傳給自己的伺服器處理->傳回給小程式結果
var API_URL = "自己的服务器地址"; Page({ onLoad: function () { console.log("iv"); wx.login({//login流程 success: function (res) {//登录成功 if (res.code) { var code = res.code; wx.getUserInfo({//getUserInfo流程 success: function (res2) {//获取userinfo成功 console.log(res2); var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码 var iv = res2.iv; //请求自己的服务器 Login(code,encryptedData,iv); } }) } else { console.log('获取用户登录态失败!' + res.errMsg) } } }); } })
IV:加密演算法的初始向量,encryptedData:加密過的字串。
把code iv encryptedData 傳遞給我們的伺服器
function Login(code,encryptedData,iv){ console.log('code='+code+'&encryptedData='+encryptedData+'&iv='+iv); //创建一个dialog wx.showToast({ title: '正在登录...', icon: 'loading', duration: 10000 }); //请求服务器 wx.request({ url: API_URL, data: { code:code, encryptedData:encryptedData, iv:iv }, method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT header: { 'content-type': 'application/json' }, // 设置请求的 header success: function (res) { // success wx.hideToast(); console.log('服务器返回'+res.data); }, fail: function () { // fail // wx.hideToast(); }, complete: function () { // complete } }) }
看文件的話,應該知道,我們所需要的unionId就在encryptedData中,所以伺服器需要這些資訊來把unionId解析出來。
伺服器處理邏輯
先下載微信的解密demo
這裡選擇的是PHP程式碼,把除了demo外的三個class文件,放入我們自己的項目,以後後面調用。
這裡講解伺服器的處理流程:
透過微信的介面取得seesionKey,然後透過sessionKey和iv來解密encryptedData資料取得UnionID。
/** * 登录 * * @return Response */ public function weixinlogin( $user_id=null ) { global $App_Error_Conf,$Gift_Ids,$Server_Http_Path,$Is_Local,$Test_User,$Good_Vcode,$WeiXin_Xd_Conf; $validator_result = input_validator(array('code','iv','encryptedData')); if(!empty($validator_result)){ return response($validator_result); } $js_code = $_REQUEST['code']; $encryptedData = $_REQUEST['encryptedData']; $iv = $_REQUEST['iv']; $appid = $WeiXin_Xd_Conf['appid']; $secret = $WeiXin_Xd_Conf['secret']; $grant_type = $WeiXin_Xd_Conf['grant_type']; //从微信获取session_key $user_info_url = $WeiXin_Xd_Conf['code2session_url']; $user_info_url = sprintf("%s?appid=%s&secret=%s&js_code=%s&grant_type=%",$user_info_url,$appid,$secret,$js_code,$grant_type); $weixin_user_data = json_decode(get_url($user_info_url)); $session_key = $weixin_user_data->session_key; //解密数据 $data = ''; $wxBizDataCrypt = new WXBizDataCrypt($appid, $session_key); $errCode=$wxBizDataCrypt>decryptData($appid,$session_key,$encryptedData, $iv, $data );
最後拿到的這個 data就是我們解密後的encryptedData裡面會包含unionId。
以上是微信小程式開發之登入流程製作說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!