mit System;
mit System.Sammlungen.Generisch;
mit System.ICH;
mit System.Netto;
mit System.Text;
mit System.Web;
mit Gateway_Beispielanwendung.Eigenschaften;
mit Newtonsoft.Json;
mit Newtonsoft.Json.Linq;
Namespace SMS
{
statisch Klasse API
{
Privat statisch schreibgeschützt Schnur Server = "https://sms.sendapp.live"
Privat statisch schreibgeschützt Schnur Schlüssel = „6e1bdb4ed91f3b83071dd5a520c9d226ea19245e“;
öffentlich Aufzählung Option
{
USE_SPECIFIED = 0,
ALLE_GERÄTE_VERWENDEN = 1,
ALLE SIMS VERWENDEN = 2
}
///
/// Senden Sie eine einzelne Nachricht an eine bestimmte Mobiltelefonnummer.
///
/// Die Mobiltelefonnummer, an die Sie die Nachricht senden möchten.
/// Die Nachricht, die Sie senden möchten.
/// Die ID eines Geräts, das Sie zum Senden dieser Nachricht verwenden möchten.
/// Legen Sie den Zeitstempel fest, wenn Sie diese Nachricht senden möchten.
/// Wenn beim Senden einer Nachricht ein Fehler auftritt.
/// Das Wörterbuch mit Informationen zur Nachricht.
öffentlich statisch Wörterbuch<Schnur, Objekt> SendSingleMessage(Schnur Nummer, Schnur Nachricht, Schnur Gerät = "0", lang? Zeitplan = null)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Nummer", Nummer},
{ "Nachricht", Nachricht},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Gerät }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/send.php", Werte)["Nachrichten"])[0];
}
///
/// Senden Sie mehrere Nachrichten an verschiedene Mobiltelefonnummern.
///
/// Das Array enthält Zahlen und Nachrichten.
/// Setzen Sie dies auf USE_SPECIFIED, wenn Sie die im Geräteargument angegebenen Geräte und SIMs verwenden möchten.
/// 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 SIMs zum Senden von Nachrichten verwenden möchten.
/// Das Array der IDs der Geräte, die Sie zum Senden dieser Nachrichten verwenden möchten.
/// Legen Sie den Zeitstempel fest, wenn Sie diese Nachricht senden möchten.
/// Setzen Sie es auf „true“, wenn Sie Nachrichten nur mit einem zufällig ausgewählten Gerät senden möchten.
/// Wenn beim Senden von Nachrichten ein Fehler auftritt.
/// Das Array, das die Nachrichten enthält.
öffentlich statisch Wörterbuch<Schnur, Objekt>[] SendMessages(Liste<Wörterbuch<Schnur, Schnur>> Nachrichten, Option Option = Option.USE_SPECIFIED, Schnur[] Geräte = null, lang? Zeitplan = null, bool useRandomDevice = FALSCH)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Nachrichten", JsonConvert.SerializeObject(Nachrichten)},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Geräte },
{ "Option", (int) Option },
{ "useRandomDevice", useRandomDevice }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/send.php", Werte)["Nachrichten"]);
}
///
/// 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 die im Geräteargument angegebenen Geräte und SIMs verwenden möchten.
/// 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 SIMs zum Senden von Nachrichten verwenden möchten.
/// Das Array der IDs der Geräte, die Sie zum Senden dieser Nachrichten verwenden möchten.
/// Legen Sie den Zeitstempel fest, wenn Sie diese Nachricht senden möchten.
/// Wenn beim Senden von Nachrichten ein Fehler auftritt.
/// Das Array, das die Nachrichten enthält.
öffentlich statisch Wörterbuch<Schnur, Objekt>[] SendMessageToContactsList(int Listen-ID, Schnur Nachricht, Option Option = Option.USE_SPECIFIED, Schnur[] Geräte = null, lang? Zeitplan = null)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Listen-ID", Listen-ID},
{ "Nachricht", Nachricht},
{ "Zeitplan", Zeitplan },
{ "Schlüssel", Schlüssel },
{ "Geräte", Geräte },
{ "Option", (int) Option }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/send.php", Werte)["Nachrichten"]);
}
///
/// Holen Sie sich eine Nachricht mithilfe der ID.
///
/// Die ID einer Nachricht, die Sie abrufen möchten.
/// Wenn beim Abrufen einer Nachricht ein Fehler auftritt.
/// Das Wörterbuch mit Informationen zur Nachricht.
öffentlich statisch Wörterbuch<Schnur, Objekt> GetMessageByID(int Ausweis)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Ausweis", Ausweis }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/read-messages.php", Werte)["Nachrichten"])[0];
}
///
/// Nachrichten mithilfe der Gruppen-ID abrufen.
///
/// Die Gruppen-ID der Nachrichten, die Sie abrufen möchten.
/// Wenn beim Abrufen von Nachrichten ein Fehler auftritt.
/// Das Array, das die Nachrichten enthält.
öffentlich statisch Wörterbuch<Schnur, Objekt>[] Nachrichten nach Gruppen-ID abrufen(Schnur Gruppen-ID)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Gruppen-ID", Gruppen-ID }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/read-messages.php", Werte)["Nachrichten"]);
}
///
/// Nachrichten mithilfe des 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, das die Nachrichten enthält.
öffentlich statisch Wörterbuch<Schnur, Objekt>[] Nachrichten nach Status abrufen(Schnur Status, lang? Startzeitstempel = null, lang? Endzeitstempel = null)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{ "Schlüssel", Schlüssel },
{ "Status", Status },
{ "Startzeitstempel", Startzeitstempel },
{ "Endzeitstempel", Endzeitstempel }
};
zurückkehren Nachrichten abrufen(GetResponse($"{Server}/services/read-messages.php", Werte)["Nachrichten"]);
}
///
/// Einen neuen Kontakt zur Kontaktliste hinzufügen.
///
/// Die ID der Kontaktliste, zu der Sie diesen Kontakt hinzufügen möchten.
/// Die Mobiltelefonnummer des Kontakts.
/// Der Name des Kontakts.
/// Setzen Sie es auf „true“, wenn Sie diesen Kontakt erneut abonnieren möchten, sofern er bereits vorhanden ist.
/// Ein Wörterbuch mit Details zu einem neu hinzugefügten Kontakt.
öffentlich statisch Wörterbuch<Schnur, Objekt> Kontakt hinzufügen(int Listen-ID, Schnur Nummer, Schnur Name = null, bool erneut abonnieren = FALSCH)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{"Schlüssel", Schlüssel},
{"Listen-ID", Listen-ID},
{"Nummer", Nummer},
{"Name", Name},
{"erneut abonnieren", erneut abonnieren ? '1' : '0'},
};
JObject jObject = (JObject) GetResponse($"{Server}/services/manage-contacts.php", Werte)["Kontakt"];
zurückkehren jObject.ToObject<Wörterbuch<Schnur, Objekt>>();
}
///
/// Einen Kontakt aus der Kontaktliste abmelden.
///
/// Die ID der Kontaktliste, aus der Sie diesen Kontakt abbestellen möchten.
/// Die Mobiltelefonnummer des Kontakts.
/// Ein Wörterbuch mit Details zum abgemeldeten Kontakt.
öffentlich statisch Wörterbuch<Schnur, Objekt> AbmeldenKontakt(int Listen-ID, Schnur Nummer)
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{"Schlüssel", Schlüssel},
{"Listen-ID", Listen-ID},
{"Nummer", Nummer},
{"abbestellen", '1'}
};
JObject jObject = (JObject)GetResponse($"{Server}/services/manage-contacts.php", Werte)["Kontakt"];
zurückkehren jObject.ToObject<Wörterbuch<Schnur, Objekt>>();
}
///
/// Verbleibendes Nachrichtenguthaben abrufen.
///
/// Wenn beim Abrufen des Nachrichtenguthabens ein Fehler auftritt.
/// Die Menge des verbleibenden Nachrichtenguthabens.
öffentlich statisch Schnur GetBalance()
{
var Werte = neu Wörterbuch<Schnur, Objekt>
{
{"Schlüssel", Schlüssel}
};
JToken Credits = GetResponse($"{Server}/services/send.php", Werte)["Credits"];
Wenn (Credits.Typ != JTokenType.Nichts)
{
zurückkehren Credits.ToString();
}
zurückkehren "Unbegrenzt";
}
Privat statisch Wörterbuch<Schnur, Objekt>[] Nachrichten abrufen(JToken NachrichtenJToken)
{
JArray jArray = (JArray)NachrichtenJToken;
var Nachrichten = neu Wörterbuch<Schnur, Objekt>[jArray.Zählen];
für (var Index = 0; Index < jArray.Zählen; Index++)
{
Nachrichten[Index] = jArray[Index].ToObject<Wörterbuch<Schnur, Objekt>>();
}
zurückkehren Nachrichten;
}
Privat statisch JToken GetResponse(Schnur URL, Wörterbuch<Schnur, Objekt> postData)
{
var Anfrage = (HttpWebRequest)WebRequest.Erstellen(URL);
var Datenstring = CreateDataString(postData);
var Datum = Codierung.UTF8.GetBytes(Datenstring);
Anfrage.Verfahren = "POST";
Anfrage.Inhaltstyp = "Anwendung/x-www-form-urlencoded";
Anfrage.Inhaltslänge = Datum.Länge;
ServicePointManager.Erwarte 100 Weiter = WAHR;
ServicePointManager.Sicherheitsprotokoll = Sicherheitsprotokolltyp.Tls12;
mit (var Strom = Anfrage.GetRequestStream())
{
Strom.Schreiben(Datum, 0, Datum.Länge);
}
var Antwort = (HttpWebResponse)Anfrage.GetResponse();
Wenn (Antwort.Statuscode == HttpStatusCode.OK)
{
mit (StreamReader streamReader = neu StreamReader(Antwort.GetResponseStream()))
{
var jsonAntwort = streamReader.ReadToEnd();
versuchen
{
JObject jObject = JObject.Parse(jsonAntwort);
Wenn ((bool)jObject["Erfolg"])
{
zurückkehren jObject["Datum"];
}
werfen neu Ausnahme(jObject["Fehler"]["Nachricht"].ToString());
}
fangen (JsonReaderException)
{
Wenn (Schnur.IsNullOrEmpty(jsonAntwort))
{
werfen neu InvalidDataException(„In der Anfrage fehlen Daten. Bitte geben Sie alle erforderlichen Informationen an, um Nachrichten zu senden.“);
}
werfen neu Ausnahme(jsonAntwort);
}
}
}
werfen neu WebException($„HTTP-Fehler: {(int)response.StatusCode} {response.StatusCode}“);
}
Privat statisch Schnur CreateDataString(Wörterbuch<Schnur, Objekt> Datum)
{
StringBuilder Datenstring = neu StringBuilder();
bool Erste = WAHR;
für jeden (var obj In Datum)
{
Wenn (obj.Wert != null)
{
Wenn (Erste)
{
Erste = FALSCH;
}
anders
{
Datenstring.Anhängen("&");
}
Datenstring.Anhängen(HttpUtility.UrlEncode(obj.Schlüssel));
Datenstring.Anhängen("=");
Datenstring.Anhängen(obj.Wert Ist Schnur[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Wert))
: HttpUtility.UrlEncode(obj.Wert.ToString()));
}
}
zurückkehren Datenstring.ToString();
}
}
}
Einzelne Nachricht senden
versuchen
{
// Senden Sie eine Nachricht über das primäre Gerät.
SMS.API.SendSingleMessage("+911234567890", „Dies ist ein Test einer einzelnen Nachricht.“);
// Senden Sie eine Nachricht mit der Geräte-ID 1.
Wörterbuch<Schnur, Objekt> Nachricht = SMS.API.SendSingleMessage("+911234567890", „Dies ist ein Test einer einzelnen Nachricht.“, "1");
// Senden Sie eine Nachricht mit der SIM-Karte in Steckplatz 1 der Geräte-ID 1 (dargestellt als „1|0“).
// SIM-Steckplatz ist ein Index, also ist der Index der ersten SIM 0 und der Index der zweiten SIM 1.
// In diesem Beispiel steht 1 für die Geräte-ID und 0 für den SIM-Steckplatzindex.
Wörterbuch<Schnur, Objekt> Nachricht = SMS.API.SendSingleMessage("+911234567890", „Dies ist ein Test einer einzelnen Nachricht.“, "1|0");
// Geplante Nachricht über das primäre Gerät senden.
lang Zeitstempel = (lang) Datum/Uhrzeit.UTCJetzt.Minuten hinzufügen(2).Subtrahieren(neu Datum/Uhrzeit(1970, 1, 1)).Gesamtsekunden;
Wörterbuch<Schnur, Objekt> Nachricht = SendSingleMessage(Textfeldnummer.Text, Textfeldnachricht.Text, null, Zeitstempel);
MessageBox.Zeigen("Nachricht erfolgreich gesendet.");
}
fangen (Ausnahme Ausnahme)
{
MessageBox.Zeigen(Ausnahme.Nachricht, "!Fehler", MessageBoxButtons.OK, MessageBoxIcon.Fehler);
}
Massennachrichten senden
Liste<Wörterbuch<Schnur, Schnur>> Nachrichten = neu Liste<Wörterbuch<Schnur, Schnur>>();
für (int Die = 1; Die <= 12; Die++)
{
var Nachricht = neu Wörterbuch<Schnur, Schnur>
{
{ "Nummer", "+911234567890" },
{ "Nachricht", „Dies ist ein Test von #{$i} der C#-Version. Test der Massennachrichtenfunktion.“ }
};
Nachrichten.Hinzufügen(Nachricht);
}
versuchen
{
// Senden Sie Nachrichten über das primäre Gerät.
SMS.API.SendMessages(Nachrichten);
// Senden Sie Nachrichten über die Standard-SIM aller verfügbaren Geräte. Die Nachrichten werden auf alle Geräte aufgeteilt.
SMS.API.SendMessages(Nachrichten, SMS.API.Option.ALLE_GERÄTE_VERWENDEN);
// Senden Sie Nachrichten über alle SIM-Karten aller verfügbaren Geräte. Die Nachrichten werden auf alle SIM-Karten aufgeteilt.
SMS.API.SendMessages(Nachrichten, SMS.API.Option.ALLE SIMS VERWENDEN);
// Senden Sie Nachrichten nur über angegebene Geräte. Die Nachrichten werden zwischen den angegebenen Geräten oder SIM-Karten aufgeteilt.
// Wenn Sie 12 Nachrichten mit diesem Code senden, werden 4 Nachrichten von der Geräte-ID 1 gesendet, die anderen 4 von der SIM-Karte in Steckplatz 1 von
// Geräte-ID 2 (dargestellt als „2|0“) und die restlichen 4 von SIM in Steckplatz 2 der Geräte-ID 2 (dargestellt als „2|1“).
SMS.API.SendMessages(Nachrichten, SMS.API.Option.USE_SPECIFIED, neu [] {"1", "2|0", "2|1"});
// Senden Sie Nachrichten planmäßig über das primäre Gerät.
lang Zeitstempel = (lang) Datum/Uhrzeit.UTCJetzt.Minuten hinzufügen(2).Subtrahieren(neu Datum/Uhrzeit(1970, 1, 1)).Gesamtsekunden;
Wörterbuch<Schnur, Objekt>[] Nachrichten = SMS.API.SendMessages(Nachrichten, Option.USE_SPECIFIED, null, Zeitstempel);
// Senden Sie eine Nachricht an Kontakte in der Kontaktliste mit der ID 1.
Wörterbuch<Schnur, Objekt>[] Nachrichten = SMS.API.SendMessageToContactsList(1, "Prüfen", SMS.API.Option.USE_SPECIFIED, neu [] {"1"});
// Senden Sie planmäßig eine Nachricht an Kontakte in der Kontaktliste mit der ID 1.
Wörterbuch<Schnur, Objekt>[] Nachrichten = SMS.API.SendMessageToContactsList(1, "Test #1", Option.USE_SPECIFIED, null, Zeitstempel);
MessageBox.Zeigen("Erfolg");
}
fangen (Ausnahme Ausnahme)
{
MessageBox.Zeigen(Ausnahme.Nachricht, "!Fehler", MessageBoxButtons.OK, MessageBoxIcon.Fehler);
}
Verbleibendes Nachrichtenguthaben abrufen
versuchen
{
Schnur Credits = SMS.API.GetBalance();
MessageBox.Zeigen($„Verbleibende Nachrichtenguthaben: {credits}“);
}
fangen (Ausnahme Ausnahme)
{
MessageBox.Zeigen(Ausnahme.Nachricht, "!Fehler", MessageBoxButtons.OK, MessageBoxIcon.Fehler);
}
Abrufen von Nachrichten und deren aktuellem Status
versuchen
{
// Holen Sie sich eine Nachricht mithilfe der ID.
Wörterbuch<Schnur, Objekt> Nachricht = SMS.API.GetMessageByID(1);
// Nachrichten mithilfe der Gruppen-ID abrufen.
Wörterbuch<Schnur, Objekt>[] Nachrichten = SMS.API.Nachrichten nach Gruppen-ID abrufen(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
// Nachrichten abrufen, die in den letzten 24 Stunden empfangen wurden.
lang Zeitstempel = (lang) Datum/Uhrzeit.UTCJetzt.Stunden hinzufügen(-24).Subtrahieren(neu Datum/Uhrzeit(1970, 1, 1)).Gesamtsekunden;
Nachrichten nach Status abrufen("Erhalten", Zeitstempel);
}
fangen (Ausnahme Ausnahme)
{
MessageBox.Zeigen(Ausnahme.Nachricht, "!Fehler", MessageBoxButtons.OK, MessageBoxIcon.Fehler);
}
Kontakte verwalten
versuchen {
// Fügen Sie der Kontaktliste 1 einen neuen Kontakt hinzu oder abonnieren Sie den Kontakt erneut, wenn er bereits vorhanden ist.
Wörterbuch<Schnur, Objekt> Kontakt = SMS.API.Kontakt hinzufügen(1, "+911234567890", "Test C#", WAHR);
// Einen Kontakt über die Mobiltelefonnummer abbestellen.
Wörterbuch<Schnur, Objekt> Kontakt = AbmeldenKontakt(1, "+911234567890");
}
fangen (Ausnahme Ausnahme)
{
MessageBox.Zeigen(Ausnahme.Nachricht, "!Fehler", MessageBoxButtons.OK, MessageBoxIcon.Fehler);
}