نمونه کد چندزبانه
نمونههای این صفحه یک پیام را با POST /v1/messages ارسال میکنند. در همه زبانها سه اصل یکسان است: X-API-Key فقط در Backend نگهداری شود، Idempotency-Key برای هر عملیات جدید یکتا باشد و در Retry همان مقدار قبلی دوباره استفاده شود.
cURL
curl -X POST "https://service.smsdaily.ir/v1/messages" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: 5c88a3d2-65ce-4cc1-9ea0-1d7efe675d40" \
-H "Content-Type: application/json" \
-d '{
"sender": "300099000121",
"recipient": "09121234567",
"message": "پیام آزمایشی SMSDaily",
"clientReference": "order-140501"
}'
C# / .NET
برای پروژههای .NET بهتر است یک HttpClient مدیریتشده از IHttpClientFactory داشته باشید. نمونه ساده زیر برای نمایش قرارداد است:
using System.Net.Http.Json;
var apiKey = Environment.GetEnvironmentVariable("SMSDAILY_API_KEY")
?? throw new InvalidOperationException("SMSDAILY_API_KEY is not configured.");
using var client = new HttpClient
{
BaseAddress = new Uri("https://service.smsdaily.ir")
};
using var request = new HttpRequestMessage(HttpMethod.Post, "/v1/messages")
{
Content = JsonContent.Create(new
{
sender = "300099000121",
recipient = "09121234567",
message = "پیام آزمایشی SMSDaily",
clientReference = "order-140501"
})
};
request.Headers.Add("X-API-Key", apiKey);
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine(body);
در برنامه واقعی، برای Timeout یا خطای موقت شبکه همان Idempotency-Key عملیات را نگه دارید و Request را با همان مقدار Retry کنید.
PHP
<?php
$apiKey = getenv('SMSDAILY_API_KEY');
$idempotencyKey = bin2hex(random_bytes(16));
$payload = [
'sender' => '300099000121',
'recipient' => '09121234567',
'message' => 'پیام آزمایشی SMSDaily',
'clientReference' => 'order-140501'
];
$ch = curl_init('https://service.smsdaily.ir/v1/messages');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $apiKey,
'Idempotency-Key: ' . $idempotencyKey,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "HTTP $status\n";
echo $body;
Python
import os
import uuid
import requests
api_key = os.environ["SMSDAILY_API_KEY"]
response = requests.post(
"https://service.smsdaily.ir/v1/messages",
headers={
"X-API-Key": api_key,
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"sender": "300099000121",
"recipient": "09121234567",
"message": "پیام آزمایشی SMSDaily",
"clientReference": "order-140501",
},
timeout=20,
)
print(response.status_code)
print(response.json())
JavaScript / Node.js
این نمونه برای Backend مبتنی بر Node.js است. API Key را در JavaScript سمت مرورگر قرار ندهید.
import crypto from 'node:crypto';
const apiKey = process.env.SMSDAILY_API_KEY;
const response = await fetch('https://service.smsdaily.ir/v1/messages', {
method: 'POST',
headers: {
'X-API-Key': apiKey,
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json'
},
body: JSON.stringify({
sender: '300099000121',
recipient: '09121234567',
message: 'پیام آزمایشی SMSDaily',
clientReference: 'order-140501'
})
});
console.log(response.status);
console.log(await response.json());
Java
نمونه زیر از java.net.http.HttpClient استاندارد استفاده میکند:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.UUID;
var apiKey = System.getenv("SMSDAILY_API_KEY");
var json = """
{
"sender":"300099000121",
"recipient":"09121234567",
"message":"پیام آزمایشی SMSDaily",
"clientReference":"order-140501"
}
""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://service.smsdaily.ir/v1/messages"))
.header("X-API-Key", apiKey)
.header("Idempotency-Key", UUID.randomUUID().toString())
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
var response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
پاسخ موفق
برای پیام جدید معمولاً 202 Accepted دریافت میشود:
{
"trackingCode": "SMS-20260808-A1B2C3D4",
"status": "queued",
"encoding": "Persian",
"characterCount": 23,
"partCount": 1,
"submittedAt": "2026-08-08T05:30:00Z",
"duplicate": false
}
202 به معنی پذیرفتهشدن درخواست است، نه تحویل نهایی پیام. وضعیت را با GET /v1/messages/{trackingCode} یا Endpoint وضعیت گروهی پیگیری کنید.