<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                獲取身份令牌 ![](https://img.kancloud.cn/8d/13/8d13dd63eabc5c7b40c8636882804e46_542x174.png) 訪問攜帶身份令牌(令牌有時間限制,失效再次獲取) ![](https://img.kancloud.cn/61/17/61171f51c39cfddf0e0f329499b266ba_586x140.png) 微信小程序已經有了一個身份認證體系,我們沒必要自己再設計賬號密碼體系,我們可以結合微信小程序的認證體系做自己的權限設計 所以小程序獲取令牌時不需要發送帳號密碼,而是把小程序生成的Code發送給微信服務器,微信服務器接受到Code并響應openid(身份標識)和session_key,小程序接受到微信服務器的openid后發送給我們的API服務器 openid是用戶在微信小程序的唯一標識,并且不會過期,非常重要,所以不建議將openid發送到客戶端,而是存儲到API服務器,然后用有實效的令牌代替openid發送到客戶端驗證 ![](https://img.kancloud.cn/0d/fd/0dfd30381fac3ee9772efc3b0778630c_770x398.png) 小程序 ![](https://img.kancloud.cn/f1/b3/f1b37d35af29aa72af7544651bdb9ad2_718x260.png) 例子 1、拿到code ![](https://img.kancloud.cn/15/3a/153ad9f37ba9c428d45846efee187fd7_665x420.png) code: ![](https://img.kancloud.cn/8d/c0/8dc0246bea7c11552b812a1c0e7d87c1_357x35.png) 2、拿到code再利用接口拿到openid:$data的值如圖 ![](https://img.kancloud.cn/7b/0f/7b0f426d2a7f3a33d270184077490a3b_336x69.png) ~~~ function getToken($code){ $token=get($code); return [ 'token'=>$token ]; } function get($code){ $url="https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code"; //拿到數據并轉為數組 $data=json_decode(curl_get($url), true); if(empty($data)){ throw new Exception('error'); }else{ if(array_key_exists('errorcode', $data)){ //error }else{ //拿到openid(需要在user表里新建openid字段),沒有拿到就新增用戶 $openid=$data['openid']; $user=model('user')->where(['openid'=>$openid])->find(); if(!$user){ $uid = model('user')->insertGetId(['openid'=>$openid]);//用戶不存在新增 }else{ $uid = $user->id; } //$data的值:[session_key: "DXQxBd1pEYCIJOcem7v2pg==", openid: "oBEq45dg2N1EyhmqqJbWc6SGcFhw"] $cacheValue=$data; $cacheValue['uid']=$uid; $cacheValue['scope']=16; $token=grantToken($cacheValue); } } } function curl_get($url, &$httpCode = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不做證書校驗,部署在linux環境下請改為true curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); $file_contents = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $file_contents; } 生成token令牌并保存緩存的數據 /** * 生成令牌 并以令牌為key以$cachevalue為值緩存起來,再返回token grantToken調用 * @param array $cachevalue 準備好的要緩存的數據 * [session_key=> "DXQxBd1pEYCIJOcem7v2pg==", openid=> "oBEq45dg2N1EyhmqqJbWc6SGcFhw","uid"=>1, "scope"=>16] * @return string 返回生成的token令牌 */ function grantToken($cacheValue){ $key=generateTken(); $value=json_encode($cacheValue); //緩存數據 $request=cache($key,$value,7200); return $key; } //生成token令牌 function generateTken(){ //32個字符組成的隨機字符串 $randChars=getRandChar(32); //$_SERVER['REQUEST_TIME'] 帶毫秒 //date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']) $timestamp=$_SERVER['REQUEST_TIME_FLOAT']; //自定義的salt 可放在配置文件 $salt="HHsTieBu377mJtKr"; //用三組字符串進行加密更安全 return md5($randChars.$timestamp.$salt); } function getRandChar($length) { $str = null; $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($strPol) - 1; for ($i = 0; $i < $length; $i++) { $str .= $strPol[rand(0, $max)]; } return $str; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看