en utilisant Système;
en utilisant Système.Collections.Générique;
en utilisant Système.je;
en utilisant Système.Filet;
en utilisant Système.Texte;
en utilisant Système.Web;
en utilisant Exemple d'application Gateway.Propriétés;
en utilisant Newtonsoft.Json;
en utilisant Newtonsoft.Json.Linq;
espace de noms SMS
{
statique classe API
{
privé statique lecture seule chaîne Serveur = "https://sms.sendapp.live"
privé statique lecture seule chaîne Clé = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
publique énumération Option
{
UTILISATION_SPÉCIFIÉE = 0,
UTILISER_TOUS_LES_APPAREILS = 1,
UTILISER_TOUS_LES_SIMS = 2
}
///
/// Envoyer un message unique à un numéro de mobile spécifique.
///
/// Le numéro de téléphone portable auquel vous souhaitez envoyer un message.
/// Le message que vous souhaitez envoyer.
/// L'ID d'un appareil que vous souhaitez utiliser pour envoyer ce message.
/// Définissez l'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> Envoyer un message unique(chaîne nombre, chaîne message, chaîne appareil = "0", long? calendrier = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "nombre", nombre},
{ "message", message},
{ "calendrier", calendrier },
{ "clé", Clé },
{ « appareils », appareil }
};
retour Obtenir des messages(Obtenir une réponse($"{Serveur}/services/send.php", valeurs)["messages"])[0];
}
///
/// Envoyez plusieurs messages à différents numéros de mobile.
///
/// Le tableau contenant des nombres et des messages.
/// Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument des 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 des identifiants des appareils que vous souhaitez utiliser pour envoyer ces messages.
/// Définissez l'horodatage lorsque vous souhaitez envoyer ce message.
/// Définissez-le sur vrai si vous souhaitez envoyer des messages en utilisant un seul appareil aléatoire parmi les 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 option = Option.UTILISATION_SPÉCIFIÉE, chaîne[] appareils = nul, long? calendrier = nul, booléen utiliserRandomDevice = FAUX)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "messages", JsonConvert.SerializeObject(messages)},
{ "calendrier", calendrier },
{ "clé", Clé },
{ « appareils », appareils },
{ "option", (int) option },
{ « useRandomDevice », utiliserRandomDevice }
};
retour Obtenir des messages(Obtenir 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 les appareils et les cartes SIM spécifiés dans l'argument des 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 des identifiants des appareils que vous souhaitez utiliser pour envoyer ces messages.
/// Définissez l'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>[] Envoyer un message à la liste de contacts(int ID de liste, chaîne message, Option option = Option.UTILISATION_SPÉCIFIÉE, chaîne[] appareils = nul, long? calendrier = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "listID", ID de liste},
{ "message", message},
{ "calendrier", calendrier },
{ "clé", Clé },
{ « appareils », appareils },
{ "option", (int) option }
};
retour Obtenir des messages(Obtenir une réponse($"{Serveur}/services/send.php", valeurs)["messages"]);
}
///
/// Obtenir 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> Obtenir le message par ID(int identifiant)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", Clé },
{ "identifiant", identifiant }
};
retour Obtenir des messages(Obtenir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"])[0];
}
///
/// Récupérez des messages en utilisant 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>[] Obtenir les messages par ID de groupe(chaîne identifiant de groupe)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", Clé },
{ « groupId », identifiant de groupe }
};
retour Obtenir des messages(Obtenir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"]);
}
///
/// Obtenez des messages en utilisant le statut.
///
/// Le statut des messages que vous souhaitez récupérer.
/// Rechercher 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>[] Obtenir des messages par statut(chaîne statut, long? horodatage de début = nul, long? horodatage de fin = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", Clé },
{ "statut", statut },
{ "startTimestamp", horodatage de début },
{ "endTimestamp", horodatage de fin }
};
retour Obtenir des messages(Obtenir 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 vrai si vous souhaitez réabonner 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 un contact(int ID de liste, chaîne nombre, chaîne nom = nul, booléen se réabonner = FAUX)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", Clé},
{"listID", ID de liste},
{"nombre", nombre},
{"nom", nom},
{« se réabonner », se réabonner ? '1' : '0'},
};
JObject jObject = (JObject) Obtenir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
retour jObject.ÀObjet<Dictionnaire<chaîne, objet>>();
}
///
/// Désabonner un contact de la liste de contacts.
///
/// L'ID de la liste de contacts à partir de laquelle vous souhaitez désabonner 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ésabonnerContact(int ID de liste, chaîne nombre)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", Clé},
{"listID", ID de liste},
{"nombre", nombre},
{"se désabonner", '1'}
};
JObject jObject = (JObject)Obtenir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
retour jObject.ÀObjet<Dictionnaire<chaîne, objet>>();
}
///
/// Obtenez les crédits de message restants.
///
/// S'il y a une erreur lors de l'obtention des crédits du message.
/// Le montant des crédits de message restants.
publique statique chaîne Obtenir l'équilibre()
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", Clé}
};
Jeton J crédits = Obtenir une réponse($"{Serveur}/services/send.php", valeurs)["crédits"];
si (crédits.Taper != JTokenType.Rien)
{
retour crédits.ToString();
}
retour "Illimité";
}
privé statique Dictionnaire<chaîne, objet>[] Obtenir des messages(Jeton J 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].ÀObjet<Dictionnaire<chaîne, objet>>();
}
retour messages;
}
privé statique Jeton J Obtenir une réponse(chaîne URL, Dictionnaire<chaîne, objet> données de publication)
{
var demande = (HttpWebRequest)WebRequest.Créer(URL);
var chaîne de données = Créer une chaîne de données(données de publication);
var date = Codage.UTF8.Obtenir des octets(chaîne de données);
demande.Méthode = "POSTE";
demande.Type de contenu = "application/x-www-form-urlencoded";
demande.Longueur du contenu = date.Longueur;
Gestionnaire de points de service.Expect100Continuer = vrai;
Gestionnaire de points de service.Protocole de sécurité = Type de protocole de sécurité.Tls12;
en utilisant (var flux = demande.Obtenir un flux de requêtes())
{
flux.Écrire(date, 0, date.Longueur);
}
var réponse = (Réponse HttpWeb)demande.Obtenir une réponse();
si (réponse.Code d'état == Code d'état HTTP.D'ACCORD)
{
en utilisant (Lecteur de flux lecteur de flux = nouveau Lecteur de flux(réponse.GetResponseStream()))
{
var jsonResponse = lecteur de flux.Lire jusqu'à la fin();
essayer
{
JObject jObject = JObject.Analyser(jsonResponse);
si ((booléen)jObject["succès"])
{
retour jObject["date"];
}
lancer nouveau Exception(jObject["erreur"]["message"].ToString());
}
attraper (JsonReaderException)
{
si (chaîne.EstNullOuVide(jsonResponse))
{
lancer nouveau Exception de données invalides(Données manquantes dans la demande. Veuillez fournir toutes les informations nécessaires pour envoyer des messages.);
}
lancer nouveau Exception(jsonResponse);
}
}
}
lancer nouveau Exception Web($« Erreur HTTP : {(int)response.StatusCode} {response.StatusCode} »);
}
privé statique chaîne Créer une chaîne de données(Dictionnaire<chaîne, objet> date)
{
Générateur de chaînes chaîne de données = nouveau Générateur de chaînes();
booléen d'abord = vrai;
pour chaque (var objet dans date)
{
si (objet.Valeur != nul)
{
si (d'abord)
{
d'abord = FAUX;
}
autre
{
chaîne de données.Ajouter("&");
}
chaîne de données.Ajouter(HttpUtility.UrlEncode(objet.Clé));
chaîne de données.Ajouter("=");
chaîne de données.Ajouter(objet.Valeur est chaîne[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(objet.Valeur))
: HttpUtility.UrlEncode(objet.Valeur.ToString()));
}
}
retour chaîne de données.ToString();
}
}
}
Envoyer un message unique
essayer
{
// Envoyer un message en utilisant l'appareil principal.
SMS.API.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. »);
// Envoyer un message en utilisant l'ID de périphérique 1.
Dictionnaire<chaîne, objet> message = SMS.API.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », "1");
// Envoyer 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'index de la première SIM est 0 et l'index de la deuxième 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.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », "1|0");
// Envoyer un message planifié à l'aide de l'appareil principal.
long horodatage = (long) DateHeure.UtcNow.Ajouter des minutes(2).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
Dictionnaire<chaîne, objet> message = Envoyer un message unique(Numéro de zone de texte.Texte, Message de zone de texte.Texte, nul, horodatage);
MessageBox.Montrer(« Message envoyé avec succès. »);
}
attraper (Exception exception)
{
MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}
Envoyer des messages en masse
Liste<Dictionnaire<chaîne, chaîne>> messages = nouveau Liste<Dictionnaire<chaîne, chaîne>>();
pour (int le = 1; le <= 12; le++)
{
var message = nouveau Dictionnaire<chaîne, chaîne>
{
{ "nombre", "+911234567890" },
{ "message", « Il s'agit d'un test #{$i} de la version C#. Test de la fonctionnalité de messagerie en masse. » }
};
messages.Ajouter(message);
}
essayer
{
// Envoyer des messages à l'aide de l'appareil principal.
SMS.API.Envoyer des messages(messages);
// Envoyer 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.UTILISER_TOUS_LES_APPAREILS);
// Envoyez des messages avec 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.UTILISER_TOUS_LES_SIMS);
// Envoyez des messages uniquement avec les appareils spécifiés. Les messages seront répartis entre les appareils ou cartes SIM spécifiés.
// Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par l'ID d'appareil 1, les 4 autres par la carte SIM dans l'emplacement 1 de
// ID de l'appareil 2 (représenté par « 2|0 ») et les 4 restants par carte SIM dans l'emplacement 2 de l'ID de l'appareil 2 (représentés par « 2|1 »).
SMS.API.Envoyer des messages(messages, SMS.API.Option.UTILISATION_SPÉCIFIÉE, nouveau [] {"1", "2|0", "2|1"});
// Envoyez des messages selon un calendrier à l'aide de l'appareil principal.
long horodatage = (long) DateHeure.UtcNow.Ajouter des minutes(2).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
Dictionnaire<chaîne, objet>[] messages = SMS.API.Envoyer des messages(messages, Option.UTILISATION_SPÉCIFIÉE, nul, horodatage);
// Envoyer un message aux contacts de la liste de contacts avec l'ID 1.
Dictionnaire<chaîne, objet>[] messages = SMS.API.Envoyer un message à la liste de contacts(1, "Test", SMS.API.Option.UTILISATION_SPÉCIFIÉE, nouveau [] {"1"});
// Envoyer un message selon un calendrier aux contacts de la liste de contacts avec l'ID 1.
Dictionnaire<chaîne, objet>[] messages = SMS.API.Envoyer un message à la liste de contacts(1, « Test #1 », Option.UTILISATION_SPÉCIFIÉE, nul, horodatage);
MessageBox.Montrer("Succès");
}
attraper (Exception exception)
{
MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}
Obtenez les crédits de message restants
essayer
{
chaîne crédits = SMS.API.Obtenir l'équilibre();
MessageBox.Montrer($Crédits de message restants : {crédits});
}
attraper (Exception exception)
{
MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}
Obtenez les messages et leur statut actuel
essayer
{
// Obtenir un message en utilisant l'ID.
Dictionnaire<chaîne, objet> message = SMS.API.Obtenir le message par ID(1);
// Récupérer des messages à l'aide de l'ID de groupe.
Dictionnaire<chaîne, objet>[] messages = SMS.API.Obtenir les messages par ID de groupe(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
// Obtenez les messages reçus au cours des dernières 24 heures.
long horodatage = (long) DateHeure.UtcNow.Ajouter des heures(-24).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
Obtenir des messages par statut("Reçu", horodatage);
}
attraper (Exception exception)
{
MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}
Gérer les contacts
essayer {
// Ajouter un nouveau contact à la liste de contacts 1 ou réabonner le contact s'il existe déjà.
Dictionnaire<chaîne, objet> contact = SMS.API.Ajouter un contact(1, "+911234567890", « Test C# », vrai);
// Désabonner un contact en utilisant le numéro de mobile.
Dictionnaire<chaîne, objet> contact = Se désabonnerContact(1, "+911234567890");
}
attraper (Exception exception)
{
MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}