mit System;
mit System.Sammlungen.Generisch;
mit System.ich;
mit System.Netz;
mit System.Text;
mit System.Netz;
mit Gateway_Sample_Application.Eigenschaften;
mit Newtonsoft.jSON;
mit Newtonsoft.jSON.Linq;
Namespace SMS
{
statisch Klasse API
{
Privat statisch schreibgeschützt Zeichenfolge Server = "Https://sms.sendapp.live"
Privat statisch schreibgeschützt Zeichenfolge Schlüssel = 6e1bdb4ed91f3b83071dd5a520c9d226ea19245e;
Öffentlichkeit Aufzählung Möglichkeit
{
USE_SPECIFIED = 0,
USE_ALL_DEVICES = 1,
USE_ALL_SIMS = 2
}
///
/// Einzelne Nachricht an bestimmte Handynummer senden.
///
/// Die Handynummer, an die Sie eine Nachricht senden möchten.
/// Die Nachricht, die Sie senden möchten.
/// Die ID eines Geräts, mit dem Sie diese Nachricht senden möchten.
/// Stellen Sie den Zeitstempel ein, wenn Sie diese Nachricht senden möchten.
/// Wenn beim Senden einer Nachricht ein Fehler auftritt.
/// Das Wörterbuch mit Informationen zur Nachricht.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> SendSingleMessage(Zeichenfolge Nummer, Zeichenfolge Botschaft, Zeichenfolge Gerät = "0", lange? Zeitplan = Null)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Nummer", Nummer},
{ "Botschaft", Botschaft},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Gerät }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/send.php", Werte)["Mitteilungen"])[0];
}
///
/// Mehrere Nachrichten an verschiedene Handynummern senden.
///
/// Das Array mit Zahlen und Nachrichten.
/// Setzen Sie dies auf USE_SPECIFIED, wenn Sie Geräte und SIMs verwenden möchten, die im Geräteargument angegeben sind.
/// Setzen Sie dies auf USE_ALL_DEVICES, wenn Sie alle verfügbaren Geräte und deren Standard-SIM zum Senden von Nachrichten verwenden möchten.
/// Setzen Sie dies auf USE_ALL_SIMS, wenn Sie alle verfügbaren Geräte und alle ihre SIM-Karten zum Senden von Nachrichten verwenden möchten.
/// Das Array der ID der Geräte, die Sie zum Senden dieser Nachrichten verwenden möchten.
/// Stellen Sie den Zeitstempel ein, wenn Sie diese Nachricht senden möchten.
/// Setzen Sie es auf true, wenn Sie Nachrichten mit nur einem zufälligen Gerät von ausgewählten Geräten senden möchten.
/// Wenn beim Senden von Nachrichten ein Fehler auftritt.
/// Das Array mit Nachrichten.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> [] Sende Nachrichten(aufführen<Wörterbuch<Zeichenfolge, Zeichenfolge>> Mitteilungen, Möglichkeit Optionen = Möglichkeit.USE_SPECIFIED, Zeichenfolge[] Geräte = Null, lange? Zeitplan = Null, Bool useRandomDevice = falsch)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Mitteilungen", JsonConvert.SerializeObject(Mitteilungen)},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Geräte },
{ "Möglichkeit", (int) Optionen },
{ "UseRandomDevice", useRandomDevice }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/send.php", Werte)["Mitteilungen"]);
}
///
/// Senden Sie eine Nachricht an Kontakte in der angegebenen Kontaktliste.
///
/// Die ID der Kontaktliste, an die Sie diese Nachricht senden möchten.
/// Die Nachricht, die Sie senden möchten.
/// Setzen Sie dies auf USE_SPECIFIED, wenn Sie Geräte und SIMs verwenden möchten, die im Geräteargument angegeben sind.
/// Setzen Sie dies auf USE_ALL_DEVICES, wenn Sie alle verfügbaren Geräte und deren Standard-SIM zum Senden von Nachrichten verwenden möchten.
/// Setzen Sie dies auf USE_ALL_SIMS, wenn Sie alle verfügbaren Geräte und alle ihre SIM-Karten zum Senden von Nachrichten verwenden möchten.
/// Das Array der ID der Geräte, die Sie zum Senden dieser Nachrichten verwenden möchten.
/// Stellen Sie den Zeitstempel ein, wenn Sie diese Nachricht senden möchten.
/// Wenn beim Senden von Nachrichten ein Fehler auftritt.
/// Das Array mit Nachrichten.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> [] SendMessageToContactsList(int listid, Zeichenfolge Botschaft, Möglichkeit Optionen = Möglichkeit.USE_SPECIFIED, Zeichenfolge[] Geräte = Null, lange? Zeitplan = Null)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Listid", listid},
{ "Botschaft", Botschaft},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Geräte },
{ "Möglichkeit", (int) Optionen }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/send.php", Werte)["Mitteilungen"]);
}
///
/// Eine Nachricht mit der ID abrufen.
///
/// Die ID einer Nachricht, die Sie abrufen möchten.
/// Wenn beim Abrufen einer Nachricht ein Fehler auftritt.
/// Das Wörterbuch mit Informationen zur Nachricht.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> GetMessageByID(int Ich würde)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Ich würde", Ich würde }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/read-messages.php", Werte)["Mitteilungen"])[0];
}
///
/// Nachrichten mit der Gruppen-ID abrufen.
///
/// Die Gruppen-ID der Nachrichten, die Sie abrufen möchten.
/// Wenn beim Abrufen von Nachrichten ein Fehler auftritt.
/// Das Array mit Nachrichten.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> [] GetMessagesByGroupID(Zeichenfolge Gruppen-ID)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Gruppen-ID", Gruppen-ID }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/read-messages.php", Werte)["Mitteilungen"]);
}
///
/// Nachrichten mit dem Status abrufen.
///
/// Der Status der Nachrichten, die Sie abrufen möchten.
/// Suchen Sie nach Nachrichten, die nach dieser Zeit gesendet oder empfangen wurden.
/// Suchen Sie nach Nachrichten, die vor diesem Zeitpunkt gesendet oder empfangen wurden.
/// Wenn beim Abrufen von Nachrichten ein Fehler auftritt.
/// Das Array mit Nachrichten.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> [] GetMessagesByStatus(Zeichenfolge Status, lange? startTimestamp = Null, lange? endTimestamp = Null)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Status", Status },
{ "StartTimestamp", startTimestamp },
{ "EndTimestamp", endTimestamp }
};
Rückkehr getMessages(Erhalten Antwort($"{Server} /services/read-messages.php", Werte)["Mitteilungen"]);
}
///
/// Neuen Kontakt zur Kontaktliste hinzufügen.
///
/// Die ID der Kontaktliste, in der Sie diesen Kontakt hinzufügen möchten.
/// Die Handynummer des Kontakts.
/// Der Name des Kontakts.
/// Setzen Sie es auf true, wenn Sie diesen Kontakt erneut abonnieren möchten, falls er bereits vorhanden ist.
/// Ein Wörterbuch mit Details zu einem neu hinzugefügten Kontakt.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> Kontakt hinzufügen(int listid, Zeichenfolge Nummer, Zeichenfolge Name = Null, Bool erneut abonnieren = falsch)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{"Schlüssel", Schlüssel},
{"Listid", listid},
{"Nummer", Nummer},
{"Name", Name},
{"Erneut abonnieren", erneut abonnieren ? '1' : '0'},
};
Jobobjekt Jobobjekt = (Jobobjekt) Erhalten Antwort($"{Server} /services/manage-contacts.php", Werte)["Kontakt"];
Rückkehr Jobobjekt.ToObject<Wörterbuch<Zeichenfolge, Objekt>> ();
}
///
/// Einen Kontakt von der Kontaktliste abbestellen.
///
/// Die ID der Kontaktliste, von der Sie diesen Kontakt abbestellen möchten.
/// Die Handynummer des Kontakts.
/// Ein Wörterbuch mit Details zum abgemeldeten Kontakt.
Öffentlichkeit statisch Wörterbuch<Zeichenfolge, Objekt> AbbestellenKontakt(int listid, Zeichenfolge Nummer)
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{"Schlüssel", Schlüssel},
{"Listid", listid},
{"Nummer", Nummer},
{"Abmelden", '1'}
};
Jobobjekt Jobobjekt = (Jobobjekt)Erhalten Antwort($"{Server} /services/manage-contacts.php", Werte)["Kontakt"];
Rückkehr Jobobjekt.ToObject<Wörterbuch<Zeichenfolge, Objekt>> ();
}
///
/// Restliche Nachrichtenguthaben abrufen.
///
/// Wenn beim Abrufen von Nachrichtenguthaben ein Fehler auftritt.
/// Die Anzahl der verbleibenden Nachrichtenguthaben.
Öffentlichkeit statisch Zeichenfolge GetBalance()
{
var Werte = Neu Wörterbuch<Zeichenfolge, Objekt>
{
{"Schlüssel", Schlüssel}
};
JToken Credits = Erhalten Antwort($"{Server} /services/send.php", Werte)["Credits"];
wenn (Credits.Art != JTokenType.Null)
{
Rückkehr Credits.ToString();
}
Rückkehr "Unbegrenzt";
}
Privat statisch Wörterbuch<Zeichenfolge, Objekt> [] getMessages(JToken messagesJToken)
{
JArray jArray = (JArray)messagesJToken;
var Mitteilungen = Neu Wörterbuch<Zeichenfolge, Objekt> [jArray.Anzahl];
zum (var Index = 0; Index < jArray.Anzahl; Index++)
{
Mitteilungen[Index] = jArray[Index].ToObject<Wörterbuch<Zeichenfolge, Objekt>> ();
}
Rückkehr Mitteilungen;
}
Privat statisch JToken Erhalten Antwort(Zeichenfolge URL, Wörterbuch<Zeichenfolge, Objekt> Post-Daten)
{
var Anfrage = (HttpWebRequest)WebRequest.Erstellen(URL);
var Datastring = CreateDataString(Post-Daten);
var Datum = Codierung.UTF8.GetBytes(Datastring);
Anfrage.Methode = "POST";
Anfrage.Inhaltstyp = "Anwendung / x-www-form-urlencoded";
Anfrage.Inhaltslänge = Datum.Länge;
ServicePointManager.Expect100Continue = falsch;
ServicePointManager.Sicherheitsprotokoll = SecurityProtocolType.Tls12;
mit (var Strom = Anfrage.GetRequestStream())
{
Strom.Schreiben(Datum, 0, Datum.Länge);
}
var Antwort = (HttpWebResponse)Anfrage.Erhalten Antwort();
wenn (Antwort.Statuscode == HttpStatusCode.Ok)
{
mit (StreamReader StreamReader = Neu StreamReader(Antwort.GetResponseStream()))
{
var jsonResponse = StreamReader.ReadToEnd();
Versuchen
{
Jobobjekt Jobobjekt = Jobobjekt.Analysieren(jsonResponse);
wenn ((Bool)Jobobjekt["Erfolg"])
{
Rückkehr Jobobjekt["Datum"];
}
werfen Neu Ausnahme(Jobobjekt["Error"]["Botschaft"].ToString());
}
Fang (JsonReaderException)
{
wenn (Zeichenfolge.IsNullOrEmpty(jsonResponse))
{
werfen Neu InvalidDataException("Fehlende Daten auf Anfrage. Bitte geben Sie alle erforderlichen Informationen zum Senden von Nachrichten an.");
}
werfen Neu Ausnahme(jsonResponse);
}
}
}
werfen Neu WebException($"HTTP-Fehler: {(int) response.StatusCode} {response.StatusCode}");
}
Privat statisch Zeichenfolge CreateDataString(Wörterbuch<Zeichenfolge, Objekt> Datum)
{
StringBuilder Datastring = Neu StringBuilder();
Bool zuerst = falsch;
für jedes (var obj im Datum)
{
wenn (obj.Wert != Null)
{
wenn (zuerst)
{
zuerst = falsch;
}
sonst
{
Datastring.Anhängen("&");
}
Datastring.Anhängen(HttpUtility.UrlEncode(obj.Schlüssel));
Datastring.Anhängen("=");
Datastring.Anhängen(obj.Wert ist Zeichenfolge[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Wert))
: HttpUtility.UrlEncode(obj.Wert.ToString()));
}
}
Rückkehr Datastring.ToString();
}
}
}
Einzelne Nachricht senden
Versuchen
{
// Eine Nachricht mit dem primären Gerät senden.
SMS.API.SendSingleMessage("+911234567890", "Dies ist ein Test für eine einzelne Nachricht.");
// Eine Nachricht mit der Geräte-ID 1 senden.
Wörterbuch<Zeichenfolge, Objekt> Botschaft = SMS.API.SendSingleMessage("+911234567890", "Dies ist ein Test für eine einzelne Nachricht.", "1");
// Senden Sie eine Nachricht über die SIM-Karte in Steckplatz 1 der Geräte-ID 1 (dargestellt als "1 | 0").
// Der SIM-Steckplatz ist ein Index, daher ist der Index der ersten SIM-Karte 0 und der Index der zweiten SIM-Karte 1.
// In diesem Beispiel steht 1 für die Geräte-ID und 0 für den SIM-Steckplatzindex.
Wörterbuch<Zeichenfolge, Objekt> Botschaft = SMS.API.SendSingleMessage("+911234567890", "Dies ist ein Test für eine einzelne Nachricht.", "1|0");
// Geplante Nachricht mit dem primären Gerät senden.
lange Zeitstempel = (lange) Terminzeit.UtcNow.AddMinutes(2).Subtrahieren(Neu Terminzeit(1970, 1, 1)).Gesamtsekunden;
Wörterbuch<Zeichenfolge, Objekt> Botschaft = SendSingleMessage(textBoxNumber.Text, textBoxMessage.Text, Null, Zeitstempel);
Nachrichtenbox.Show("Erfolgreich eine Nachricht gesendet.");
}
Fang (Ausnahme Ausnahme)
{
Nachrichtenbox.Show(Ausnahme.Botschaft, "! Error", MessageBoxButtons.Ok, MessageBoxIcon.Error);
}
Massenmeldungen senden
aufführen<Wörterbuch<Zeichenfolge, Zeichenfolge>> Mitteilungen = Neu aufführen<Wörterbuch<Zeichenfolge, Zeichenfolge>> ();
zum (int das = 1; das <= 12; das++)
{
var Botschaft = Neu Wörterbuch<Zeichenfolge, Zeichenfolge>
{
{ "Nummer", "+911234567890" },
{ "Botschaft", "Dies ist ein Test # {$i} der C#-Version. Testen der Funktionalität von Massennachrichten." }
};
Mitteilungen.Hinzufügen(Botschaft);
}
Versuchen
{
// Nachrichten mit dem primären Gerät senden.
SMS.API.Sende Nachrichten(Mitteilungen);
// Nachrichten mit Standard-SIM aller verfügbaren Geräte senden. Nachrichten werden auf alle Geräte aufgeteilt.
SMS.API.Sende Nachrichten(Mitteilungen, SMS.API.Möglichkeit.USE_ALL_DEVICES);
// Nachrichten mit allen SIM-Karten aller verfügbaren Geräte senden. Nachrichten werden auf alle SIM-Karten aufgeteilt.
SMS.API.Sende Nachrichten(Mitteilungen, SMS.API.Möglichkeit.USE_ALL_SIMS);
// Nachrichten nur mit angegebenen Geräten senden. Nachrichten werden zwischen den von Ihnen angegebenen Geräten oder SIM-Karten aufgeteilt.
// Wenn Sie 12 Nachrichten mit diesem Code senden, werden 4 Nachrichten von der Geräte-ID 1 und 4 von der SIM-Karte in Steckplatz 1 von gesendet
// Geräte-ID 2 (dargestellt als "2 | 0") und verbleibende 4 von SIM in Steckplatz 2 von Geräte-ID 2 (dargestellt als "2 | 1").
SMS.API.Sende Nachrichten(Mitteilungen, SMS.API.Möglichkeit.USE_SPECIFIED, Neu [] {"1", "2|0", "2|1"});
// Nachrichten termingerecht mit dem primären Gerät senden.
lange Zeitstempel = (lange) Terminzeit.UtcNow.AddMinutes(2).Subtrahieren(Neu Terminzeit(1970, 1, 1)).Gesamtsekunden;
Wörterbuch<Zeichenfolge, Objekt> [] Mitteilungen = SMS.API.Sende Nachrichten(Mitteilungen, Möglichkeit.USE_SPECIFIED, Null, Zeitstempel);
// Eine Nachricht an Kontakte in der Kontaktliste mit der ID 1 senden.
Wörterbuch<Zeichenfolge, Objekt> [] Mitteilungen = SMS.API.SendMessageToContactsList(1, "Prüfung", SMS.API.Möglichkeit.USE_SPECIFIED, Neu [] {"1"});
// Nachricht pünktlich an Kontakte in der Kontaktliste mit der ID 1 senden.
Wörterbuch<Zeichenfolge, Objekt> [] Mitteilungen = SMS.API.SendMessageToContactsList(1, Test #1, Möglichkeit.USE_SPECIFIED, Null, Zeitstempel);
Nachrichtenbox.Show("Erfolg");
}
Fang (Ausnahme Ausnahme)
{
Nachrichtenbox.Show(Ausnahme.Botschaft, "! Error", MessageBoxButtons.Ok, MessageBoxIcon.Error);
}
Erhalten Sie die verbleibenden Nachrichtenguthaben
Versuchen
{
Zeichenfolge Credits = SMS.API.GetBalance();
Nachrichtenbox.Show($"Verbleibende Nachrichten-Credits: {Credits}");
}
Fang (Ausnahme Ausnahme)
{
Nachrichtenbox.Show(Ausnahme.Botschaft, "! Error", MessageBoxButtons.Ok, MessageBoxIcon.Error);
}
Erhalten Sie Nachrichten und ihren aktuellen Status
Versuchen
{
// Eine Nachricht mit der ID abrufen.
Wörterbuch<Zeichenfolge, Objekt> Botschaft = SMS.API.GetMessageByID(1);
// Nachrichten mit der Gruppen-ID abrufen.
Wörterbuch<Zeichenfolge, Objekt> [] Mitteilungen = SMS.API.GetMessagesByGroupID() * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871);
// Nachrichten erhalten, die in den letzten 24 Stunden empfangen wurden.
lange Zeitstempel = (lange) Terminzeit.UtcNow.AddHours(-24).Subtrahieren(Neu Terminzeit(1970, 1, 1)).Gesamtsekunden;
GetMessagesByStatus("Empfangen", Zeitstempel);
}
Fang (Ausnahme Ausnahme)
{
Nachrichtenbox.Show(Ausnahme.Botschaft, "! Error", MessageBoxButtons.Ok, MessageBoxIcon.Error);
}
Kontakte verwalten
Versuchen {
// Fügen Sie einen neuen Kontakt zur Kontaktliste 1 hinzu oder abonnieren Sie den Kontakt erneut, falls er bereits vorhanden ist.
Wörterbuch<Zeichenfolge, Objekt> Kontakt = SMS.API.Kontakt hinzufügen(1, "+911234567890", "Test C#", falsch);
// Einen Kontakt mit der Handynummer abbestellen.
Wörterbuch<Zeichenfolge, Objekt> Kontakt = AbbestellenKontakt(1, "+911234567890");
}
Fang (Ausnahme Ausnahme)
{
Nachrichtenbox.Show(Ausnahme.Botschaft, "! Error", MessageBoxButtons.Ok, MessageBoxIcon.Error);
}