['uri' => '/game/support/items/v1', 'method' => 'post'], 'provide' => ['uri' => '/game/support/provide/v1', 'method' => 'post'], ]; private $appIds = [ 'andriod' => 1746, 'ios' => 1747, ]; private $channelIds = [ 'andriod' => 11595, 'ios' => 11596, ]; public function __construct() { $this->client = new Client([ 'base_uri' => C('GAME_CAT_URL'), 'timeout' => 10.0, ]); } public function api($api, array $params = []) { $api = $this->apis[$api] ?? null; if (is_null($api)) { throw new \Exception('接口不存在'); } $deviceType = 'andriod'; if (isset($params['device_type'])) { $deviceType = $params['device_type']; unset($params['device_type']); } $params['appId'] = $this->appIds[$deviceType] ?? $this->appIds['andriod']; $params['channelId'] = $this->channelIds[$deviceType] ?? $this->channelIds['andriod']; $params['timestamp'] = time(); $params[self::SIGN_NAME] = $this->sign($params); try { return $this->request($api, $params); } catch (\Exception $e) { $env = C('APP_ENV', null, 'prod'); return ['code' => 1000, 'state' => 1000, 'message' => '接口请求错误。' . ($env == 'prod' ? '' : $e->getMessage()) , 'data' => []]; } } public function request($api, $params) { if ($api['method'] == 'get') { return $this->get($api['uri'], $params); } else { return $this->post($api['uri'], $params); } } protected function post($uri, array $params = []) { $response = $this->client->post($uri, [ 'verify' => false, 'form_params' => $params, ]); $result = (string)$response->getBody(); /* var_dump($uri); var_dump($params); var_dump($result); */ return json_decode($result, true); } protected function get($uri, array $params = []) { $response = $this->client->get($uri, [ 'verify' => false, 'query' => $params, ]); $result = (string)$response->getBody(); return json_decode($result, true); } protected function sign($params) { unset($params[self::SIGN_NAME]); ksort($params); $params['key'] = C('GAME_CAT_KEY'); $signRows = []; foreach ($params as $key => $value) { $signRows[] = $key . '=' . $value; } // var_dump(implode('&', $signRows)); return md5(implode('&', $signRows)); } }