"0", 'witSecretId' => $secretId, 'witSecretKey' => $secretKey, 'witPid' => "0", 'ver' => 0, ); } $requestBody = array( 'witUid' => $baseConf['witUid'], 'witPid' => $baseConf['witPid'], 'class' => $class, 'func' => $func, 'param' => $param, 'type' => $type, ); $requestBody['t'] = time(); $requestBody['sign'] = self::_getSign($baseConf['witSecretId'], $baseConf['witSecretKey'], $requestBody); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, self::WitApiURL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestBody)); $response = curl_exec($ch); if(!$response) { throw new Exception($class.'::'.$func.'() response error'); } $responseBody = json_decode($response, true); if(!$responseBody) { throw new Exception($class.'::'.$func.'() response error'); } if($func == 'Discuz_GetConf') { if($responseBody['errCode']) { self::SetSetting(array()); return array(); } if(empty($baseConf['witUid']) || empty($baseConf['ver']) || !empty($responseBody['data']['ver']) && $responseBody['data']['ver'] > $baseConf['ver']) { self::SetSetting($responseBody['data']); } } if($responseBody['errCode']) { throw new Exception($class.'::'.$func.'() response '.$responseBody['message'], $responseBody['errCode']); } } catch(Exception $e) { writelog('witframe', $e->getCode().': '.$e->getMessage()); return array(); } return $responseBody['data']; } public static function GetSetting() { global $_G; if (!empty($_G['setting'][self::SettingKey])) { return unserialize($_G['setting'][self::SettingKey]); } return array(); } public static function SetSetting($data) { C::t('common_setting')->update_batch(array(self::SettingKey => $data)); require_once libfile('function/cache'); updatecache('setting'); } private static function _getSign($witSecretId, $witSecretKey, $data) { $srcStr = $witSecretId . '|' . serialize($data); return Crypt::encode($witSecretKey, 'sha1', $srcStr); } }