OTP
Vérifier un OTP
Vérifie si le code OTP fourni par l’utilisateur est valide
POST
/
verify
/
otp
Vérifier un OTP
curl --request POST \
--url https://api.example.com/verify/otp \
--header 'Content-Type: application/json' \
--data '
{
"otp": "<string>",
"number": "<string>",
"service": "<string>"
}
'import requests
url = "https://api.example.com/verify/otp"
payload = {
"otp": "<string>",
"number": "<string>",
"service": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({otp: '<string>', number: '<string>', service: '<string>'})
};
fetch('https://api.example.com/verify/otp', 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.example.com/verify/otp",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'otp' => '<string>',
'number' => '<string>',
'service' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/verify/otp"
payload := strings.NewReader("{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/verify/otp")
.header("Content-Type", "application/json")
.body("{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/verify/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": "Code de vérification invalide",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification expiré",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification déjà vérifié",
"error": "Bad Request"
}
{
"statusCode": 404,
"message": "Code de vérification non trouvé ou déjà vérifié",
"error": "Not Found"
}
Description
Cet endpoint permet de vérifier si le code OTP saisi par l’utilisateur correspond au code envoyé précédemment viaPOST /send/otp.
Paramètres de la requête
string
required
Le code OTP à 4 chiffres saisi par l’utilisateur.Exemple :
"1234"string
required
Le numéro de téléphone auquel l’OTP a été envoyé (au format international sans le
+).Exemple : "221771234567"string
required
Le nom du service pour lequel l’OTP a été demandé. Doit correspondre au service utilisé lors de l’envoi.Exemple :
"MonApplication"Exemple de requête
curl -X POST https://api-v2.dexchange-sms.com/api/v1/verify/otp \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{
"otp": "1234",
"number": "221771234567",
"service": "MonApplication"
}'
const response = await fetch('https://api-v2.dexchange-sms.com/api/v1/verify/otp', {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_CLE_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
otp: '1234',
number: '221771234567',
service: 'MonApplication'
})
});
const data = await response.json();
if (data.success) {
console.log('✓ Numéro vérifié avec succès !');
// Continuer le processus d'inscription/connexion
} else {
console.log('✗ Code invalide');
}
import requests
response = requests.post(
'https://api-v2.dexchange-sms.com/api/v1/verify/otp',
headers={
'Authorization': 'Bearer VOTRE_CLE_API',
'Content-Type': 'application/json'
},
json={
'otp': '1234',
'number': '221771234567',
'service': 'MonApplication'
}
)
data = response.json()
if data.get('success'):
print('✓ Numéro vérifié avec succès !')
else:
print('✗ Code invalide')
<?php
$data = [
'otp' => '1234',
'number' => '221771234567',
'service' => 'MonApplication'
];
$ch = curl_init('https://api-v2.dexchange-sms.com/api/v1/verify/otp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer VOTRE_CLE_API',
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if ($result['success']) {
echo '✓ Numéro vérifié avec succès !';
} else {
echo '✗ Code invalide';
}
Réponse
boolean
true si le code est valide, false sinonstring
Message décrivant le résultat de la vérification
Exemple de réponse réussie
{
"success": true,
"message": "Code de vérification vérifié avec succès"
}
Erreurs possibles
{
"statusCode": 400,
"message": "Code de vérification invalide",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification expiré",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification déjà vérifié",
"error": "Bad Request"
}
{
"statusCode": 404,
"message": "Code de vérification non trouvé ou déjà vérifié",
"error": "Not Found"
}
Exemple d’intégration complète
Voici un exemple complet d’un flux de vérification de numéro :JavaScript
// 1. Envoyer l'OTP
async function sendOTP(phoneNumber) {
const response = await fetch('https://api-v2.dexchange-sms.com/api/v1/send/otp', {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_CLE_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
service: 'MonApplication',
number: phoneNumber,
channel: 'sms'
})
});
return response.json();
}
// 2. Vérifier l'OTP saisi par l'utilisateur
async function verifyOTP(phoneNumber, userCode) {
const response = await fetch('https://api-v2.dexchange-sms.com/api/v1/verify/otp', {
method: 'POST',
headers: {
'Authorization': 'Bearer VOTRE_CLE_API',
'Content-Type': 'application/json'
},
body: JSON.stringify({
otp: userCode,
number: phoneNumber,
service: 'MonApplication'
})
});
const data = await response.json();
return data.success;
}
// Utilisation
const phone = '221771234567';
// Étape 1: Envoyer le code
await sendOTP(phone);
console.log('Code envoyé !');
// Étape 2: L'utilisateur saisit le code (ex: via un formulaire)
const userInput = '1234'; // Code saisi par l'utilisateur
// Étape 3: Vérifier le code
const isValid = await verifyOTP(phone, userInput);
if (isValid) {
console.log('✓ Numéro vérifié ! Continuer le processus...');
} else {
console.log('✗ Code invalide. Veuillez réessayer.');
}
Bonnes pratiques
Limitation des tentatives : Limitez le nombre de tentatives de vérification (ex: 3 tentatives) pour éviter les attaques par force brute.
Ne pas réutiliser un code : Une fois vérifié, le code ne peut plus être utilisé. Demandez un nouveau code si nécessaire.
Correspondance exacte : Le
service et le number doivent correspondre exactement à ceux utilisés lors de l’envoi de l’OTP.⌘I
Vérifier un OTP
curl --request POST \
--url https://api.example.com/verify/otp \
--header 'Content-Type: application/json' \
--data '
{
"otp": "<string>",
"number": "<string>",
"service": "<string>"
}
'import requests
url = "https://api.example.com/verify/otp"
payload = {
"otp": "<string>",
"number": "<string>",
"service": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({otp: '<string>', number: '<string>', service: '<string>'})
};
fetch('https://api.example.com/verify/otp', 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.example.com/verify/otp",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'otp' => '<string>',
'number' => '<string>',
'service' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/verify/otp"
payload := strings.NewReader("{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/verify/otp")
.header("Content-Type", "application/json")
.body("{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/verify/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"otp\": \"<string>\",\n \"number\": \"<string>\",\n \"service\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": "Code de vérification invalide",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification expiré",
"error": "Bad Request"
}
{
"statusCode": 400,
"message": "Code de vérification déjà vérifié",
"error": "Bad Request"
}
{
"statusCode": 404,
"message": "Code de vérification non trouvé ou déjà vérifié",
"error": "Not Found"
}