deliverydash / php-sdk
Official PHP SDK for DeliveryDash API integration
Installs: 62
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/deliverydash/php-sdk
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2025-12-27 07:00:28 UTC
README
Official PHP SDK for integrating with DeliveryDash API to enable WhatsApp ordering and menu synchronization.
Installation
composer require deliverydash/php-sdk
Quick Start
<?php require_once 'vendor/autoload.php'; use DeliveryDash\DeliveryDash; // Initialize SDK with your Restaurant API Key $deliveryDash = new DeliveryDash('your-restaurant-api-key'); // Sync your menu $menuItems = [ [ 'name' => 'Margherita Pizza', 'description' => 'Fresh tomato, mozzarella, basil', 'price' => 120.00, 'category' => 'Pizza', 'available' => true, 'modifiers' => [ ['name' => 'Extra Cheese', 'price' => 15.00], ['name' => 'Large Size', 'price' => 25.00] ] ] ]; $response = $deliveryDash->menus()->sync($menuItems); // Get new orders from WhatsApp $orders = $deliveryDash->orders()->getNew(); foreach($orders as $order) { // Process order in your system echo "New order: " . $order['id'] . "\n"; // Update order status $deliveryDash->orders()->confirm($order['id']); }
Configuration
$deliveryDash = new DeliveryDash('your-restaurant-api-key', [ 'base_url' => 'https://guqfrxvdxuabjjzzrnai.supabase.co/functions/v1', 'timeout' => 30, 'debug' => true, 'headers' => [ 'X-Restaurant-ID' => 'your-restaurant-id' ] ]);
Getting Your API Key
- Log into the DeliveryDash admin panel
- Go to Restaurant Management
- Select your restaurant
- Navigate to the "API Keys" tab
- Click "Generate New API Key"
- Set the required permissions:
- ✅
menu_sync: For syncing menu items - ✅
orders: For receiving and managing orders - ✅
read/write: For general operations
- ✅
- Copy the generated API key and store it securely in your
.envfile
Important: Store your API key in your .env file as:
DELIVERYDASH_API_KEY=your_generated_api_key_here
Menu Management
Sync Menu Items
// Sync entire menu $response = $deliveryDash->menus()->sync($menuItems); // Create single item $item = $deliveryDash->menus()->createItem([ 'name' => 'New Pizza', 'price' => 100.00, 'category' => 'Pizza' ]); // Update availability $deliveryDash->menus()->updateAvailability('item-id', false); // Bulk update availability $deliveryDash->menus()->bulkUpdateAvailability([ ['id' => 'item-1', 'available' => false], ['id' => 'item-2', 'available' => true] ]);
Menu Item Format
$menuItem = [ 'name' => 'Item Name', // Required 'description' => 'Description', // Optional 'price' => 99.99, // Required (float) 'category' => 'Category', // Optional 'available' => true, // Optional (default: true) 'image_url' => 'https://...', // Optional 'external_id' => 'your-id', // Optional - your system's ID 'modifiers' => [ // Optional [ 'name' => 'Modifier Name', 'price' => 10.00, 'required' => false, 'type' => 'addon' ] ] ];
Order Management
Get Orders
// Get new orders $newOrders = $deliveryDash->orders()->getNew(); // Get all orders with filters $orders = $deliveryDash->orders()->getAll([ 'status' => 'pending', 'date_from' => '2024-01-01', 'date_to' => '2024-01-31' ]); // Get specific order $order = $deliveryDash->orders()->get('order-id');
Update Order Status
// Confirm order $deliveryDash->orders()->confirm('order-id'); // Mark as preparing $deliveryDash->orders()->preparing('order-id', 30); // 30 minutes // Ready for pickup $deliveryDash->orders()->readyForPickup('order-id'); // Out for delivery $deliveryDash->orders()->outForDelivery('order-id', [ 'driver_name' => 'John Doe', 'driver_phone' => '+27123456789' ]); // Delivered $deliveryDash->orders()->delivered('order-id'); // Cancel order $deliveryDash->orders()->cancel('order-id', 'Out of stock');
Send Custom Messages
// Send message to customer via WhatsApp $deliveryDash->orders()->sendMessage('order-id', 'Your order will be ready in 10 minutes!');
Convert to Local Format
$orders = $deliveryDash->orders()->getNew(); foreach($orders as $order) { $localOrder = $deliveryDash->orders()->toLocalFormat($order); // Create in your local database $localOrderId = YourOrderModel::create($localOrder); }
Webhook Management
Register Webhook
$webhook = $deliveryDash->webhooks()->register('https://yoursite.com/webhook', [ 'order.created', 'order.updated', 'order.cancelled' ]);
Handle Webhook
// In your webhook endpoint $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_DELIVERYDASH_SIGNATURE'] ?? ''; try { $event = $deliveryDash->webhooks()->handle($payload, $signature, 'your-webhook-secret'); switch($event['event_type']) { case 'order.created': handleNewOrder($event['data']); break; case 'order.updated': handleOrderUpdate($event['data']); break; } http_response_code(200); echo 'OK'; } catch (Exception $e) { http_response_code(400); echo 'Error: ' . $e->getMessage(); }
Error Handling
use DeliveryDash\Exceptions\ApiException; use DeliveryDash\Exceptions\AuthenticationException; use DeliveryDash\Exceptions\RateLimitException; try { $response = $deliveryDash->menus()->sync($menuItems); } catch (AuthenticationException $e) { echo 'Authentication failed: ' . $e->getMessage(); } catch (RateLimitException $e) { echo 'Rate limit exceeded: ' . $e->getMessage(); } catch (ApiException $e) { echo 'API error: ' . $e->getMessage(); }
Testing Connection
if ($deliveryDash->testConnection()) { echo 'Connection successful!'; } else { echo 'Connection failed!'; }
Requirements
- PHP 7.4 or higher
- Guzzle HTTP client
- JSON extension
Framework Integration Examples
Laravel Integration
1. Install and Configure
composer require deliverydash/php-sdk
Add to your .env:
DELIVERYDASH_API_KEY=your_restaurant_api_key_here DELIVERYDASH_DEBUG=false
2. Create a Service Provider
<?php // app/Providers/DeliveryDashServiceProvider.php namespace App\Providers; use Illuminate\Support\ServiceProvider; use DeliveryDash\DeliveryDash; class DeliveryDashServiceProvider extends ServiceProvider { public function register() { $this->app->singleton(DeliveryDash::class, function ($app) { return new DeliveryDash(config('services.deliverydash.api_key'), [ 'debug' => config('services.deliverydash.debug', false), 'timeout' => 60 ]); }); } }
Add to config/services.php:
'deliverydash' => [ 'api_key' => env('DELIVERYDASH_API_KEY'), 'debug' => env('DELIVERYDASH_DEBUG', false), ],
Register the provider in config/app.php:
'providers' => [ // ... App\Providers\DeliveryDashServiceProvider::class, ],
3. Create a Controller
<?php // app/Http/Controllers/MenuController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use DeliveryDash\DeliveryDash; use App\Models\MenuItem; class MenuController extends Controller { protected $deliveryDash; public function __construct(DeliveryDash $deliveryDash) { $this->deliveryDash = $deliveryDash; } public function syncMenu() { $menuItems = MenuItem::where('is_active', true)->get()->map(function ($item) { return [ 'external_id' => $item->id, 'name' => $item->name, 'description' => $item->description, 'price' => $item->price, 'category' => $item->category, 'available' => $item->is_available, 'image_url' => $item->image_url, 'preparation_time' => $item->prep_time_minutes, ]; })->toArray(); try { $response = $this->deliveryDash->menus()->sync($menuItems); return response()->json(['success' => true, 'synced' => count($menuItems)]); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } public function getOrders() { try { $orders = $this->deliveryDash->orders()->getNew(); foreach ($orders as $order) { // Create local order record $localOrder = \App\Models\Order::create([ 'deliverydash_id' => $order['id'], 'customer_name' => $order['customer_name'], 'customer_phone' => $order['customer_phone'], 'items' => json_encode($order['items']), 'total_amount' => $order['total_amount'], 'status' => 'received' ]); // Confirm with DeliveryDash $this->deliveryDash->orders()->confirm($order['id']); } return response()->json(['orders_processed' => count($orders)]); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } }
4. Webhook Handler
<?php // app/Http/Controllers/WebhookController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use DeliveryDash\DeliveryDash; class WebhookController extends Controller { public function handle(Request $request, DeliveryDash $deliveryDash) { $payload = $request->getContent(); $signature = $request->header('X-DeliveryDash-Signature'); try { $event = $deliveryDash->webhooks()->handle( $payload, $signature, config('services.deliverydash.webhook_secret') ); switch ($event['event_type']) { case 'order.created': $this->handleNewOrder($event['data']); break; case 'order.updated': $this->handleOrderUpdate($event['data']); break; } return response('OK', 200); } catch (\Exception $e) { \Log::error('DeliveryDash webhook error: ' . $e->getMessage()); return response('Error', 400); } } private function handleNewOrder($orderData) { // Handle new order logic \Log::info('New DeliveryDash order received', $orderData); } private function handleOrderUpdate($orderData) { // Handle order update logic \Log::info('DeliveryDash order updated', $orderData); } }
5. Artisan Commands
<?php // app/Console/Commands/SyncMenuCommand.php namespace App\Console\Commands; use Illuminate\Console\Command; use DeliveryDash\DeliveryDash; class SyncMenuCommand extends Command { protected $signature = 'deliverydash:sync-menu'; protected $description = 'Sync menu items with DeliveryDash'; public function handle(DeliveryDash $deliveryDash) { $this->info('Syncing menu with DeliveryDash...'); // Your menu sync logic here $this->info('Menu sync completed!'); } }
CodeIgniter Integration
1. Install SDK
composer require deliverydash/php-sdk
2. Environment Configuration
Add to your .env:
DELIVERYDASH_API_KEY=your_restaurant_api_key_here
3. Create a Library
<?php // application/libraries/Deliverydash_lib.php defined('BASEPATH') OR exit('No direct script access allowed'); require_once FCPATH . 'vendor/autoload.php'; use DeliveryDash\DeliveryDash; class Deliverydash_lib { private $deliveryDash; private $CI; public function __construct() { $this->CI =& get_instance(); $this->CI->load->library('session'); $apiKey = getenv('DELIVERYDASH_API_KEY'); if (!$apiKey) { show_error('DeliveryDash API key not configured'); } $this->deliveryDash = new DeliveryDash($apiKey, [ 'debug' => ENVIRONMENT === 'development' ]); } public function syncMenu($menuItems) { try { return $this->deliveryDash->menus()->sync($menuItems); } catch (Exception $e) { log_message('error', 'DeliveryDash menu sync failed: ' . $e->getMessage()); throw $e; } } public function getNewOrders() { try { return $this->deliveryDash->orders()->getNew(); } catch (Exception $e) { log_message('error', 'DeliveryDash get orders failed: ' . $e->getMessage()); throw $e; } } public function confirmOrder($orderId) { try { return $this->deliveryDash->orders()->confirm($orderId); } catch (Exception $e) { log_message('error', 'DeliveryDash confirm order failed: ' . $e->getMessage()); throw $e; } } public function updateOrderStatus($orderId, $status, $data = []) { try { return $this->deliveryDash->orders()->updateStatus($orderId, $status, $data); } catch (Exception $e) { log_message('error', 'DeliveryDash update status failed: ' . $e->getMessage()); throw $e; } } }
4. Create Controllers
<?php // application/controllers/Menu.php defined('BASEPATH') OR exit('No direct script access allowed'); class Menu extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('deliverydash_lib'); $this->load->model('menu_model'); } public function sync() { try { $menuItems = $this->menu_model->get_active_items(); $formattedItems = array_map(function($item) { return [ 'external_id' => $item['id'], 'name' => $item['name'], 'description' => $item['description'], 'price' => (float)$item['price'], 'category' => $item['category'], 'available' => (bool)$item['is_available'], 'image_url' => $item['image_url'] ]; }, $menuItems); $response = $this->deliverydash_lib->syncMenu($formattedItems); $this->output ->set_content_type('application/json') ->set_output(json_encode([ 'success' => true, 'message' => 'Menu synced successfully', 'items_synced' => count($formattedItems) ])); } catch (Exception $e) { $this->output ->set_status_header(500) ->set_content_type('application/json') ->set_output(json_encode([ 'success' => false, 'error' => $e->getMessage() ])); } } }
<?php // application/controllers/Orders.php defined('BASEPATH') OR exit('No direct script access allowed'); class Orders extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('deliverydash_lib'); $this->load->model('order_model'); } public function fetch_new() { try { $orders = $this->deliverydash_lib->getNewOrders(); foreach ($orders as $order) { // Save to local database $localOrderId = $this->order_model->create_order([ 'deliverydash_id' => $order['id'], 'customer_name' => $order['customer_name'], 'customer_phone' => $order['customer_phone'], 'items' => json_encode($order['items']), 'total_amount' => $order['total_amount'], 'status' => 'received', 'created_at' => date('Y-m-d H:i:s') ]); // Confirm with DeliveryDash $this->deliverydash_lib->confirmOrder($order['id']); } $this->output ->set_content_type('application/json') ->set_output(json_encode([ 'success' => true, 'orders_processed' => count($orders) ])); } catch (Exception $e) { $this->output ->set_status_header(500) ->set_content_type('application/json') ->set_output(json_encode([ 'success' => false, 'error' => $e->getMessage() ])); } } public function webhook() { try { $payload = file_get_contents('php://input'); $signature = $this->input->get_request_header('X-DeliveryDash-Signature', TRUE); // Handle webhook (implement webhook handling logic) $this->output ->set_content_type('text/plain') ->set_output('OK'); } catch (Exception $e) { log_message('error', 'Webhook error: ' . $e->getMessage()); $this->output ->set_status_header(400) ->set_content_type('text/plain') ->set_output('Error'); } } }
Generic PHP Integration
1. Basic Setup
<?php // config.php require_once 'vendor/autoload.php'; use DeliveryDash\DeliveryDash; // Load environment variables $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); // Initialize DeliveryDash $deliveryDash = new DeliveryDash($_ENV['DELIVERYDASH_API_KEY'], [ 'debug' => $_ENV['APP_ENV'] === 'development', 'timeout' => 60 ]); return $deliveryDash;
2. Menu Sync Script
<?php // sync_menu.php $deliveryDash = require_once 'config.php'; // Your menu data (from database, API, etc.) $menuItems = [ [ 'external_id' => 'pizza-001', 'name' => 'Margherita Pizza', 'description' => 'Fresh tomatoes, mozzarella, basil', 'price' => 120.00, 'category' => 'Pizzas', 'available' => true, 'image_url' => 'https://yoursite.com/images/margherita.jpg', 'preparation_time' => 25 ], [ 'external_id' => 'burger-001', 'name' => 'Classic Beef Burger', 'description' => 'Beef patty, lettuce, tomato, onion', 'price' => 85.00, 'category' => 'Burgers', 'available' => true, 'image_url' => 'https://yoursite.com/images/burger.jpg', 'preparation_time' => 15 ] ]; try { $response = $deliveryDash->menus()->sync($menuItems); echo "Menu synced successfully!\n"; echo "Items synced: " . count($menuItems) . "\n"; } catch (Exception $e) { echo "Error syncing menu: " . $e->getMessage() . "\n"; exit(1); }
3. Order Processing Script
<?php // process_orders.php $deliveryDash = require_once 'config.php'; try { // Get new orders $newOrders = $deliveryDash->orders()->getNew(); echo "Found " . count($newOrders) . " new orders\n"; foreach ($newOrders as $order) { echo "Processing order: " . $order['id'] . "\n"; // Save to your database/system saveOrderToDatabase($order); // Confirm with DeliveryDash $deliveryDash->orders()->confirm($order['id']); echo "Order confirmed: " . $order['id'] . "\n"; // Update status as you process sleep(2); // Simulate processing time $deliveryDash->orders()->preparing($order['id'], 20); // 20 minutes echo "Order marked as preparing: " . $order['id'] . "\n"; } } catch (Exception $e) { echo "Error processing orders: " . $e->getMessage() . "\n"; exit(1); } function saveOrderToDatabase($order) { // Your database saving logic here // Example using PDO: $pdo = new PDO('mysql:host=localhost;dbname=restaurant', $username, $password); $stmt = $pdo->prepare(" INSERT INTO orders (deliverydash_id, customer_name, customer_phone, items, total_amount, status) VALUES (?, ?, ?, ?, ?, ?) "); $stmt->execute([ $order['id'], $order['customer_name'], $order['customer_phone'], json_encode($order['items']), $order['total_amount'], 'received' ]); }
4. Webhook Endpoint
<?php // webhook.php $deliveryDash = require_once 'config.php'; // Get webhook data $payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_DELIVERYDASH_SIGNATURE'] ?? ''; try { $event = $deliveryDash->webhooks()->handle($payload, $signature, $_ENV['DELIVERYDASH_WEBHOOK_SECRET']); // Log the event error_log("DeliveryDash webhook: " . $event['event_type']); switch ($event['event_type']) { case 'order.created': handleNewOrder($event['data']); break; case 'order.updated': handleOrderUpdate($event['data']); break; case 'order.cancelled': handleOrderCancellation($event['data']); break; default: error_log("Unknown event type: " . $event['event_type']); } http_response_code(200); echo 'OK'; } catch (Exception $e) { error_log("Webhook error: " . $e->getMessage()); http_response_code(400); echo 'Error: ' . $e->getMessage(); } function handleNewOrder($orderData) { // Handle new order error_log("New order received: " . $orderData['id']); } function handleOrderUpdate($orderData) { // Handle order update error_log("Order updated: " . $orderData['id']); } function handleOrderCancellation($orderData) { // Handle order cancellation error_log("Order cancelled: " . $orderData['id']); }
5. Cron Job Setup
# Add to your crontab (crontab -e) # Check for new orders every 2 minutes */2 * * * * /usr/bin/php /path/to/your/process_orders.php # Sync menu daily at 3 AM 0 3 * * * /usr/bin/php /path/to/your/sync_menu.php
Support
For support, email developers@deliverydash.co.za or visit our documentation at https://docs.deliverydash.co.za
DEV - initialising repo
git init git add README.md git commit -m "first commit" git branch -M main git remote add origin https://github.com/deliverydash/deliverydash-sdk.git git push -u origin main
or
git remote add origin https://github.com/deliverydash/deliverydash-sdk.git git branch -M main git push -u origin main