Introduction

Bienvenue dans la documentation officielle de notre API SMS, un outil puissant et flexible conçu pour transformer la manière dont vous communiquez avec vos utilisateurs. Que vous gériez des notifications transactionnelles, des rappels automatisés, ou des campagnes marketing à grande échelle, notre API REST offre une solution robuste et fiable pour intégrer la messagerie SMS directement dans vos applications.

Dans un monde de plus en plus connecté, où les utilisateurs sont constamment en mouvement, les SMS restent un canal de communication essentiel. Le taux d'ouverture des SMS atteint 98 %, et 90 % des messages sont lus dans les trois premières minutes suivant leur réception. Cette rapidité et cette efficacité font des SMS un moyen incontournable de transmettre des informations importantes, des alertes et des offres marketing. Grâce à notre API SMS, vous pouvez tirer parti de cette opportunité pour optimiser votre relation client et vos processus internes.

L'intégration de notre API est pensée pour être rapide, intuitive, et accessible à tous les développeurs, quels que soient leurs langages de prédilection. Nous offrons des bibliothèques et des exemples de code dans une multitude de langages, incluant PHP, Python, JavaScript, Java, et bien d'autres encore. Que vous soyez en phase de prototypage d'une nouvelle fonctionnalité ou que vous gériez une application en production, notre API s'intègre en quelques minutes avec des requêtes HTTP simples.

L'API repose sur le standards GET pour interagir avec nos services. Les réponses sont fournies en format JSON, un format largement utilisé et facilement manipulable dans tous les langages de programmation. Nous avons également mis en place une documentation détaillée, claire, et complète pour vous guider à chaque étape de l'intégration.

Cette API s'adapte à des cas d'utilisation divers, allant des notifications transactionnelles aux alertes de sécurité, en passant par les campagnes marketing de grande envergure. Nous vous invitons à explorer les sections suivantes pour découvrir en détail toutes les fonctionnalités offertes par notre API.

Authentification

L'accès aux services de notre API SMS est sécurisé par une authentification via la méthode **Basic Auth**, garantissant que seuls les utilisateurs autorisés puissent interagir avec les différents points de terminaison API. Cette authentification repose sur la combinaison d’un *Token* et d’une *Clé API* pour s’assurer que chaque requête provient d'une source fiable et vérifiée.

En utilisant une connexion sécurisée (HTTPS), les informations d'authentification sont chiffrée, offrant une protection maximale contre les accès non autorisés et les tentatives d'interception.

Étapes de l'authentification

L'authentification fonctionne en plusieurs étapes :

Voici un exemple d'en-tête d'authentification pour une requête GET :


GET /api/send_sms.php HTTP/1.1
Host: sms.ligdicash.io
Authorization: Basic VU9UUkVfQVBJX0tFWTpWT1RSRV9UT0tFTg==  
Content-Type: application/json

            

Envoi de SMS

L'envoi de SMS via notre API est une fonctionnalité clé qui permet aux utilisateurs de communiquer avec leurs clients de manière rapide et efficace. Grâce à une intégration simple utilisant des requêtes HTTP.

Structure de la requête GET

La requête PHP pour envoyer un SMS se présente sous la forme suivante :


curl -X GET "https://sms.ligdicash.io/api/send_sms.php" \
-H "Content-Type: application/json" \
-d '{
    "api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "to": "226xxxxxx",
    "message": "Hello Ligdicash"
}'



            

La reponse reuissi de l'envoi du SMS se présente sous la forme suivante :



Array
(
    [success] => 100
    [timestamp] => 2025-01-12T00:55:44+00:00
    [request_id] => SMS_1736643344_678313100f7a56.05321104
    [data] => Array
        (
            [message_id] => MSG_1736643344_6783131093bd1
            [recipient] => 226xxxxxx
            [sender] => SenderName
            [remaining_balance] => 85
            [sent_at] => 2025-01-12T00:55:44+00:00
            [status] => delivered
            [message] => Hello Ligdicash
            [message_info] => Array
                (
                    [length] => 25
                    [encoding] => UTF-8
                    [parts] => 1
                )

        )

)
            

Gestion des erreurs d'authentification

Si la clé API ou Token est révoqués, expirés ou compromis, vous devez en générer une nouvelle à partir de votre compte pour pouvoir continuer à utiliser les services de l'API.

   


L'API utilise des codes d'erreur standardisés pour faciliter le débogage et la gestion des erreurs. Voici la liste complète des codes d'erreur :

Liste des codes d'erreur

| Code  | Constante            | Message                     | Description                                                                 |
|-------|----------------------|-----------------------------|-----------------------------------------------------------------------------|
| 1001  | `AUTH_RATE_LIMIT`    | Rate limit exceeded         | La limite de requêtes erronées autorisées a été dépassée.                   |
| 1002  | `AUTH_INVALID`       | Invalid credentials         | La clé API ou le token est invalide ou manquant.                            |
| 1003  | `INVALID_PARAMS`     | Invalid parameters          | Les paramètres de la requête sont manquants ou invalides.                   |
| 1004  | `INSUFFICIENT_BALANCE` | Insufficient SMS balance  | Le solde SMS est insuffisant pour effectuer l'envoi.                        |
| 1005  | `SMS_SEND_FAILED`    | SMS sending failed          | L'envoi du SMS a échoué pour une raison technique.                          |
| 1006  | `INVALID_PHONE`      | Invalid phone number format | Le numéro de téléphone fourni est dans un format invalide.                  |
| 5000  | `SYSTEM_ERROR`       | Internal system error       | Une erreur interne du système s'est produite.                               |

---

 Détails des erreurs

 1001 - `AUTH_RATE_LIMIT` (Rate limit exceeded)
- Cause : L'utilisateur a dépassé le nombre maximal de requêtes autorisées dans un laps de temps donné.
- Solution : Attendez avant de faire de nouvelles requêtes. Vous pouvez consulter l'en-tête `Retry-After` pour savoir combien de temps attendre.
- Exemple de réponse :
  json
  {
      "success": false,
      "error": {
          "code": 1001,
          "message": "Rate limit exceeded",
          "detail": "Too many requests. Please try again later."
      }
  }
  
  {
    "success": false,
    "error": {
        "code": 1002,
        "message": "Invalid credentials",
        "detail": "The provided API key or token is invalid."
    }
}

{
    "success": false,
    "error": {
        "code": 5000,
        "message": "Internal system error",
        "detail": "An unexpected error occurred. Please try again later."
    }
}

{
    "success": false,
    "error": {
        "code": 1003,
        "message": "Invalid parameters",
        "detail": "Missing required parameter: to"
    }
}

{
    "success": false,
    "error": {
        "code": 1004,
        "message": "Insufficient SMS balance",
        "detail": "You do not have enough SMS credits to send this message."
    }
}
        
                  

En cas d'erreur, il est conseillé de vérifier votre token d'authentification et de consulter la documentation ou contacter notre support technique pour résoudre tout problème lié à l'authentification.

Intégration de l'API

Language d'integration de l'API

Code


curl -X GET "https://sms.ligdicash.io/api/send_sms.php" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "api_key=VOTRE_API_KEY" \
-d "token=VOTRE_TOKEN" \
-d "to=22612345679" \
-d "text=Hello"

                    


// Paramètres d'authentification
$credentials = [
   'api_key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
   'token' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
];

// Configuration du SMS
$sms = [
   'to' => '226xxxxxxxxx',
   'text' => 'Test message' // Votre message
];

function sendSMS($credentials, $sms) {
   // Construction de l'URL avec les paramètres
   $url = 'https://sms.ligdicash.io/api/send_sms.php?' . http_build_query([
       'api_key' => $credentials['api_key'],
       'token' => $credentials['token'],
       'to' => $sms['to'],
       'text' => $sms['text']
   ]);

   try {
       // Configuration de cURL
       $ch = curl_init();
       curl_setopt_array($ch, [
           CURLOPT_URL => $url,
           CURLOPT_RETURNTRANSFER => true,
           CURLOPT_TIMEOUT => 30,
           CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
           CURLOPT_CUSTOMREQUEST => 'GET',
           CURLOPT_HTTPHEADER => [
               'Accept: application/json'
           ]
       ]);

       // Exécution de la requête
       $response = curl_exec($ch);
       $err = curl_error($ch);
       $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

       // Fermeture de la connexion cURL
       curl_close($ch);

       // Gestion des erreurs
       if ($err) {
           throw new Exception("Erreur cURL : " . $err);
       }

       // Décodage de la réponse JSON
       $result = json_decode($response, true);
       
       return [
           'http_code' => $httpCode,
           'response' => $result
       ];

   } catch (Exception $e) {
       return [
           'status' => 'error',
           'message' => $e->getMessage()
       ];
   }
}

// Test d'envoi
$result = sendSMS($credentials, $sms);
print_r($result);


                    

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.StringJoiner;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

public class SMSApi {
    private static final String BASE_URL = "https://sms.ligdicash.io/api/send_sms.php";

    public static class SMSResponse {
        public final String status;
        public final int httpCode;
        public final String response;

        public SMSResponse(String status, int httpCode, String response) {
            this.status = status;
            this.httpCode = httpCode;
            this.response = response;
        }

        @Override
        public String toString() {
            return String.format("SMSResponse{status='%s', httpCode=%d, response='%s'}", 
                status, httpCode, response);
        }
    }

    private static void disableSSLVerification() {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() { return null; }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) { }
                    public void checkServerTrusted(X509Certificate[] certs, String authType) { }
                }
            };

            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SMSResponse sendSMS(Map credentials, Map sms) {
        try {
            // Construction des paramètres
            StringJoiner params = new StringJoiner("&");
            params.add("api_key=" + URLEncoder.encode(credentials.get("api_key"), StandardCharsets.UTF_8.toString()));
            params.add("token=" + URLEncoder.encode(credentials.get("token"), StandardCharsets.UTF_8.toString()));
            params.add("to=" + URLEncoder.encode(sms.get("to"), StandardCharsets.UTF_8.toString()));
            params.add("text=" + URLEncoder.encode(sms.get("text"), StandardCharsets.UTF_8.toString()));

            // Construction de l'URL complète
            String urlString = BASE_URL + "?" + params.toString();
            URL url = new URL(urlString);

            // Désactive la vérification SSL pour le test
            disableSSLVerification();

            // Configuration de la connexion
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);

            // Lecture de la réponse
            int responseCode = conn.getResponseCode();
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            return new SMSResponse("success", responseCode, response.toString());

        } catch (Exception e) {
            return new SMSResponse("error", 500, e.getMessage());
        }
    }

    public static void main(String[] args) {
        // Paramètres d'authentification
        Map credentials = new HashMap<>();
        credentials.put("api_key", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        credentials.put("token", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

        // Configuration du SMS
        Map sms = new HashMap<>();
        sms.put("to", "226xxxxxxxxxxx");
        sms.put("text", "Test message");

        // Test d'envoi
        SMSResponse result = sendSMS(credentials, sms);
        System.out.println(result);
    }
}

                        
                    

import requests
from urllib.parse import urlencode

def send_sms(credentials, sms):
    # Construction des paramètres
    params = {
        'api_key': credentials['api_key'],
        'token': credentials['token'],
        'to': sms['to'],
        'text': sms['text']
    }
    
    # URL de base
    base_url = 'https://sms.ligdicash.io/api/send_sms.php'
    
    # Construction de l'URL complète avec les paramètres
    url = f"{base_url}?{urlencode(params)}"
    
    try:
        # Configuration des headers
        headers = {
            'Accept': 'application/json'
        }
        
        # Envoi de la requête GET
        response = requests.get(
            url,
            headers=headers,
            timeout=30,
            verify=False  # Désactive la vérification SSL pour le test
        )
        
        # Vérification du statut de la réponse
        response.raise_for_status()
        
        # Retourne la réponse en format JSON
        return {
            'status': 'success',
            'http_code': response.status_code,
            'response': response.json()
        }
        
    except requests.exceptions.RequestException as e:
        return {
            'status': 'error',
            'message': str(e)
        }

# Test de la fonction
if __name__ == "__main__":
    # Paramètres d'authentification
    credentials = {
        'api_key': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
        'token': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    }
    
    # Configuration du SMS
    sms = {
        'to': '226xxxxxxxxx',
        'text': 'Test message'
    }
    
    # Envoi du SMS
    result = send_sms(credentials, sms)
    print(result)

                    

const axios = require('axios');
const querystring = require('querystring');

async function sendSMS(credentials, sms) {
    // Construction des paramètres
    const params = {
        api_key: credentials.api_key,
        token: credentials.token,
        to: sms.to,
        text: sms.text
    };

    // URL de base
    const baseUrl = 'https://sms.ligdicash.io/api/send_sms.php';
    
    // Construction de l'URL complète
    const url = `${baseUrl}?${querystring.stringify(params)}`;

    try {
        // Configuration de la requête
        const config = {
            headers: {
                'Accept': 'application/json'
            },
            timeout: 30000,
            httpsAgent: new require('https').Agent({  
                rejectUnauthorized: false // Désactive la vérification SSL pour le test
            })
        };

        // Envoi de la requête GET
        const response = await axios.get(url, config);

        return {
            status: 'success',
            http_code: response.status,
            response: response.data
        };

    } catch (error) {
        return {
            status: 'error',
            message: error.message,
            details: error.response?.data
        };
    }
}

// Test de la fonction
const credentials = {
    api_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
};

const sms = {
    to: '226xxxxxxxxx',
    text: 'Test message'
};

// Utilisation avec async/await
(async () => {
    try {
        const result = await sendSMS(credentials, sms);
        console.log(result);
    } catch (error) {
        console.error('Error:', error);
    }
})();