بیش از ۷۵ درصد وب‌سایت‌های ایرانی با زبان PHP پیاده‌سازی شده‌اند. برای بسیاری از پروژه‌های ساده، سیستم‌های مدیریت محتوا یا اسکریپت‌های اختصاصی، استفاده از کتابخانه‌های سنگین فریم‌ورک غیرضروری است. در این آموزش توابع استاندارد و ماژولار PHP خام مبتنی بر cURL را برای ارسال آنی پیامک و کد اعتبارسنجی ارائه می‌دهیم.

تابع اختصاصی ارسال کد تایید یکبار مصرف (send_otp_curl)

این تابع با متد POST به اندپوینت /otp وب‌سرویس فری اس ام اس متصل شده و با خط خدماتی اشتراکی، پیامک را ظرف ۳ ثانیه حتی به شماره‌های بلک‌لیست تحویل می‌دهد:

<?php function send_otp_curl(string $apiKey, string $mobile, string $patternCode, array $params): array { $url = "https://api.free-sms.ir/v1/otp"; $payload = json_encode([ 'to' => $mobile, 'pattern_code' => $patternCode, 'params' => $params ]); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$apiKey}", "Content-Type: application/json" ] ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); if ($error) { return ['status' => false, 'error' => $error]; } return json_decode($response, true) ?: ['status' => false, 'code' => $httpCode]; } // مثال فراخوانی: $apiKey = "YOUR_FREE_SMS_API_KEY"; $result = send_otp_curl($apiKey, "09121234567", "verify_code_v1", ["code" => "49201"]); print_r($result); ?>

تابع ارسال پیامک متنی انبوه (send_bulk_sms_curl)

<?php function send_bulk_sms_curl(string $apiKey, string $line, array $recipients, string $text): array { $url = "https://api.free-sms.ir/v1/send"; $payload = json_encode([ 'line' => $line, 'to' => $recipients, 'text' => $text ]); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 8, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$apiKey}", "Content-Type: application/json" ] ]); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } ?>

فایل دریافت گزارش تحویل (webhook.php)

یک فایل PHP ساده برای شنیدن رویدادهای تحویل پیامک از سمت سرورهای فری اس ام اس:

<?php // webhook.php $input = file_get_contents('php://input'); $data = json_decode($input, true); if (!empty($data['message_id'])) { $msgId = $data['message_id']; $status = $data['status']; // delivered, failed, blacklisted // ذخیره در دیتابیس MySQL با PDO http_response_code(200); echo "OK"; } ?>

سوالات متداول

اگر افزونه curl در سرور فعال نباشد چه باید کرد؟+

در اغلب هاست‌های لینوکسی cURL فعال است. در صورتی که فعال نبود، با دستور sudo apt-get install php-curl یا فعال‌سازی اکستنشن curl در سی‌پنل/دایرکت‌ادمین آن را فعال کنید.

چگونه مانع از بروز خطای SSL Certificate در سرورهای لوکال شویم؟+

در محیط توسعه لوکال (Localhost) می‌توانید موقتاً CURLOPT_SSL_VERIFYPEER => false قرار دهید؛ اما در هاست پروداکشن همیشه باید تایید SSL فعال باشد.

چرا استفاده از cURL نسبت به file_get_contents برای وب‌سرویس ترجیح داده می‌شود؟+

کتابخانه cURL امکان تنظیم هدرهای امنیتی، زمان انقضا (Timeout)، مدیریت خطاهای شبکه و بازیابی دقیق کد وضعیت HTTP را به مراتب بهتر و سریع‌تر از توابع ساده استریم فایل ارائه می‌دهد.

آیا این توابع با نسخه‌های جدید PHP 8.2 و 8.3 سازگار هستند؟+

بله، کدها با استانداردهای مدرن PHP و بدون استفاده از توابع منسوخ‌شده (Deprecated) پیاده‌سازی شده‌اند و دارای تایپینگ صریح هستند.