الخطوة 1: الاشتراك وتسجيل الدخول
- انتقل إلى الاشتراك في مركز الرسائل
- قم بإنشاء حسابك المجاني
- استخدم أرصدتك المجانية للاختبار واللعب مع OTPs
الخطوة 2: تكامل API (المطورون، التجميع!)
لقد أبقينا الأمور بسيطة للغاية. انسخ بعض مقتطفات الشفرة وستختبر في أي وقت من الأوقات.
هل تفضل المشاهدة على الترميز؟ لدينا دليل فيديو سريع هل قمت بتغطيتها.
معلمة API للتحقق الآن
يجب إرسال المعلمات التالية أثناء استخدام واجهات برمجة تطبيقات VerifyNow.
الصليب الأحمر الدولي/الجنوب
بقية عناوين URL الأساسية لواجهة برمجة التطبيقات
يجب أن تكون جميع نقاط نهاية Platform API أدناه مسبوقة بعنوان URL التالي:
https://cpaas.messagecentral.comإنشاء رمز
عند استخدام واجهة برمجة تطبيقات التحقق من الرسائل القصيرة الخاصة بـ Verify Now لإرسال رموز التحقق عبر الرسائل القصيرة، يجب أن تكون المكالمة الأولية إلى واجهة برمجة تطبيقات إنشاء الرمز المميز.
تقوم واجهة برمجة التطبيقات هذه بإرجاع رمز مميز يجب تضمينه في جميع المكالمات اللاحقة. يلزم وجود رمز مصادقة للتحقق من صحة المستخدم ويجب تضمينه في قسم العنوان لكل طلب.
مسار عنوان URL للطلب:
/auth/v1/authentication/tokencURL
1curl --location 'https://cpaas.messagecentral.com/auth/v1/authentication/token?
2customerId=%3CCustomerId%3E&key=%3CBase64%20Encrypted%20password%3E&scope=NEW&country=91
3&email=test%40messagecentral.com' \
4--header 'accept: */*'
ملاحظة: لتحويل أمر cURL إلى كود باستخدام Postman، افتح Postman، واستورد الأمر cURL عبر زر «استيراد»، ثم قم بإنشاء الكود بلغتك المفضلة بالنقر فوق الزر «Code» على الجانب الأيمن من الطلب.
الاستجابة: جسون
1{
2 "status": Integer,
3 "token": "String"
4}مثال الكود
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com")
.method("GET", body)
.addHeader("accept", "*/*")
.build();
Response response = client.newCall(request).execute();var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com',
'headers': {
'accept': '*/*'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'accept' => '*/*'
));
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}import requests
url = "https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com"
payload = {}
headers = {
'accept': '*/*'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["accept"] = "*/*"
response = https.request(request)
puts response.read_body
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://cpaas.messagecentral.com/auth/v1/authentication/token?customerId=<CustomerId>&key=<Base64 Encrypted password>&scope=NEW&country=91&email=test@messagecentral.com");
request.Headers.Add("accept", "*/*");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());أرسل OTP
لإرسال OTP على رقم هاتف محمول أدناه هي معاملات الطلب. رمز المصادقة مطلوب لإرسال OTP الذي تم إنشاؤه بواسطة واجهة برمجة تطبيقات الرمز المميز التي تم إنشاؤها (والتي يمكنك العثور عليها أعلاه في قسم المقدمة).
مسار عنوان URL للطلب:
ستؤدي الاستجابة الناجحة إلى إرجاع رمز الحالة 200.
/verification/v3/sendمعاملات عنوان URL للطلب:
cURL
1curl --location --request POST 'https://cpaas.messagecentral.com/verification/v3/send?
2countryCode=91&flowType=SMS&mobileNumber=9999999999' \
3--header 'authToken:
4eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDIGNzQwNCI6ImIhdCI6MTcxMjExOTA0MCwiZXhwIjo'
ملاحظة: لتحويل أمر cURL إلى كود باستخدام Postman، افتح Postman، واستورد الأمر cURL عبر زر «استيراد»، ثم قم بإنشاء الكود بلغتك المفضلة بالنقر فوق الزر «Code» على الجانب الأيمن من الطلب. يمكنك تغيير أساس FlowType للقناة التي تختارها.
الاستجابة: جسون
1{
2 "responseCode": 200,
3 "message": "SUCCESS",
4 "data": {
5 "verificationId": "xxxx",
6 "mobileNumber": "xxxx",
7 "responseCode": "200",
8 "errorMessage": null,
9 "timeout": "60",
10 "smCLI": null,
11 "transactionId": "xxxx"
12 }
13}مثال الكود
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999")
.method("POST", body)
.addHeader("authToken", "eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw")
.build();
Response response = client.newCall(request).execute();
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999',
'headers': {
'authToken': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'authToken' => 'eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw'
));
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}import requests
url = "https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999"
payload = {}
headers = {
'authToken': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)require "uri"
require "net/http"
url = URI("https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authToken"] = "eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw"
response = https.request(request)
puts response.read_bodyvar client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999");
request.Headers.Add("authToken", "eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());تحقق من صحة OTP
طريقة ValidateOTP هي نقطة نهاية REST API للتحقق من كلمة المرور لمرة واحدة (OTP) للعملاء.
مسار عنوان URL للطلب:
ستؤدي الاستجابة الناجحة إلى إرجاع رمز الحالة 200.
/verification/v3/validateOtp/- للحصول على دعم متعدد اللغات
- افتراضيًا هي اللغة الإنجليزية
- في الوقت الحالي نحن ندعم اللغة الإنجليزية فقط
cURL
1curl --location 'https://cpaas.messagecentral.com/verification/v3/validateOtp?
2&verificationId=2949&code=1476' \
3--header 'authToken:
4eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDIGNzQwNCI6ImIhdCI6MTcxMjExOTA0MC'
ملاحظة: لتحويل أمر cURL إلى كود باستخدام Postman، افتح Postman، واستورد الأمر cURL عبر زر «استيراد»، ثم قم بإنشاء الكود بلغتك المفضلة بالنقر فوق الزر «Code» على الجانب الأيمن من الطلب.
الاستجابة: جسون
ستؤدي الاستجابة الناجحة إلى إرجاع رمز الحالة 200.
1{
2 "responseCode": 200,
3 "message": "SUCCESS",
4 "data": {
5 "verficationId": "xxxx",
6 "mobileNumber": "xxxx",
7 "responseCode": "200",
8 "errorMessage": null,
9 "verificationStatus": "VERIFICATION_COMPLETED",
10 "authToken": null,
11 "transactionId": "xxxx"
12 }
13}مثال الكود
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("https://cpaas.messagecentral.com/verification/v3/validateOtp?&verificationId=2949&code=1476")
.method("GET", body)
.addHeader("authToken", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOT")
.build();
Response response = client.newCall(request).execute();var request = require('request');
var options = {
'method': 'GET',
'url': 'https://cpaas.messagecentral.com/verification/v3/validateOtp?&verificationId=2949&code=1476',
'headers': {
'authToken': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOT'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://cpaas.messagecentral.com/verification/v3/validateOtp?&verificationId=2949&code=1476');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'authToken' => 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOT'
));
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://cpaas.messagecentral.com/verification/v3/validateOtp?&verificationId=2949&code=1476");
request.Headers.Add("authToken", "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOT");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
require "uri"
require "net/http"
url = URI("https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authToken"] = "eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw"
response = https.request(request)
puts response.read_bodyvar client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://cpaas.messagecentral.com/verification/v3/send?countryCode=91&flowType=SMS&mobileNumber=9999999999");
request.Headers.Add("authToken", "eyJhbGciOiJIUzUxMiJ9.eyJzdWOiJDLTMzNDMyQTVGNDlGNzQwNCIsImlhdCI6MTcxMjExOTA0MCwiZXhw");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());رموز الاستجابة
هل تحتاج إلى مساعدة؟
هل تحتاج إلى مساعدة؟ خبراؤنا متاحون على مدار الساعة طوال أيام الأسبوع لإرشادك في أي شيء وفي أي وقت.
البريد الإلكتروني للدعم: support@messagecentral.com
أسئلة متكررة
ما هي أفضل واجهة برمجة تطبيقات SMS OTP للهند بناءً على موثوقية التسليم ووقت الاستجابة؟
ابحث عن مزود واجهة برمجة تطبيقات SMS OTP التي تقدم مسارات المشغل المباشرة، ونظيرة شركات النقل الإقليمية، وإعادة المحاولة/التراجع المؤتمت، واتفاقيات مستوى الخدمة القابلة للقياس الخاصة بالتسليم. كما يدعم موفرو الخدمة الأفضل في فئته التوافق مع DLT وإيصالات التسليم (DLR) والتوجيه بزمن انتقال منخفض و الرد على الرسائل القصيرة+واتساب. قم بالتقييم من خلال قياس معدلات التسليم في العالم الحقيقي ومتوسط زمن الوصول (مللي ثانية) وتفاصيل الأخطاء عبر شركات النقل الهندية الكبرى (Jio و Airtel و Vi).
ما مدى السرعة التي يجب أن يتم بها تسليم OTP للتطبيقات الهندية، وما الذي يؤثر على وقت الاستجابة؟
تهدف إلى أقل من 2 ثانية التسليم لأفضل تجربة مستخدم (أقل من 5 ثوانٍ مقبولة). يتأثر وقت الاستجابة بتوجيه شركة الاتصالات، والانتظار في قائمة الانتظار أثناء ذروة حركة المرور، وازدحام الشبكة، وتقفزات مجمع الرسائل القصيرة، وتأخيرات DLT/Template. استخدم المسارات المباشرة والتوجيه المتوازي و الرسائل القصيرة المضمنة+الرد على WhatsApp لتقليل زمن انتقال OTP من البداية إلى النهاية وتعزيز معدلات الإكمال.
كيف يمكنني دمج واجهة برمجة تطبيقات SMS OTP في تطبيقي في الهند (Node.js، Python، PHP، Java)؟
التدفق الأساسي: إنشاء OTP آمن ← واجهة برمجة تطبيقات إرسال OTP لموفر الاتصال ← تخزين تجزئة OTP + انتهاء الصلاحية ← تحقق من إدخال المستخدم مقابل التجزئة المخزنة عبر Verify-OTP API/Webhook. يقدم معظم الموفرين نقاط نهاية REST و حزم SDK للتحقق من OTP. مثال (زائف):
ملف Node.js (جلب):
في انتظار الجلب ('https://api.provider/send', {
الطريقة: «POST»،
العناوين: {'التخويل': 'مفتاح الحامل'، 'نوع المحتوى': 'application/json'}،
النص الأساسي: json.stringify ({إلى: '+91XXXXXXXXXX'، القالب: 'OTP {{code}} '،
المتغيرات: {الكود: 123456}})})؛
استخدم HTTPS وHMAC/التوقيع وعمليات إعادة المحاولة وخطافات الويب لإيصالات التسليم (DLR).
كيف يمكنني منع إساءة استخدام OTP أو محاولات القوة الغاشمة في تدفق المصادقة الخاص بي؟
تنفيذ الحماية من جانب الخادم:
- حدد محاولات إعادة الإرسال لكل هاتف لكل نافذة زمنية (على سبيل المثال، 3 إرسالات/10 دقائق).
- يحاول التحقق من حد السعر وإضافة تأخيرات تدريجية أو كتل مؤقتة بعد حالات الفشل.
- استخدام جهاز StaginUse + بصمة IP واختبار CAPTCHA لنقطة نهاية flows.g المشبوهة بدلاً من الإنتاج
- اقفل الحساب أو اطلب التحقق الثانوي بعد N محاولات فاشلة. قم بتسجيل المحاولات وإخطار فرق الأمان.
ما أسباب فشل تسليم OTP في الهند وكيف يقوم المطورون بإصلاحها؟
الأسباب الشائعة: رفض DLT/القالب، أو تصفية الناقل (DND)، أو التوجيه السيئ، أو معرف المرسل غير الصحيح، أو مشكلات تنسيق الأرقام، أو الانقطاعات المؤقتة للمشغل. الإصلاحات: تأكد من موافقات DLT والقوالب، واستخدم تنسيق الهاتف E.164 الصحيح (+91)، وأعد المحاولة باستخدام مسارات بديلة، وقم بتمكين الرجوع إلى الرسائل القصيرة، ومراقبة DLRs، واستخدام مزود له علاقات مباشرة مع الناقل.
كيف يمكنني اختبار واجهات برمجة تطبيقات OTP في وضع الحماية دون إرسال رسائل SMS حقيقية؟
استخدم صندوق الحماية الخاص بالموفر أو مفاتيح الاختبار لمحاكاة الإرسالات/الإيصالات. عادةً ما تقوم ميزات Sandbox بإرجاع DLRs المحاكاة واستجابات التحقق. محليًا، قم باستجابات وهمية لواجهة برمجة التطبيقات لاختبارات الوحدة واستخدم بيانات اعتماد مرحلية لضمان الجودة من البداية إلى النهاية. تحقق دائمًا من صحة webhooks في التدريج (استخدم أدوات مثل ngrok) وقم بتسجيل جميع الأحداث لإعادة تشغيلها في الاختبارات.
كيف يمكنني تطبيق منطق تحديد المعدل وإعادة المحاولة لتسليم OTP؟
تحديد المعدل: فرض حدود لكل هاتف ولكل IP في بوابة API (على سبيل المثال، 3 عمليات إرسال لكل 10 دقائق). منطق إعادة المحاولة: تنفيذ التراجع الأسي للأخطاء العابرة وإعادة المحاولة الفورية عبر مسار بديل لحالات الفشل الناعمة. احرص دائمًا على الحد من عمليات إعادة المحاولة (على سبيل المثال، 3 محاولات) وتتبع نتائج إعادة المحاولة لتجنب الرسائل غير المرغوب فيها أو حظر الناقل.
هل يمكنني استخدام معرف المرسل الأبجدي الرقمي لـ OTP في الهند؟
لا — تتطلب الهند معرفات مرسلين رقمية عبر المسارات المعتمدة من DLT بالنسبة لمعظم تدفقات المعاملات؛ لا يُسمح عمومًا بالحروف الأبجدية الرقمية لـ OTPs. يجب أن تتبع أجهزة TOP قواعد Telecom/DLT. استخدم مزودًا متوافقًا يدير تسجيل DLT وإعداد معرف المرسل الرقمي نيابة عنك.
ما هو وقت انتهاء صلاحية OTP الموصى به ودورة إعادة المحاولة للمستخدمين الهنود؟
انتهاء الصلاحية: 3-5 دقائق هو المعيار لـ نصائح المعاملات (2FA). دورة إعادة المحاولة: السماح بإعادة إرسال 1 إلى 2 فورية مع حدود مكافحة إساءة الاستخدام (على سبيل المثال، 3 عمليات إرسال كحد أقصى لكل 10-15 دقيقة). تؤدي فترات انتهاء الصلاحية القصيرة إلى تقليل الاحتيال؛ كما تعمل حدود إعادة الإرسال المعقولة على تقليل عبء الدعم وتصفية المشغل.
ما الفرق بين مسارات OTP الضمنية للمعاملات مقابل الخدمة؟
المعاملات المسارات مخصصة للرسائل الحرجة والمتوقعة (OTP، تحديثات الطلبات) التي تتبع الامتثال الأكثر صرامة وعادة ما تكون لها أولوية تسليم أعلى. خدمة ضمنية (أو مسارات الخدمة الأخرى) يمكن أن تختلف باختلاف المشغل وغالبًا ما تطبق قواعد قالب/الموافقة المختلفة. تحقق من مستندات التوجيه الخاصة بمزود الخدمة - اختر مسارات المعاملات لـ قمم لتحقيق أقصى قدر من التسليم والامتثال.
كيف يمكنني الترحيل من مزود خدمة SMS آخر إلى واجهة برمجة تطبيقات OTP جديدة بدون توقف؟
خطط للانتقال التدريجي:
- قم بتكوين موفر جديد وتوفير DLT/Templates بالتوازي.
- قم بنسخ حركة المرور (إرسال دفعات الاختبار) وتحقق من مقاييس التسليم.
- قم بتطبيق الإرسال المزدوج لنسبة صغيرة من حركة المرور المباشرة (A/B)، وراقب النتائج.
- قم بتحويل حركة المرور تدريجيًا مع الاحتفاظ بالموفر القديم كإجراء احتياطي.
- قم بتحديث نقاط نهاية DNS/Webhook وإلغاء المفاتيح القديمة بمجرد استقرارها. راقب السجلات ومعدلات التسليم عن كثب.
