Пример #1
0
 private function reloadTicket()
 {
     $fp = fopen($this->file, "w");
     if (flock($fp, LOCK_EX)) {
         Log::i('Lock', 'JsapiTicket');
         try {
             $url = $this->url . "?access_token={$this->accessToken}&type=wx_card";
             $httpClient = new HttpClient($url);
             $httpClient->get();
             $stream = $httpClient->jsonToArray();
             if (isset($stream['ticket'])) {
                 //提取参数
                 $jsapi_ticket = $stream['ticket'];
                 $expires_in = $stream['expires_in'];
                 $expires_time = intval(time()) + intval($expires_in) - 60;
                 //60s超时缓冲
                 $file_stream = json_encode(array('expires_time' => $expires_time, 'jsapi_ticket' => $jsapi_ticket));
                 fwrite($fp, "<?php exit; ?>\n");
                 fwrite($fp, $file_stream);
                 Log::i('Unlock', 'JsapiTicket');
                 flock($fp, LOCK_UN);
                 fclose($fp);
                 @chmod($this->file, DEFAULT_PERMISSION);
                 return $jsapi_ticket;
             } else {
                 throw ApiException::throws(ApiException::ERROR_JSON_ERROR_CODE, 'response: ' . $httpClient->getResponse());
             }
         } catch (ApiException $e) {
             Log::i('Unlock', 'JsapiTicket');
             flock($fp, LOCK_UN);
             fclose($fp);
             throw $e;
             return false;
         }
     } else {
         fclose($fp);
         throw ApiException::throws(ApiException::FILE_LOCK_ERROR_CODE);
         return false;
     }
 }