apiKey = config('services.kavenegar.api_key', ''); $this->sender = config('services.kavenegar.sender', ''); } /** * ارسال کد تأیید به شماره موبایل */ public function sendVerificationCode(string $phone): array { $code = Str::random(5, '0123456789'); $cacheKey = "sms_verify_{$phone}"; // ذخیره کد در cache به مدت ۱۰ دقیقه Cache::put($cacheKey, $code, now()->addMinutes(10)); $message = "کد تأیید IFNEX: {$code}"; return $this->send($phone, $message); } /** * بررسی کد تأیید */ public function verifyCode(string $phone, string $code): bool { $cacheKey = "sms_verify_{$phone}"; $storedCode = Cache::get($cacheKey); if ($storedCode && $storedCode === $code) { Cache::forget($cacheKey); return true; } return false; } /** * ارسال پیامک */ public function send(string $receptor, string $message): array { if (empty($this->apiKey)) { return [ 'success' => false, 'message' => 'API Key Kavenegar تنظیم نشده است', ]; } try { $response = Http::timeout(10) ->post("https://api.kavenegar.com/v1/{$this->apiKey}/sms/send.json", [ 'receptor' => $receptor, 'sender' => $this->sender, 'message' => $message, ]); $data = $response->json(); if ($response->successful() && isset($data['return']['status']) && $data['return']['status'] == 200) { return [ 'success' => true, 'message' => 'پیامک با موفقیت ارسال شد', 'cost' => $data['entries'][0]['cost'] ?? 0, ]; } return [ 'success' => false, 'message' => $data['return']['message'] ?? 'خطا در ارسال پیامک', ]; } catch (\Exception $e) { return [ 'success' => false, 'message' => 'خطا در اتصال به سرور Kavenegar: ' . $e->getMessage(), ]; } } /** * ارسال پیامک گروهی */ public function sendBulk(array $receptors, string $message): array { if (empty($this->apiKey)) { return [ 'success' => false, 'message' => 'API Key Kavenegar تنظیم نشده است', ]; } try { $response = Http::timeout(30) ->post("https://api.kavenegar.com/v1/{$this->apiKey}/sms/send.json", [ 'receptor' => $receptors, 'sender' => $this->sender, 'message' => $message, ]); $data = $response->json(); if ($response->successful() && isset($data['return']['status']) && $data['return']['status'] == 200) { return [ 'success' => true, 'message' => 'پیامک با موفقیت ارسال شد', 'cost' => collect($data['entries'])->sum('cost'), ]; } return [ 'success' => false, 'message' => $data['return']['message'] ?? 'خطا در ارسال پیامک', ]; } catch (\Exception $e) { return [ 'success' => false, 'message' => 'خطا در اتصال به سرور Kavenegar: ' . $e->getMessage(), ]; } } /** * بررسی وضعیت پیامک ارسال شده */ public function checkStatus(string $messageId): array { try { $response = Http::timeout(10) ->get("https://api.kavenegar.com/v1/{$this->apiKey}/select.json", [ 'messageid' => $messageId, ]); $data = $response->json(); if ($response->successful() && isset($data['return']['status']) && $data['return']['status'] == 200) { $entry = $data['entries'][0] ?? null; return [ 'success' => true, 'status' => $entry['status'] ?? 'unknown', 'status_text' => $entry['statustext'] ?? 'نامشخص', ]; } return [ 'success' => false, 'message' => $data['return']['message'] ?? 'خطا در بررسی وضعیت', ]; } catch (\Exception $e) { return [ 'success' => false, 'message' => 'خطا در اتصال به سرور Kavenegar: ' . $e->getMessage(), ]; } } }