smsUser = CompanySettings::get('S_COMPANY_SMSUSER') ?? ''; $this->smsPass = CompanySettings::get('S_COMPANY_SMSPASS') ?? ''; $this->smsSender = CompanySettings::get('S_COMPANY_SMSSENDER') ?? ''; $this->baseUri = CompanySettings::get('S_COMPANY_SMSAPI_LINK') ?? 'https://api.socialbrand.agency'; } public function send(string $message, string $receiver): array { try { $receiver = PhoneNormalizer::toDialable( $receiver, config('sms.country_code', '20') ); $authString = base64_encode("{$this->smsUser}:{$this->smsPass}"); $client = new Client(['verify' => false]); $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Basic ' . $authString, ]; $body = json_encode([ 'msgText' => $message, 'sender' => $this->smsSender, 'receiver' => $receiver, ]); $request = new Request('POST', "{$this->baseUri}/api/SMS/SendSMS", $headers, $body); $res = $client->sendAsync($request)->wait(); $raw = json_decode($res->getBody()->getContents(), true) ?? []; Log::info(['EgyptianSmsGateway response' => $raw]); return [ 'success' => true, 'status' => $raw['status'] ?? 'Sent', 'senttime' => $raw['senttime'] ?? null, 'msgId' => $raw['msgId'] ?? null, 'smsCost' => $raw['smsCost'] ?? null, 'error' => null, 'raw' => $raw, ]; } catch (\Exception $e) { Log::error('EgyptianSmsGateway error: ' . $e->getMessage()); return [ 'success' => false, 'status' => 'Failed', 'senttime' => null, 'msgId' => null, 'smsCost' => null, 'error' => $e->getMessage(), 'raw' => [], ]; } } }