diff --git a/Application/Admin/Controller/GameApiController.class.php b/Application/Admin/Controller/GameApiController.class.php index 08dc60615..061fc806a 100644 --- a/Application/Admin/Controller/GameApiController.class.php +++ b/Application/Admin/Controller/GameApiController.class.php @@ -12,6 +12,7 @@ use Base\Service\TestingResourceService; use GuzzleHttp\Client; use think\Db; use Base\Tool\GameResource; +use Base\Tool\GameResource\MhxlClient; use Base\Tool\GameResource\SbcqClient; use Base\Tool\GameResource\XlqyClient; use Base\Tool\GameResource\XyyClient; @@ -66,6 +67,26 @@ class GameApiController extends Think { public function send() { + // 13110873520 + // user_id 402903 + // role_id 4294970300 + // server_id 1 + $giftItem = [ + 'id' => 32, + 'index' => 0, + ]; + $order = [ + 'id' => 1, + 'role_id' => '4294970300', + 'server_id' => '1', + 'user_id' => '402903', + ]; + $client = new MhxlClient(); + $result = $client->sendEmail($order, $giftItem); + var_dump($result); + + return; + $role = [ 'role_id' => '93323379', 'server_id' => '89', diff --git a/Application/Base/Tool/GameResource/MhxlClient.class.php b/Application/Base/Tool/GameResource/MhxlClient.class.php new file mode 100644 index 000000000..0c5b722f0 --- /dev/null +++ b/Application/Base/Tool/GameResource/MhxlClient.class.php @@ -0,0 +1,178 @@ + ['uri' => '/hhsy/center/api.php?r=senditem', 'method' => 'post'], + ]; + + public function __construct($game = null) + { + $this->client = new Client([ + 'base_uri' => $this->baseUrl, + 'timeout' => 10.0, + ]); + } + + public function api($api, array $params = []) + { + $tmpApi = $api; + $api = $this->apis[$api] ?? null; + if (is_null($api)) { + throw new \Exception('接口不存在'); + } + $params[self::SIGN_NAME] = $this->sign($tmpApi, $params); + + try { + return $this->request($api, $params); + } catch (\Exception $e) { + $env = C('APP_ENV', null, 'prod'); + Log::error('Mhxl ' . $e->getMessage()); + return ['code' => 0, 'msg' => '接口请求错误。' . ($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(); + Log::info('Mhxl ' . json_encode($params) . ' ' . $result); + return $this->prepareResult($result); + } + + protected function get($uri, array $params = []) + { + $response = $this->client->get($uri, [ + 'verify' => false, + 'query' => $params, + ]); + $result = (string)$response->getBody(); + Log::info('Mhxl ' . json_encode($params) . ' ' . $result); + return $this->prepareResult($result); + } + + protected function prepareResult($result) + { + if ($result == 'SUCCESS') { + return [ + 'code' => 0, + 'msg' => $result, + ]; + } else { + return [ + 'code' => 1, + 'msg' => $result, + ]; + } + } + + protected function sign($name, $params) + { + return md5( + $params['appId'] . + $params['orderNum'] . + $params['userId'] . + $params['mailId'] . + $params['serviceId'] . + $params['roleId'] . + $params['time'] . + static::SIGN_KEY + ); + } + + // 测试资源 + public function apply($order, $role) + { + throw new Exception('接口未实现!'); + } + + // + public function sendGold($order, $role) + { + throw new Exception('接口未实现!'); + } + + public function sendProps($order) + { + throw new Exception('接口未实现!'); + } + + protected function generateOrderNumber($order, $index = 0) + { + $length = 8 - strlen(strval($order['id'])); + $indexLength = 3 - strlen(strval($index)); + return date('Ymd') . str_repeat('0', $length) . $order['id'] . str_repeat('0', $indexLength) . $index; + } + + public function sendEmail($giftItem, $order) + { + $result = $this->api('send-email', [ + 'appId' => 'wmtx', + 'serviceId' => $order['server_id'], + 'roleId' => $order['role_id'], + 'userId' => $order['user_id'], + 'mailId' => $giftItem['id'], + 'orderNum' => $this->generateOrderNumber($order, $giftItem['index']) + ]); + return $this->getCommonResult($result); + } + + protected function getCommonResult($result, $successCode = 0) + { + if ($result['code'] == $successCode) { + return [ + 'status' => true, + 'message' => $result['msg'], + 'result' => $result + ]; + } else { + return [ + 'status' => false, + 'message' => $result['msg'], + 'result' => $result + ]; + } + } + + public function getResourceTypes($deviceType) + { + if ($deviceType == 'andriod') { + return [['id' => 1, 'name' => '通用', 'device_type' => 'andriod']]; + } elseif ($deviceType == 'ios') { + return [['id' => 2, 'name' => '通用', 'device_type' => 'ios']]; + } + } + + public function getResources($typeId, $deviceType) + { + $resources = []; + return $resources; + } +} \ No newline at end of file