📖 المقدمة
مرحبًا بك في توثيق API التوصيل لمنصة Essalmy Store. يتيح لك هذا الـ API إدارة طلبات التوصيل بشكل فعال وتكامل سلس مع أنظمة التوصيل الخاصة بشركتك.
يستخدم هذا الـ API بروتوكول REST مع صيغة البيانات JSON لجميع الطلبات والاستجابات، مما يوفر بيئة تطوير موحدة وسهلة الاستخدام.
المتطلبات الأساسية
- مفتاح API (API Key): يمكنك الحصول عليه من إدارة المنصة
- اتصال بالإنترنت: لجميع الطلبات والاستجابات
- دعم JSON: لمعالجة البيانات المرسلة والمُستلمة
- بروتوكول HTTP/HTTPS: لتنفيذ الطلبات
🔐 المصادقة
جميع الطلبات إلى الـ API يجب أن تتضمن مفتاح المصادقة (API Key) في رأس الطلب (Header). يتم تمرير المفتاح عبر رأس X-API-Key.
مثال على إرسال المفتاح
curl -X GET "https://essalmy.com/api/delivery.php?action=orders&filter=available" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json"
<?php $apiKey = 'YOUR_API_KEY_HERE'; $url = 'https://essalmy.com/api/delivery.php?action=orders&filter=available'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-API-Key: ' . $apiKey, 'Content-Type: application/json' ]); $response = curl_exec($ch); $data = json_decode($response, true); curl_close($ch); print_r($data);
import requests api_key = 'YOUR_API_KEY_HERE' url = 'https://essalmy.com/api/delivery.php' headers = { 'X-API-Key': api_key, 'Content-Type': 'application/json' } params = { 'action': 'orders', 'filter': 'available' } response = requests.get(url, headers=headers, params=params) data = response.json() print(data)
const apiKey = 'YOUR_API_KEY_HERE'; const url = 'https://essalmy.com/api/delivery.php'; const params = new URLSearchParams({ action: 'orders', filter: 'available' }); const response = await fetch(`${url}?${params}`, { method: 'GET', headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json' } }); const data = await response.json(); console.log(data);
final response = await http.get( Uri.parse('https://essalmy.com/api/delivery.php?action=orders'), headers: { 'X-API-Key': 'YOUR_API_KEY_HERE', 'Content-Type': 'application/json', }, ); final data = json.decode(response.body); print(data);
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://essalmy.com/api/delivery.php?action=orders")) .header("X-API-Key", "YOUR_API_KEY_HERE") .header("Content-Type", "application/json") .GET() .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString() ); System.out.println(response.body());
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY_HERE"); var response = await client.GetAsync( "https://essalmy.com/api/delivery.php?action=orders" ); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result);
uri = URI('https://essalmy.com/api/delivery.php?action=orders') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Get.new(uri) request['X-API-Key'] = 'YOUR_API_KEY_HERE' response = http.request(request) puts JSON.parse(response.body)
req, _ := http.NewRequest("GET", "https://essalmy.com/api/delivery.php?action=orders", nil) req.Header.Set("X-API-Key", "YOUR_API_KEY_HERE") client := &http.Client{} resp, _ := client.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))
var request = URLRequest(url: URL(string: "https://essalmy.com/api/delivery.php?action=orders")!) request.httpMethod = "GET" request.setValue("YOUR_API_KEY_HERE", forHTTPHeaderField: "X-API-Key") URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { return } if let json = try? JSONSerialization.jsonObject(with: data) { print(json) } }.resume()
🔗 الرابط الأساسي
جميع الطلبات إلى الـ API يتم إرسالها إلى الرابط الأساسي التالي. تأكد من استخدام هذا الرابط في جميع استدعاءاتك:
📡 الـ Endpoints المتاحة
جدول شامل بجميع نقاط النهاية (Endpoints) المتاحة في الـ API:
| العملية | الطريقة | الرابط | الوصف |
|---|---|---|---|
| الطلبات المتاحة | GET | ?action=orders&filter=available |
الطلبات غير المكلفة |
| طلباتي | GET | ?action=orders&filter=assigned |
الطلبات المكلفة بشركتك |
| تم التوصيل | GET | ?action=orders&filter=delivered |
الطلبات المُسلّمة |
| جميع الطلبات | GET | ?action=orders&filter=all |
جميع طلبات الشركة |
| تفاصيل طلب | GET | ?action=order&id={id} |
تفاصيل طلب معين |
| تكليف الطلب | POST | ?action=assign |
تكليف طلب بالشركة |
| تحديث الحالة | POST | ?action=update_status |
تحديث حالة التوصيل |
| تسليم الطلب | POST | ?action=deliver |
تسليم الطلب مع إثبات |
| تتبع الطلب | GET | ?action=track&id={id} |
سجل تتبع الطلب |
| الإحصائيات | GET | ?action=stats |
إحصائيات الشركة |
📦 جلب الطلبات
جلب قائمة الطلبات حسب الفلتر المحدد. يمكنك استخدام الفلاتر التالية:
-
filter
مطلوب
نوع الفلتر:
available|assigned|delivered|all - page اختياري رقم الصفحة (الافتراضي: 1)
مثال على الاستجابة
{
"success": true,
"data": {
"orders": [
{
"id": 1234,
"order_number": "ORD-2026-001",
"customer_name": "أحمد محمد",
"customer_phone": "0501234567",
"delivery_address": "الرياض، حي النزهة، شارع الأمير سلطان",
"city": "الرياض",
"status": "pending",
"total_amount": 250.00,
"delivery_fee": 15.00,
"created_at": "2026-06-24 10:30:00",
"notes": "يرجى التوصيل قبل العصر"
}
],
"pagination": {
"current_page": 1,
"total_pages": 5,
"total_orders": 47,
"per_page": 10
}
}
}
📋 تفاصيل الطلب
جلب تفاصيل طلب معين مع جميع المنتجات وسجل التاريخ.
- id مطلوب رقم الطلب (ID)
مثال على الاستجابة
{
"success": true,
"data": {
"id": 1234,
"order_number": "ORD-2026-001",
"customer_name": "أحمد محمد",
"customer_phone": "0501234567",
"delivery_address": "الرياض، حي النزهة، شارع الأمير سلطان",
"city": "الرياض",
"status": "picked_up",
"total_amount": 250.00,
"delivery_fee": 15.00,
"items": [
{
"name": "سماعة بلوتوث لاسلكية",
"quantity": 1,
"price": 150.00
},
{
"name": "شاحن متنقل 10000mAh",
"quantity": 2,
"price": 50.00
}
],
"history": [
{
"status": "pending",
"timestamp": "2026-06-24 10:30:00",
"notes": "تم إنشاء الطلب"
},
{
"status": "picked_up",
"timestamp": "2026-06-24 11:15:00",
"notes": "تم استلام الطلب من المستودع",
"location": "مستودع الرياض المركزي"
}
],
"created_at": "2026-06-24 10:30:00",
"assigned_at": "2026-06-24 11:00:00"
}
}
🏷️ تكليف الطلب
تكليف طلب معين بشركتك للبدء في عملية التوصيل. لا يمكن تكليف طلب مكلف بشركة أخرى.
- order_id مطلوب رقم الطلب المراد تكليفه
مثال على الاستجابة
{
"success": true,
"message": "تم تكليف الطلب بنجاح",
"data": {
"order_id": 1234,
"status": "assigned",
"assigned_at": "2026-06-24 11:00:00"
}
}
🔄 تحديث الحالة
تحديث حالة التوصيل للطلب مع تحديد الموقع الحالي والملاحظات.
- order_id مطلوب رقم الطلب
-
status
مطلوب
الحالة الجديدة:
picked_up|in_transit|out_for_delivery|failed - location اختياري الموقع الحالي للسائق
- notes اختياري ملاحظات إضافية
مثال على الاستجابة
{
"success": true,
"message": "تم تحديث الحالة بنجاح",
"data": {
"order_id": 1234,
"old_status": "picked_up",
"new_status": "in_transit",
"updated_at": "2026-06-24 12:00:00"
}
}
✅ تسليم الطلب
تسليم الطلب مع إرفاق إثبات التسليم. يُستخدم هذا الـ Endpoint عند تسليم الطلب للعميل بالفعل.
- order_id مطلوب رقم الطلب
- notes اختياري ملاحظات التسليم
- proof_image اختياري صورة إثبات التسليم (ملف - multipart/form-data)
multipart/form-data عند إرفاق صورة إثبات التسليم. الحد الأقصى لحجم الصورة: 5 ميجابايت. الصيغ المدعومة: JPG, PNG, WEBP.
مثال على الاستجابة
{
"success": true,
"message": "تم تسليم الطلب بنجاح",
"data": {
"order_id": 1234,
"status": "delivered",
"delivered_at": "2026-06-24 14:30:00",
"proof_image": "uploads/proofs/1234_proof.jpg"
}
}
📍 تتبع الطلب
عرض سجل تتبع كامل للطلب مع جميع التحديثات والمراحل التي مر بها.
- id مطلوب رقم الطلب
مثال على الاستجابة
{
"success": true,
"data": {
"order_id": 1234,
"current_status": "in_transit",
"history": [
{
"status": "pending",
"status_ar": "قيد الانتظار",
"timestamp": "2026-06-24 10:30:00",
"notes": "تم إنشاء الطلب بنجاح",
"location": null
},
{
"status": "picked_up",
"status_ar": "تم الاستلام",
"timestamp": "2026-06-24 11:15:00",
"notes": "تم استلام الطلب من المستودع",
"location": "مستودع الرياض المركزي"
},
{
"status": "in_transit",
"status_ar": "في الطريق",
"timestamp": "2026-06-24 12:00:00",
"notes": "السائق في الطريق إلى العنوان",
"location": "شارع الأمير سلطان، الرياض"
}
]
}
}
📊 الإحصائيات
عرض إحصائيات شاملة لشركتك تشمل عدد الطلبات في كل مرحلة.
مثال على الاستجابة
{
"success": true,
"data": {
"total": 156,
"pending": 12,
"picked_up": 8,
"in_transit": 15,
"out_for_delivery": 23,
"delivered": 92,
"failed": 4,
"returned": 2,
"today_delivered": 7,
"today_revenue": 105.00
}
}
🚦 حالات التوصيل
مسار التوصيل يمر بعدة مراحل متتالية. يجب تحديث الحالة بترتيب صحيح:
الحالات الإضافية
شرح الحالات
| الحالة | الاسم بالعربية | الوصف |
|---|---|---|
| pending | قيد الانتظار | الطلب تم إنشاؤه ولم يتم تكليف شركة التوصيل بعد |
| picked_up | تم الاستلام | تم استلام الطلب من المستودع أو البائع |
| in_transit | في الطريق | السائق في طريقه إلى عنوان العميل |
| out_for_delivery | خرج للتوصيل | السائق وصل إلى المنطقة ويسعى للتسليم |
| delivered | تم التوصيل | تم تسليم الطلب للعميل بنجاح |
| failed | فشل التوصيل | لم يتم التوصيل بسبب خطأ أو رفض العميل |
| returned | مرتجع | تم إرجاع الطلب إلى البائع |
📝 صيغة الاستجابة
استجابة ناجحة
{
"success": true,
"data": {
// البيانات المطلوبة هنا
}
}
استجابة خطأ
{
"success": false,
"message": "وصف الخطأ هنا",
"error_code": "ERROR_CODE"
}
أكواد الحالة (Status Codes)
| كود الحالة | الوصف | متى يظهر |
|---|---|---|
| 200 | نجاح | تمت العملية بنجاح |
| 400 | طلب خاطئ | معاملات مفقودة أو غير صحيحة |
| 401 | غير مصرح | مفتاح API غير صحيح أو غير موجود |
| 404 | غير موجود | الطلب أو الـ Endpoint غير موجود |
| 500 | خطأ داخلي | خطأ في الخادم |
❌ أكواد الأخطاء
جميع أكواد الأخطاء التي قد تظهر أثناء استخدام الـ API:
| كود الخطأ | الرسالة | الوصف |
|---|---|---|
INVALID_API_KEY |
مفتاح API غير صحيح | المفتاح المرسل غير موجود في قاعدة البيانات |
MISSING_API_KEY |
مفتاح API مفقود | لم يتم إرسال رأس X-API-Key |
MISSING_ORDER_ID |
رقم الطلب مفقود | معامل order_id مطلوب ومفقود |
ORDER_NOT_FOUND |
الطلب غير موجود | لا يوجد طلب بهذا الرقم |
ORDER_ALREADY_ASSIGNED |
الطلب مكلف بالفعل | الطلب مكلف بشركة أخرى |
ORDER_NOT_ASSIGNED |
الطلب غير مكلف | الطلب لم يتم تكليفه بشركتك |
INVALID_STATUS |
حالة غير صحيحة | الحالة المرسلة غير مدعومة |
STATUS_TRANSITION_ERROR |
خطأ في تسلسل الحالات | لا يمكن التحول من الحالة الحالية إلى الحالة الجديدة |
MISSING_STATUS |
الحالة مفقودة | معامل status مطلوب ومفقود |
PROOF_IMAGE_REQUIRED |
صورة الإثبات مطلوبة | يجب إرفاق صورة عند التسليم |
INVALID_IMAGE_TYPE |
نوع صورة غير مدعوم | الصورة يجب أن تكون JPG, PNG, أو WEBP |
IMAGE_TOO_LARGE |
حجم الصورة كبير جداً | الحد الأقصى لحجم الصورة 5 ميجابايت |
RATE_LIMIT_EXCEEDED |
تجاوز حد الطلبات | لقد تجاوزت الحد المسموح به من الطلبات في الدقيقة |
SERVER_ERROR |
خطأ في الخادم | حدث خطأ غير متوقع في الخادم |
💻 أمثلة كود كاملة
أمثلة عملية وكاملة توضح كيفية استخدام جميع وظائف الـ API في سيناريو توصيل كامل:
<?php $apiKey = 'YOUR_API_KEY_HERE'; $baseUrl = 'https://essalmy.com/api/delivery.php'; function makeRequest($url, $apiKey, $method = 'GET', $data = null) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-API-Key: ' . $apiKey, 'Content-Type: application/json' ]); if ($method === 'POST') { curl_setopt($ch, CURLOPT_POST, true); if ($data) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); } } $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } // 1. جلب الطلبات المتاحة echo "=== جلب الطلبات المتاحة ===\n"; $url = $baseUrl . '?action=orders&filter=available'; $result = makeRequest($url, $apiKey); print_r($result); // 2. تكليف الطلب echo "\n=== تكليف الطلب ===\n"; $url = $baseUrl . '?action=assign'; $result = makeRequest($url, $apiKey, 'POST', [ 'order_id' => 1234 ]); print_r($result); // 3. تحديث الحالة إلى "في الطريق" echo "\n=== تحديث الحالة ===\n"; $url = $baseUrl . '?action=update_status'; $result = makeRequest($url, $apiKey, 'POST', [ 'order_id' => 1234, 'status' => 'in_transit', 'location' => 'شارع الأمير سلطان، الرياض', 'notes' => 'السائق في الطريق' ]); print_r($result); // 4. تسليم الطلب echo "\n=== تسليم الطلب ===\n"; $url = $baseUrl . '?action=deliver'; $result = makeRequest($url, $apiKey, 'POST', [ 'order_id' => 1234, 'notes' => 'تم التسليم للعميل' ]); print_r($result); ?>
import requests API_KEY = 'YOUR_API_KEY_HERE' BASE_URL = 'https://essalmy.com/api/delivery.php' headers = { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' } # 1. جلب الطلبات المتاحة print("=== جلب الطلبات المتاحة ===") response = requests.get( BASE_URL, headers=headers, params={'action': 'orders', 'filter': 'available'} ) print(response.json()) # 2. تكليف الطلب print("\n=== تكليف الطلب ===") response = requests.post( f"{BASE_URL}?action=assign", headers=headers, json={'order_id': 1234} ) print(response.json()) # 3. تحديث الحالة إلى "في الطريق" print("\n=== تحديث الحالة ===") response = requests.post( f"{BASE_URL}?action=update_status", headers=headers, json={ 'order_id': 1234, 'status': 'in_transit', 'location': 'شارع الأمير سلطان، الرياض', 'notes': 'السائق في الطريق' } ) print(response.json()) # 4. تسليم الطلب print("\n=== تسليم الطلب ===") response = requests.post( f"{BASE_URL}?action=deliver", headers=headers, json={ 'order_id': 1234, 'notes': 'تم التسليم للعميل' } ) print(response.json())
import 'dart:convert'; import 'package:http/http.dart' as http; class DeliveryApiService { final String apiKey = 'YOUR_API_KEY_HERE'; final String baseUrl = 'https://essalmy.com/api/delivery.php'; // جلب الطلبات المتاحة Future<Map<String, dynamic>> getAvailableOrders({int page = 1}) async { final response = await http.get( Uri.parse('$baseUrl?action=orders&filter=available&page=$page'), headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json', }, ); return json.decode(response.body); } // تكليف الطلب Future<Map<String, dynamic>> assignOrder(int orderId) async { final response = await http.post( Uri.parse('$baseUrl?action=assign'), headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/x-www-form-urlencoded', }, body: {'order_id': orderId.toString()}, ); return json.decode(response.body); } // تحديث الحالة Future<Map<String, dynamic>> updateStatus( int orderId, String status, {String? location, String? notes} ) async { final body = { 'order_id': orderId.toString(), 'status': status, }; if (location != null) body['location'] = location; if (notes != null) body['notes'] = notes; final response = await http.post( Uri.parse('$baseUrl?action=update_status'), headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/x-www-form-urlencoded', }, body: body, ); return json.decode(response.body); } // تسليم الطلب Future<Map<String, dynamic>> deliverOrder(int orderId, {String? notes}) async { final body = {'order_id': orderId.toString()}; if (notes != null) body['notes'] = notes; final response = await http.post( Uri.parse('$baseUrl?action=deliver'), headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/x-www-form-urlencoded', }, body: body, ); return json.decode(response.body); } // جلب الإحصائيات Future<Map<String, dynamic>> getStats() async { final response = await http.get( Uri.parse('$baseUrl?action=stats'), headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json', }, ); return json.decode(response.body); } } // مثال الاستخدام void main() async { final api = DeliveryApiService(); // جلب الطلبات final orders = await api.getAvailableOrders(); print(orders); // تكليف طلب final assign = await api.assignOrder(1234); print(assign); }
import java.net.http.*; import java.net.URI; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; public class DeliveryApiClient { private static final String API_KEY = "YOUR_API_KEY_HERE"; private static final String BASE_URL = "https://essalmy.com/api/delivery.php"; private static final HttpClient client = HttpClient.newBuilder().build(); // جلب الطلبات المتاحة public static String getAvailableOrders() throws Exception { HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "?action=orders&filter=available")) .header("X-API-Key", API_KEY) .header("Content-Type", "application/json") .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } // تكليف الطلب public static String assignOrder(int orderId) throws Exception { String body = "order_id=" + orderId; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "?action=assign")) .header("X-API-Key", API_KEY) .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } // تحديث الحالة public static String updateStatus(int orderId, String status, String location) throws Exception { String body = "order_id=" + orderId + "&status=" + URLEncoder.encode(status, StandardCharsets.UTF_8) + "&location=" + URLEncoder.encode(location, StandardCharsets.UTF_8); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "?action=update_status")) .header("X-API-Key", API_KEY) .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } // تسليم الطلب public static String deliverOrder(int orderId, String notes) throws Exception { String body = "order_id=" + orderId + "¬es=" + URLEncoder.encode(notes, StandardCharsets.UTF_8); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(BASE_URL + "?action=deliver")) .header("X-API-Key", API_KEY) .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } public static void main(String[] args) throws Exception { System.out.println(getAvailableOrders()); System.out.println(assignOrder(1234)); } }
using System; using System.Net.Http; using System.Text; using System.Text.Json; public class DeliveryApiClient { private const string API_KEY = "YOUR_API_KEY_HERE"; private const string BASE_URL = "https://essalmy.com/api/delivery.php"; private static readonly HttpClient client = new HttpClient(); // جلب الطلبات المتاحة public static async Task<string> GetAvailableOrdersAsync() { client.DefaultRequestHeaders.Remove("X-API-Key"); client.DefaultRequestHeaders.Add("X-API-Key", API_KEY); var response = await client.GetAsync( $"{BASE_URL}?action=orders&filter=available" ); return await response.Content.ReadAsStringAsync(); } // تكليف الطلب public static async Task<string> AssignOrderAsync(int orderId) { client.DefaultRequestHeaders.Remove("X-API-Key"); client.DefaultRequestHeaders.Add("X-API-Key", API_KEY); var body = new StringContent( $"order_id={orderId}", Encoding.UTF8, "application/x-www-form-urlencoded" ); var response = await client.PostAsync( $"{BASE_URL}?action=assign", body ); return await response.Content.ReadAsStringAsync(); } // تحديث الحالة public static async Task<string> UpdateStatusAsync( int orderId, string status, string location ) { client.DefaultRequestHeaders.Remove("X-API-Key"); client.DefaultRequestHeaders.Add("X-API-Key", API_KEY); var body = new StringContent( $"order_id={orderId}&status={status}&location={Uri.EscapeDataString(location)}", Encoding.UTF8, "application/x-www-form-urlencoded" ); var response = await client.PostAsync( $"{BASE_URL}?action=update_status", body ); return await response.Content.ReadAsStringAsync(); } // تسليم الطلب public static async Task<string> DeliverOrderAsync(int orderId, string notes) { client.DefaultRequestHeaders.Remove("X-API-Key"); client.DefaultRequestHeaders.Add("X-API-Key", API_KEY); var body = new StringContent( $"order_id={orderId}¬es={Uri.EscapeDataString(notes)}", Encoding.UTF8, "application/x-www-form-urlencoded" ); var response = await client.PostAsync( $"{BASE_URL}?action=deliver", body ); return await response.Content.ReadAsStringAsync(); } public static async Task Main() { Console.WriteLine(await GetAvailableOrdersAsync()); Console.WriteLine(await AssignOrderAsync(1234)); } }
require 'net/http' require 'json' require 'uri' API_KEY = 'YOUR_API_KEY_HERE' BASE_URL = 'https://essalmy.com/api/delivery.php' def make_request(action, method = 'GET', params = {}) uri = URI("#{BASE_URL}?action=#{action}") uri.query = URI.encode_www_form(params) if method == 'GET' && !params.empty? http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if method == 'GET' request = Net::HTTP::Get.new(uri) else request = Net::HTTP::Post.new(uri) request.set_form_data(params) end request['X-API-Key'] = API_KEY response = http.request(request) JSON.parse(response.body) end # 1. جلب الطلبات المتاحة puts "=== جلب الطلبات المتاحة ===" result = make_request('orders', 'GET', { 'filter' => 'available' }) puts result # 2. تكليف الطلب puts "\n=== تكليف الطلب ===" result = make_request('assign', 'POST', { 'order_id' => 1234 }) puts result # 3. تحديث الحالة puts "\n=== تحديث الحالة ===" result = make_request('update_status', 'POST', { 'order_id' => 1234, 'status' => 'in_transit', 'location' => 'شارع الأمير سلطان، الرياض', 'notes' => 'السائق في الطريق' }) puts result # 4. تسليم الطلب puts "\n=== تسليم الطلب ===" result = make_request('deliver', 'POST', { 'order_id' => 1234, 'notes' => 'تم التسليم للعميل' }) puts result
package main import ( "bytes" "encoding/json" "fmt" "io" "net/http" "net/url" ) const ( apiKey = "YOUR_API_KEY_HERE" baseURL = "https://essalmy.com/api/delivery.php" ) func makeRequest(endpoint string, method string, data map[string]string) (map[string]interface{}, error) { fullURL := baseURL + "?action=" + endpoint var req *http.Request var err error if method == "GET" { params := url.Values{} for k, v := range data { params.Set(k, v) } fullURL += "&" + params.Encode() req, err = http.NewRequest("GET", fullURL, nil) } else { form := url.Values{} for k, v := range data { form.Set(k, v) } req, err = http.NewRequest("POST", fullURL, bytes.NewBufferString(form.Encode())) } if err != nil { return nil, err } req.Header.Set("X-API-Key", apiKey) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(body, &result) return result, nil } func main() { // جلب الطلبات المتاحة fmt.Println("=== جلب الطلبات المتاحة ===") orders, _ := makeRequest("orders", "GET", map[string]string{"filter": "available"}) fmt.Println(orders) // تكليف الطلب fmt.Println("\n=== تكليف الطلب ===") result, _ := makeRequest("assign", "POST", map[string]string{"order_id": "1234"}) fmt.Println(result) // تحديث الحالة fmt.Println("\n=== تحديث الحالة ===") result, _ = makeRequest("update_status", "POST", map[string]string{ "order_id": "1234", "status": "in_transit", "location": "شارع الأمير سلطان، الرياض", }) fmt.Println(result) // تسليم الطلب fmt.Println("\n=== تسليم الطلب ===") result, _ = makeRequest("deliver", "POST", map[string]string{ "order_id": "1234", "notes": "تم التسليم للعميل", }) fmt.Println(result) }
import Foundation class DeliveryApiClient { let apiKey = "YOUR_API_KEY_HERE" let baseUrl = "https://essalmy.com/api/delivery.php" // جلب الطلبات المتاحة func getAvailableOrders(completion: @escaping ([String: Any]?) -> Void) { let urlString = "\(baseUrl)?action=orders&filter=available" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "GET" request.setValue(apiKey, forHTTPHeaderField: "X-API-Key") request.setValue("application/json", forHTTPHeaderField: "Content-Type") URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { completion(nil) return } completion(json) }.resume() } // تكليف الطلب func assignOrder(orderId: Int, completion: @escaping ([String: Any]?) -> Void) { let urlString = "\(baseUrl)?action=assign" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue(apiKey, forHTTPHeaderField: "X-API-Key") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.httpBody = "order_id=\(orderId)".data(using: .utf8) URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { completion(nil) return } completion(json) }.resume() } // تحديث الحالة func updateStatus(orderId: Int, status: String, location: String, completion: @escaping ([String: Any]?) -> Void) { let urlString = "\(baseUrl)?action=update_status" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue(apiKey, forHTTPHeaderField: "X-API-Key") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") let body = "order_id=\(orderId)&status=\(status)&location=\(location)" request.httpBody = body.data(using: .utf8) URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { completion(nil) return } completion(json) }.resume() } // تسليم الطلب func deliverOrder(orderId: Int, notes: String, completion: @escaping ([String: Any]?) -> Void) { let urlString = "\(baseUrl)?action=deliver" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue(apiKey, forHTTPHeaderField: "X-API-Key") request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") let body = "order_id=\(orderId)¬es=\(notes)" request.httpBody = body.data(using: .utf8) URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { completion(nil) return } completion(json) }.resume() } } // مثال الاستخدام let api = DeliveryApiClient() api.getAvailableOrders { result in print(result ?? "Error") }
YOUR_API_KEY_HERE بمفتاح API الخاص بك.
📌 ملاحظات مهمة
RATE_LIMIT_EXCEEDED.
📧 البريد الإلكتروني:
mohamed@essalmy.com📱 واتساب:
0647167701🌐 الموقع:
essalmy.com