config = $config; $this->client = new Client([ 'base_uri' => rtrim($this->config['host'], '/') . '/', 'timeout' => 5.0, ]); } /** * 发送短信 * @param string $mobile 手机号(多个用逗号分隔) * @param string $templateId 未使用模板可留空 * @param array $data ['content' => '短信内容'] * @return array */ public function send(string $mobile, string $templateId = '', array $data = []): array { $url = 'sendsms'; $body = [ 'account' => $this->config['account'], 'password' => $this->config['password'], 'numbers' => $mobile, 'smstype' => $data['smstype'] ?? 0, 'sender' => $data['title'] ?? '', 'content' => $data['content'] ?? '', ]; try { $response = $this->client->request('POST', $url, [ 'headers' => [ 'Content-Type' => 'application/json;charset=utf-8' ], 'body' => json_encode($body, JSON_UNESCAPED_UNICODE), ]); $result = json_decode($response->getBody()->getContents(), true); return [ 'success' => $result['status'] === 0, 'data' => $result, 'msg' => $result['status'] === 0 ? '发送成功' : '发送失败', ]; } catch (\Throwable $e) { return [ 'success' => false, 'msg' => '请求失败:' . $e->getMessage(), 'data' => [], ]; } } /** * 查询余额 */ public function getBalance(): array { $url = 'getbalance'; $body = [ 'version' => '3.4', 'account' => $this->config['account'], 'password' => $this->config['password'], ]; return $this->getJson($url, $body); } /** * 查询短信状态(单条) */ public function getStatus(string $msgid): array { $url = 'getstatus'; $body = [ 'account' => $this->config['account'], 'password' => $this->config['password'], 'msgid' => $msgid, ]; return $this->getJson($url, $body); } /** * 获取接收短信 */ public function getInbox(): array { $url = 'getinbox'; $body = [ 'account' => $this->config['account'], 'password' => $this->config['password'], ]; return $this->getJson($url, $body); } /** * 通用 POST 请求 */ protected function postJson(string $url, array $body): array { try { $response = $this->client->post($url, [ 'headers' => [ 'Content-Type' => 'application/json;charset=utf-8', ], 'json' => $body, ]); $result = json_decode($response->getBody()->getContents(), true); return [ 'success' => $result['status'] === 0, 'msg' => $result['status'] === 0 ? '操作成功' : ($result['message'] ?? '失败'), 'data' => $result, ]; } catch (\Throwable $e) { return [ 'success' => false, 'msg' => '请求异常: ' . $e->getMessage(), 'data' => [], ]; } } /** * 通用 GET 请求 */ protected function getJson(string $url, array $query = []): array { try { $response = $this->client->get($url, [ 'headers' => [ 'Accept' => 'application/json', ], 'query' => $query, ]); $result = json_decode($response->getBody()->getContents(), true); return [ 'success' => $result['status'] === 0, 'msg' => $result['status'] === 0 ? '操作成功' : ($result['message'] ?? '失败'), 'data' => $result, ]; } catch (\Throwable $e) { return [ 'success' => false, 'msg' => '请求异常: ' . $e->getMessage(), 'data' => [], ]; } } }