Lister les Forfaits Mobile
curl --request GET \
--url https://api.oneclickdz.com/v3/mobile/plans \
--header 'X-Access-Token: <api-key>'import requests
url = "https://api.oneclickdz.com/v3/mobile/plans"
headers = {"X-Access-Token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Access-Token': '<api-key>'}};
fetch('https://api.oneclickdz.com/v3/mobile/plans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.oneclickdz.com/v3/mobile/plans",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.oneclickdz.com/v3/mobile/plans"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.oneclickdz.com/v3/mobile/plans")
.header("X-Access-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.oneclickdz.com/v3/mobile/plans")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"dynamicPlans": [
{
"code": "<string>",
"name": "<string>",
"operator": "<string>",
"cost": 123,
"isEnabled": true,
"min_amount": 123,
"max_amount": 123
}
],
"fixedPlans": [
{
"code": "<string>",
"name": "<string>",
"operator": "<string>",
"cost": 123,
"isEnabled": true,
"amount": 123
}
]
},
"meta": {
"timestamp": "<string>"
}
}Recharges mobiles
Lister les Forfaits Mobile
Obtenir tous les forfaits de recharge mobile disponibles pour les opérateurs algériens
GET
/
v3
/
mobile
/
plans
Lister les Forfaits Mobile
curl --request GET \
--url https://api.oneclickdz.com/v3/mobile/plans \
--header 'X-Access-Token: <api-key>'import requests
url = "https://api.oneclickdz.com/v3/mobile/plans"
headers = {"X-Access-Token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Access-Token': '<api-key>'}};
fetch('https://api.oneclickdz.com/v3/mobile/plans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.oneclickdz.com/v3/mobile/plans",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.oneclickdz.com/v3/mobile/plans"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.oneclickdz.com/v3/mobile/plans")
.header("X-Access-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.oneclickdz.com/v3/mobile/plans")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"dynamicPlans": [
{
"code": "<string>",
"name": "<string>",
"operator": "<string>",
"cost": 123,
"isEnabled": true,
"min_amount": 123,
"max_amount": 123
}
],
"fixedPlans": [
{
"code": "<string>",
"name": "<string>",
"operator": "<string>",
"cost": 123,
"isEnabled": true,
"amount": 123
}
]
},
"meta": {
"timestamp": "<string>"
}
}Vue d’Ensemble
Retourne une liste complète de tous les forfaits de recharge mobile disponibles pour les opérateurs Mobilis, Djezzy et Ooredoo.Les forfaits sont stables et changent rarement. Vous pouvez les mettre en cache dans votre base de données avec votre propre tarification.
Types de Forfaits
- Forfaits Dynamiques
- Forfaits Fixes
- Forfaits GetMenu
Forfaits à montant variable où vous spécifiez le montant dans une plage donnée.
Exemples : Prépayé, Postpayé (Facture), International Champs requis : -
plan_code - MSSIDN (numéro de téléphone) - amount (entre min_amount et max_amount)Forfaits à montant fixe qui sont directement activés. Exemples : “Pixx 500”,
“Special 2000”, “Data Pack 1GB” Champs requis : -
plan_code - MSSIDN
(numéro de téléphone) - Le montant est prédéfini (champ amount dans la réponse)Forfaits spéciaux qui récupèrent toutes les offres disponibles pour un numéro spécifique.
Codes :
GETMENU_Mobilis, GETMENU_Ooredoo, GETMENU_Djezzy Retourne les offres disponibles de l’utilisateur en fonction de son abonnement.Réponse
boolean
requis
Indique si la requête a réussi
object
requis
Afficher properties
Afficher properties
array
requis
Tableau de forfaits à montant variable où vous spécifiez le montant dans une plage donnée
Afficher Dynamic plan object
Afficher Dynamic plan object
string
Code de forfait unique pour les requêtes API
string
Nom de forfait convivial pour l’affichage
string
Opérateur mobile : Mobilis, Djezzy, Ooredoo (ou GMobilis, GDjezzy, GOoredoo pour la vente en gros)
number
Votre multiplicateur de coût (ex. : 0,96 = vous payez 960 DZD pour une recharge de 1000 DZD). Présent uniquement pour les forfaits de détail.
boolean
Indique si le forfait est actuellement disponible
number
Montant minimum de recharge en DZD
number
Montant maximum de recharge en DZD
array
requis
Tableau de forfaits à montant fixe directement activés
Exemples
curl https://api.oneclickdz.com/v3/mobile/plans \
-H "X-Access-Token: YOUR_API_KEY"
const response = await fetch("https://api.oneclickdz.com/v3/mobile/plans", {
headers: { "X-Access-Token": "YOUR_API_KEY" },
});
const { data } = await response.json();
console.log(data.dynamicPlans, data.fixedPlans);
import requests
response = requests.get(
'https://api.oneclickdz.com/v3/mobile/plans',
headers={'X-Access-Token': 'YOUR_API_KEY'}
)
data = response.json()['data']
dynamic_plans = data['dynamicPlans']
fixed_plans = data['fixedPlans']
<?php
$ch = curl_init('https://api.oneclickdz.com/v3/mobile/plans');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Access-Token: YOUR_API_KEY']);
$response = json_decode(curl_exec($ch), true);
$dynamicPlans = $response['data']['dynamicPlans'];
$fixedPlans = $response['data']['fixedPlans'];
?>
Exemple de Réponse
{
"success": true,
"data": {
"dynamicPlans": [
{
"code": "GROS_MOBILIS",
"name": "📱 GROS MOBILIS | جملة",
"operator": "GMobilis",
"isEnabled": true,
"min_amount": 5000,
"max_amount": 300000
},
{
"code": "PREPAID_DJEZZY",
"name": "📱 PREPAID | عادي",
"operator": "Djezzy",
"cost": 0.9925,
"isEnabled": true,
"min_amount": 100,
"max_amount": 10000
}
],
"fixedPlans": [
{
"code": "MIX50_DJEZZY",
"name": "📱🌐 Auto | MIX 50",
"operator": "Djezzy",
"isEnabled": true,
"cost": 0.9925,
"amount": 50
},
{
"code": "MIX1000_OOREDOO",
"name": "📱🌐 AUTO | MIX 1000",
"operator": "Ooredoo",
"isEnabled": true,
"cost": 0.99,
"amount": 1000
}
]
},
"meta": {
"timestamp": "2025-10-29T00:35:59.220Z"
}
}
Explication des Propriétés des Forfaits
Comprendre le Coût
Comprendre le Coût
Le champ
cost est votre multiplicateur de prix de gros :0.98= Vous payez 98% de la valeur nominale- Pour une recharge de 1000 DZD : votre coût = 1000 × 0,98 = 980 DZD
- Votre marge bénéficiaire : 1000 - 980 = 20 DZD (2%)
cost des réponses aux utilisateurs finaux. Appliquez votre propre majoration.Plages de Montant
Plages de Montant
Les forfaits dynamiques ont
min_amount et max_amount : - Les utilisateurs peuvent choisir n’importe quel
montant dans cette plage - Plage courante : 50 - 5000 DZD - Certains opérateurs permettent
jusqu’à 10 000 DZD Les forfaits fixes ont un seul amount : - Pas de sélection de montant
nécessaire - Active directement le service - Courant pour les offres spéciales et les packs de donnéesDisponibilité des Forfaits
Disponibilité des Forfaits
Le champ
isEnabled indique :true: Forfait disponible pour utilisationfalse: Temporairement désactivé (maintenance, problèmes d’opérateur)
Stratégie d’Intégration
1
Chargement Initial
Appelez cet endpoint une fois au démarrage de votre application ou lors de la configuration
2
Stocker les Forfaits
Sauvegardez les forfaits dans votre base de données avec votre propre tarification
CREATE TABLE mobile_plans (
code VARCHAR PRIMARY KEY,
name VARCHAR,
operator VARCHAR,
our_cost DECIMAL,
sell_price DECIMAL,
min_amount INT,
max_amount INT,
amount INT,
is_enabled BOOLEAN,
updated_at TIMESTAMP
);
3
Appliquer la Majoration
Calculez votre prix de vente :
const ourCost = faceValue * plan.cost;
const markup = 0.05; // 5% profit
const sellPrice = ourCost * (1 + markup);
4
Servir aux Utilisateurs
Affichez les forfaits avec votre tarification aux utilisateurs finaux
{
code: plan.code,
name: plan.name,
operator: plan.operator,
price: sellPrice, // Your price, not wholesale cost
minAmount: plan.min_amount,
maxAmount: plan.max_amount
}
5
Synchronisation Périodique
Synchronisez les forfaits quotidiennement ou lors de notifications de changements
// Daily sync at midnight
cron.schedule('0 0 * * *', syncPlans);
Filtrage des Forfaits
const mobilisPlans = [
...data.dynamicPlans.filter((p) => p.operator === "Mobilis"),
...data.fixedPlans.filter((p) => p.operator === "Mobilis")
];
const djezzyPlans = [
...data.dynamicPlans.filter((p) => p.operator === "Djezzy"),
...data.fixedPlans.filter((p) => p.operator === "Djezzy")
];
const dynamicPlans = data.dynamicPlans;
const fixedPlans = data.fixedPlans;
const allPlans = [...data.dynamicPlans, ...data.fixedPlans];
const availableDynamic = data.dynamicPlans.filter((p) => p.isEnabled);
const availableFixed = data.fixedPlans.filter((p) => p.isEnabled);
Bonnes Pratiques
Mettre en Cache les Forfaits
Stockez les forfaits dans votre base de données pour réduire les appels API et améliorer les performances
Supprimer le Coût
N’exposez jamais le
cost de gros aux utilisateurs finaux. Affichez uniquement vos prix de détailVérifier isEnabled
Vérifiez toujours
isEnabled avant d’afficher les forfaits aux utilisateursSynchroniser Régulièrement
Implémentez une synchronisation quotidienne ou un listener de webhook pour les mises à jour de forfaits
Endpoints Associés
Envoyer une Recharge
Envoyer une recharge mobile avec un code de forfait
Vérifier le Statut
Suivre le statut de la recharge

