en utilisant Système;
en utilisant Système.Les collections.Générique;
en utilisant Système.je;
en utilisant Système.Net;
en utilisant Système.Texte;
en utilisant Système.la toile;
en utilisant Gateway_Sample_Application.Propriétés;
en utilisant Newtonsoft.jSON;
en utilisant Newtonsoft.jSON.Linq;
espace de noms SMS
{
statique classe API
{
privé statique lecture seulement chaîne Serveur = "Https://sms.sendapp.live"
privé statique lecture seulement chaîne Clé = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
Publique énumération Option
{
USE_SPECIFIED = 0,
USE_ALL_DEVICES = 1,
USE_ALL_SIMS = 2
}
///
/// Envoyer un message unique à un numéro de portable spécifique.
///
/// Le numéro de mobile auquel vous souhaitez envoyer le message.
/// Le message que vous souhaitez envoyer.
/// L'ID d'un appareil que vous souhaitez utiliser pour envoyer ce message.
/// Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message.
/// S'il y a une erreur lors de l'envoi d'un message.
/// Le dictionnaire contenant des informations sur le message.
Publique statique dictionnaire<chaîne, objet> SendSingleMessage(chaîne nombre, chaîne message, chaîne dispositif = "0", longue? programme = nul)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Nombre", nombre},
{ "Message", message},
{ "Programme", programme },
{ "Clé", Clé },
{ "Dispositifs", dispositif }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"])[0];
}
///
/// Envoyez plusieurs messages à différents numéros de mobile.
///
/// Le tableau contenant les nombres et les messages.
/// Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser des appareils et des cartes SIM spécifiés dans l'argument appareils.
/// Définissez ceci sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages.
/// Définissez ceci sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages.
/// Le tableau d'ID de périphériques que vous souhaitez utiliser pour envoyer ces messages.
/// Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message.
/// Définissez-le sur true si vous souhaitez envoyer des messages en utilisant un seul appareil aléatoire à partir d'appareils sélectionnés.
/// S'il y a une erreur lors de l'envoi des messages.
/// Le tableau contenant les messages.
Publique statique dictionnaire<chaîne, objet> [] Envoyer des messages(liste<dictionnaire<chaîne, chaîne>> messages, Option options = Option.USE_SPECIFIED, chaîne[] dispositifs = nul, longue? programme = nul, booléen useRandomDevice = faux)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Messages", JsonConvert.SerializeObject(messages)},
{ "Programme", programme },
{ "Clé", Clé },
{ "Dispositifs", dispositifs },
{ "Option", (int) options },
{ "UseRandomDevice", useRandomDevice }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"]);
}
///
/// Envoyer un message aux contacts de la liste de contacts spécifiée.
///
/// L'ID de la liste de contacts à laquelle vous souhaitez envoyer ce message.
/// Le message que vous souhaitez envoyer.
/// Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser des appareils et des cartes SIM spécifiés dans l'argument appareils.
/// Définissez ceci sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages.
/// Définissez ceci sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages.
/// Le tableau d'ID de périphériques que vous souhaitez utiliser pour envoyer ces messages.
/// Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message.
/// S'il y a une erreur lors de l'envoi des messages.
/// Le tableau contenant les messages.
Publique statique dictionnaire<chaîne, objet> [] SendMessageToContactsList(int listid, chaîne message, Option options = Option.USE_SPECIFIED, chaîne[] dispositifs = nul, longue? programme = nul)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Listid", listid},
{ "Message", message},
{ "Programme", programme },
{ "Clé", Clé },
{ "Dispositifs", dispositifs },
{ "Option", (int) options }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"]);
}
///
/// Récupère un message en utilisant l'ID.
///
/// L'ID d'un message que vous souhaitez récupérer.
/// S'il y a une erreur lors de la réception d'un message.
/// Le dictionnaire contenant des informations sur le message.
Publique statique dictionnaire<chaîne, objet> GetMessageByID(int id)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Clé", Clé },
{ "Id", id }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"])[0];
}
///
/// Récupère les messages à l'aide de l'ID de groupe.
///
/// L'ID de groupe des messages que vous souhaitez récupérer.
/// S'il y a une erreur lors de la réception des messages.
/// Le tableau contenant les messages.
Publique statique dictionnaire<chaîne, objet> [] GetMessagesByGroupID(chaîne ID de groupe)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Clé", Clé },
{ "GroupId", ID de groupe }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"]);
}
///
/// Récupère les messages en utilisant l'état.
///
/// L'état des messages que vous souhaitez récupérer.
/// Recherchez les messages envoyés ou reçus après cette heure.
/// Recherchez les messages envoyés ou reçus avant cette heure.
/// S'il y a une erreur lors de la réception des messages.
/// Le tableau contenant les messages.
Publique statique dictionnaire<chaîne, objet> [] GetMessagesByStatus(chaîne statut, longue? startTimestamp = nul, longue? endTimestamp = nul)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{ "Clé", Clé },
{ "statut", statut },
{ "StartTimestamp", startTimestamp },
{ "EndTimestamp", endTimestamp }
};
revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"]);
}
///
/// Ajouter un nouveau contact à la liste de contacts.
///
/// L'ID de la liste de contacts dans laquelle vous souhaitez ajouter ce contact.
/// Le numéro de portable du contact.
/// Le nom du contact.
/// Définissez-le sur true si vous souhaitez réinscrire ce contact s'il existe déjà.
/// Un dictionnaire contenant des détails sur un contact nouvellement ajouté.
Publique statique dictionnaire<chaîne, objet> Ajouter le contact(int listid, chaîne nombre, chaîne Nom = nul, booléen se réinscrire = faux)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{"Clé", Clé},
{"Listid", listid},
{"Nombre", nombre},
{"Nom", Nom},
{"Se réabonner", se réinscrire ? '1' : '0'},
};
projet projet = (projet) Avoir une réponse($"{Serveur} /services/manage-contacts.php", valeurs)["Contact"];
revenir projet.ToObject<dictionnaire<chaîne, objet>> ();
}
///
/// Désinscrire un contact de la liste de contacts.
///
/// L'ID de la liste de contacts dont vous souhaitez désinscrire ce contact.
/// Le numéro de portable du contact.
/// Un dictionnaire contenant des détails sur le contact désabonné.
Publique statique dictionnaire<chaîne, objet> Se désinscrire(int listid, chaîne nombre)
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{"Clé", Clé},
{"Listid", listid},
{"Nombre", nombre},
{"Se désabonner", '1'}
};
projet projet = (projet)Avoir une réponse($"{Serveur} /services/manage-contacts.php", valeurs)["Contact"];
revenir projet.ToObject<dictionnaire<chaîne, objet>> ();
}
///
/// Obtenez les crédits de message restants.
///
/// S'il y a une erreur lors de l'obtention des crédits de message.
/// Le montant des crédits de message restants.
Publique statique chaîne GetBalance()
{
var valeurs = Nouveau dictionnaire<chaîne, objet>
{
{"Clé", Clé}
};
JToken crédits = Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Crédits"];
si (crédits.Type != JTokenType.Nul)
{
revenir crédits.ToString();
}
revenir "Illimité";
}
privé statique dictionnaire<chaîne, objet> [] getMessages(JToken messagesJToken)
{
JArray jArray = (JArray)messagesJToken;
var messages = Nouveau dictionnaire<chaîne, objet> [jArray.Compter];
pour (var indice = 0; indice < jArray.Compter; indice++)
{
messages[indice] = jArray[indice].ToObject<dictionnaire<chaîne, objet>> ();
}
revenir messages;
}
privé statique JToken Avoir une réponse(chaîne URL, dictionnaire<chaîne, objet> postData)
{
var demande = (HttpWebRequest)WebRequest.Créer(URL);
var datastring = CreateDataString(postData);
var Date = Codage.UTF8.GetBytes(datastring);
demande.Méthode = "PUBLIER";
demande.ContentType = "Application / x-www-form-urlencoded";
demande.ContentLength = Date.Longueur;
ServicePointManager.Attendez-vous à 100 Continuer = faux;
ServicePointManager.SécuritéProtocole = SecurityProtocolType.Tls12;
en utilisant (var courant = demande.GetRequestStream())
{
courant.Écrire(Date, 0, Date.Longueur);
}
var réponse = (HttpWebResponse)demande.Avoir une réponse();
si (réponse.StatusCode == HttpStatusCode.bien)
{
en utilisant (StreamReader StreamReader = Nouveau StreamReader(réponse.GetResponseStream()))
{
var jsonResponse = StreamReader.ReadToEnd();
essayer
{
projet projet = projet.Analyser(jsonResponse);
si ((booléen)projet["Succès"])
{
revenir projet["Date"];
}
jeter Nouveau Exception(projet["Erreur"]["Message"].ToString());
}
capture (JsonReaderException)
{
si (chaîne.IsNullOrEmpty(jsonResponse))
{
jeter Nouveau InvalidDataException("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
}
jeter Nouveau Exception(jsonResponse);
}
}
}
jeter Nouveau WebException($"Erreur HTTP: {(int) response.StatusCode} {response.StatusCode}");
}
privé statique chaîne CreateDataString(dictionnaire<chaîne, objet> Date)
{
StringBuilder datastring = Nouveau StringBuilder();
booléen première = faux;
pour chaque (var obj dans Date)
{
si (obj.Valeur != nul)
{
si (première)
{
première = faux;
}
autre
{
datastring.Ajouter("&");
}
datastring.Ajouter(HttpUtility.UrlEncode(obj.Clé));
datastring.Ajouter("=");
datastring.Ajouter(obj.Valeur est chaîne[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Valeur))
: HttpUtility.UrlEncode(obj.Valeur.ToString()));
}
}
revenir datastring.ToString();
}
}
}
Envoyer un seul message
essayer
{
// Envoie un message à l'aide de l'appareil principal.
SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.");
// Envoie un message en utilisant l'ID de périphérique 1.
dictionnaire<chaîne, objet> message = SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.", "1");
// Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID d'appareil 1 (représenté par "1 | 0").
// L'emplacement SIM est un index, donc l'indice de la première carte SIM est 0 et l'indice de la deuxième carte SIM est 1.
// Dans cet exemple, 1 représente l'ID de l'appareil et 0 représente l'index de l'emplacement SIM.
dictionnaire<chaîne, objet> message = SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.", "1|0");
// Envoie un message programmé à l'aide de l'appareil principal.
longue horodatage = (longue) DateHeure.UtcNow.AjouterMinutes(2).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
dictionnaire<chaîne, objet> message = SendSingleMessage(textBoxNumber.Texte, textBoxMessage.Texte, nul, horodatage);
Messagerie.Spectacle("Envoi d'un message réussi.");
}
capture (Exception exception)
{
Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}
Envoyer des messages en masse
liste<dictionnaire<chaîne, chaîne>> messages = Nouveau liste<dictionnaire<chaîne, chaîne>> ();
pour (int les = 1; les <= 12; les++)
{
var message = Nouveau dictionnaire<chaîne, chaîne>
{
{ "Nombre", "+911234567890" },
{ "Message", "Ceci est un test # {$i} de la version C#. Test de la fonctionnalité de message en masse." }
};
messages.Ajouter(message);
}
essayer
{
// Envoie des messages à l'aide de l'appareil principal.
SMS.API.Envoyer des messages(messages);
// Envoyez des messages en utilisant la carte SIM par défaut de tous les appareils disponibles. Les messages seront répartis entre tous les appareils.
SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_ALL_DEVICES);
// Envoyez des messages en utilisant toutes les cartes SIM de tous les appareils disponibles. Les messages seront répartis entre toutes les cartes SIM.
SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_ALL_SIMS);
// Envoie des messages en utilisant uniquement les périphériques spécifiés. Les messages seront répartis entre les appareils ou les cartes SIM que vous avez spécifiés.
// Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par Device ID 1, les 4 autres par SIM dans l'emplacement 1 de
// Device ID 2 (représenté comme "2 | 0") et 4 restants par SIM dans l'emplacement 2 de Device ID 2 (représenté comme "2 | 1").
SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_SPECIFIED, Nouveau [] {"1", "2|0", "2|1"});
// Envoie des messages dans les délais en utilisant l'appareil principal.
longue horodatage = (longue) DateHeure.UtcNow.AjouterMinutes(2).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
dictionnaire<chaîne, objet> [] messages = SMS.API.Envoyer des messages(messages, Option.USE_SPECIFIED, nul, horodatage);
// Envoyer un message aux contacts de la liste de contacts avec l'ID de 1.
dictionnaire<chaîne, objet> [] messages = SMS.API.SendMessageToContactsList(1, "Tester", SMS.API.Option.USE_SPECIFIED, Nouveau [] {"1"});
// Envoie un message dans les délais aux contacts de la liste de contacts avec l'ID de 1.
dictionnaire<chaîne, objet> [] messages = SMS.API.SendMessageToContactsList(1, "Test #1", Option.USE_SPECIFIED, nul, horodatage);
Messagerie.Spectacle("Succès");
}
capture (Exception exception)
{
Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}
Obtenez les crédits de message restants
essayer
{
chaîne crédits = SMS.API.GetBalance();
Messagerie.Spectacle($"Crédits de message restants: {credits}");
}
capture (Exception exception)
{
Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}
Recevoir les messages et leur état actuel
essayer
{
// Récupère un message en utilisant l'ID.
dictionnaire<chaîne, objet> message = SMS.API.GetMessageByID(1);
// Récupère les messages en utilisant l'ID de groupe.
dictionnaire<chaîne, objet> [] messages = SMS.API.GetMessagesByGroupID(") * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871");
// Récupère les messages reçus au cours des dernières 24 heures.
longue horodatage = (longue) DateHeure.UtcNow.AddHours(-24).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
GetMessagesByStatus("Reçu", horodatage);
}
capture (Exception exception)
{
Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}
Gérer les contacts
essayer {
// Ajouter un nouveau contact à la liste de contacts 1 ou réinscrire le contact s'il existe déjà.
dictionnaire<chaîne, objet> contact = SMS.API.Ajouter le contact(1, "+911234567890", "Tester C#", faux);
// Désinscription d'un contact à l'aide du numéro de portable.
dictionnaire<chaîne, objet> contact = Se désinscrire(1, "+911234567890");
}
capture (Exception exception)
{
Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}