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.la toile;
en utilisant Gateway_Sample_Application.Propriétés;
en utilisant newtonsoft.json;
en utilisant newtonsoft.json.Linq;
espaces de noms SMS
{
statique classe Apis
{
privé statique lecture seulement chaîne Serveur = "https://sms.sendapp.live"
privé statique lecture seulement chaîne clé = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
public énumération option
{
USE_SPECIFIED = 0,
USE_ALL_DEVICES = 1,
USE_ALL_SIMS = 2
}
///
/// Envoyer un message unique à un numéro de mobile spécifique.
///
/// Le numéro de mobile 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.
/// Réglez-le sur 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.
public statique Dictionnaire<chaîne, objet> SendSingleMessage(chaîne Numéro, chaîne message, chaîne appareil = "0", long? calendrier = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "nombre", Numéro},
{ "message", message},
{ "calendrier", calendrier },
{ "clé", clé },
{ "dispositifs", appareil }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["messages"])[0];
}
///
/// Envoyez plusieurs messages à différents numéros mobiles.
///
/// Le tableau contenant les nombres et les 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 d'ID d'appareils que vous souhaitez utiliser pour envoyer ces messages.
/// Réglez-le sur l'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 parmi les appareils sélectionnés.
/// S'il y a une erreur lors de l'envoi de messages.
/// Le tableau contenant les messages.
public statique Dictionnaire<chaîne, objet>[] Envoyer des messages(liste<Dictionnaire<chaîne, chaîne>> messages, option option = option.USE_SPECIFIED, chaîne[] dispositifs = nul, long? calendrier = nul, bourdonner useRandomDevice = FAUX)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "messages", JsonConvert.SerializeObjectSerializeObject(messages)},
{ "calendrier", calendrier },
{ "clé", clé },
{ "dispositifs", dispositifs },
{ "options", (entier) option },
{ "useRandomDevice", useRandomDevice }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["messages"]);
}
///
/// Envoie 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 d'ID d'appareils que vous souhaitez utiliser pour envoyer ces messages.
/// Réglez-le sur l'horodatage lorsque vous souhaitez envoyer ce message.
/// S'il y a une erreur lors de l'envoi de messages.
/// Le tableau contenant les messages.
public statique Dictionnaire<chaîne, objet>[] SendMessageToContactsList(entier ID de liste, chaîne message, option option = option.USE_SPECIFIED, chaîne[] dispositifs = nul, long? calendrier = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "listID", ID de liste},
{ "message", message},
{ "calendrier", calendrier },
{ "clé", clé },
{ "dispositifs", dispositifs },
{ "options", (entier) option }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.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.
public statique Dictionnaire<chaîne, objet> GetMessageByID(entier identifiant)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", clé },
{ "identifiant", identifiant }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"])[0];
}
///
/// Récupérez les messages à l'aide de l'ID de groupe.
///
/// ID de groupe de 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.
public statique Dictionnaire<chaîne, objet>[] GetMessagesByGroupID(chaîne ID de groupe)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", clé },
{ "identifiant de groupe", ID de groupe }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"]);
}
///
/// Récupère les messages en utilisant le status.
///
/// L'état des messages que vous souhaitez récupérer.
/// Rechercher les messages envoyés ou reçus après cette heure.
/// Rechercher 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.
public statique Dictionnaire<chaîne, objet>[] GetMessagesByStatus(chaîne statut, long? startTimestamp = nul, long? endTimestamp = nul)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{ "clé", clé },
{ "statut", statut },
{ "startTimestamp", startTimestamp },
{ "horodatage de fin", endTimestamp }
};
retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"]);
}
///
/// Ajouter un nouveau contact à la liste des contacts.
///
/// L'ID de la liste de contacts où 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éabonner ce contact s'il existe déjà.
/// Un dictionnaire contenant des détails sur un contact nouvellement ajouté.
public statique Dictionnaire<chaîne, objet> Ajouter le contact(entier ID de liste, chaîne Numéro, chaîne nom = nul, bourdonner réabonner = FAUX)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", clé},
{"listID", ID de liste},
{"nombre", Numéro},
{"nom", nom},
{"se réabonner", réabonner ? '1' : '0'},
};
JObject jObjet = (JObject) Avoir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
retour jObjet.VersObjet<Dictionnaire<chaîne, objet>>();
}
///
/// Désinscrire un contact de la liste des contacts.
///
/// L'ID de la liste de contacts à partir de laquelle vous souhaitez désinscrire ce contact.
/// Le numéro de portable du contact.
/// Un dictionnaire contenant des détails sur le contact désabonné.
public statique Dictionnaire<chaîne, objet> DésinscriptionContact(entier ID de liste, chaîne Numéro)
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", clé},
{"listID", ID de liste},
{"nombre", Numéro},
{"Se désabonner", '1'}
};
JObject jObjet = (JObject)Avoir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
retour jObjet.VersObjet<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.
public statique chaîne ObtenirBalance()
{
var valeurs = nouveau Dictionnaire<chaîne, objet>
{
{"clé", clé}
};
JTokens crédits = Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["crédits"];
si (crédits.Taper != JTokenType.Nul)
{
retour crédits.ToString();
}
retour "Illimité";
}
privé statique Dictionnaire<chaîne, objet>[] Obtenir des messages(JTokens messagesJToken)
{
Tableau J jTableau = (Tableau J)messagesJToken;
var messages = nouveau Dictionnaire<chaîne, objet>[jTableau.Compter];
pour (var indice = 0; indice < jTableau.Compter; indice++)
{
messages[indice] = jTableau[indice].VersObjet<Dictionnaire<chaîne, objet>>();
}
retour messages;
}
privé statique JTokens Avoir une réponse(chaîne il cria, Dictionnaire<chaîne, objet> postdater)
{
var demande = (HttpWebRequest)WebRequest.Créer(il cria);
var dataString = CreateDataString(postdater);
var date = codage.UTF8.Obtenir des octets(dataString);
demande.méthode = "POSTE";
demande.Type de contenu = "application/x-www-formulaire-urlencodé";
demande.Longueur du contenu = date.Longueur;
Gestionnaire de points de service.Attendre100Continuer = vrai;
Gestionnaire de points de service.Protocole de sécurité = SecurityProtocolTypeSecurityProtocolType.Tls12;
en utilisant (var flux = demande.GetRequestStream())
{
flux.Écrire(date, 0, date.Longueur);
}
var réponse = (HttpWebResponse)demande.Avoir une réponse();
si (réponse.Code d'état == HttpStatusCode.D'accord)
{
en utilisant (Lecteur de flux streamReader = nouveau Lecteur de flux(réponse.GetResponseStream()))
{
var jsonResponse = streamReader.LireAFin();
essayer
{
JObject jObjet = JObject.Il semblait(jsonResponse);
si ((bourdonner)jObjet["succès"])
{
retour jObjet["date"];
}
lancer nouveau Exception(jObjet["erreur"]["message"].ToString());
}
attraper (JsonReaderException)
{
si (chaîne.EstNullOuVide(jsonResponse))
{
lancer nouveau InvalidDataException("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
}
lancer nouveau Exception(jsonResponse);
}
}
}
lancer nouveau WebException($"Erreur HTTP : {(int)response.StatusCode} {response.StatusCode}");
}
privé statique chaîne CreateDataString(Dictionnaire<chaîne, objet> date)
{
Générateur de chaînes dataString = nouveau Générateur de chaînes();
bourdonner d'abord = vrai;
pour chaque (var objet dans date)
{
si (objet.Valeur != nul)
{
si (d'abord)
{
d'abord = FAUX;
}
autre
{
dataString.annexe("&");
}
dataString.annexe(HttpUtility.UrlEncode(objet.clé));
dataString.annexe("=");
dataString.annexe(objet.Valeur est chaîne[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObjectSerializeObject(objet.Valeur))
: HttpUtility.UrlEncode(objet.Valeur.ToString()));
}
}
retour dataString.ToString();
}
}
}
Envoyer un seul message
essayer
{
// Envoie un message à l'aide de l'appareil principal.
SMS.Apis.SendSingleMessage("+911234567890", "Ceci est un test de messages uniques.");
// Envoie un message en utilisant l'ID de périphérique 1.
Dictionnaire<chaîne, objet> message = SMS.Apis.SendSingleMessage("+911234567890", "Ceci est un test de messages uniques.", "1");
// Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID de périphérique 1 (représenté par "1|0").
// L'emplacement SIM est un index donc l'index du premier SIM est 0 et l'index du 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.Apis.SendSingleMessage("+911234567890", "Ceci est un test de messages uniques.", "1|0");
// Envoi d'un message programmé à 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 = SendSingleMessage(textBoxNumber.Texte, textBoxMessage.Texte, nul, horodatage);
Messagerie.Montre(« Message envoyé avec succès.);
}
attraper (Exception exception)
{
Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}
Envoyer des messages en masse
liste<Dictionnaire<chaîne, chaîne>> messages = nouveau liste<Dictionnaire<chaîne, chaîne>>();
pour (entier le = 1; le <= 12; le++)
{
var message = nouveau Dictionnaire<chaîne, chaîne>
{
{ "nombre", "+911234567890" },
{ "message", "Ceci est un test #{$i} de la version C#. Test de la fonctionnalité des messages en masse." }
};
messages.Ajouter(message);
}
essayer
{
// Envoie des messages à l'aide de l'appareil principal.
SMS.Apis.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.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_ALL_DEVICES);
// Envoyez des messages en utilisant toutes les cartes SIM de tous les appareils disponibles. Les messages seront partagés entre toutes les cartes SIM.
SMS.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_ALL_SIMS);
// Envoie des messages en utilisant uniquement les appareils spécifiés. Les messages seront répartis entre les appareils ou les cartes SIM que vous spécifiez.
// Si vous envoyez 12 messages à l'aide de ce code, 4 messages seront envoyés par l'ID de l'appareil 1, les 4 autres par la carte SIM dans l'emplacement 1 de
// Device ID 2 (représenté par "2|0") et 4 restants par SIM dans l'emplacement 2 de Device ID 2 (représenté par "2|1").
SMS.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_SPECIFIED, nouveau [] {"1", "2|0", "2|1"});
// Envoie des messages dans les délais à 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.Apis.Envoyer des messages(messages, option.USE_SPECIFIED, nul, horodatage);
// Envoie un message aux contacts de la liste de contacts avec l'ID 1.
Dictionnaire<chaîne, objet>[] messages = SMS.Apis.SendMessageToContactsList(1, "Test", SMS.Apis.option.USE_SPECIFIED, nouveau [] {"1"});
// Envoie un message dans les délais aux contacts de la liste de contacts avec l'ID 1.
Dictionnaire<chaîne, objet>[] messages = SMS.Apis.SendMessageToContactsList(1, "Essai #1", option.USE_SPECIFIED, nul, horodatage);
Messagerie.Montre("Succès");
}
attraper (Exception exception)
{
Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}
Obtenez les crédits de message restants
essayer
{
chaîne crédits = SMS.Apis.ObtenirBalance();
Messagerie.Montre($"Crédits de message restant : {crédits}");
}
attraper (Exception exception)
{
Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}
Obtenir des messages et leur statut actuel
essayer
{
// Récupère un message à l'aide de l'ID.
Dictionnaire<chaîne, objet> message = SMS.Apis.GetMessageByID(1);
// Récupère les messages à l'aide de l'ID de groupe.
Dictionnaire<chaîne, objet>[] messages = SMS.Apis.GetMessagesByGroupID(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
// Récupère les messages reçus au cours des dernières 24 heures.
long horodatage = (long) DateHeure.UtcNow.AjouterHeures(-24).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
GetMessagesByStatus("Reçu", horodatage);
}
attraper (Exception exception)
{
Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, 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.Apis.Ajouter le contact(1, "+911234567890", "Essai C#", vrai);
// Se désabonner du contact en utilisant le numéro de mobile.
Dictionnaire<chaîne, objet> contact = DésinscriptionContact(1, "+911234567890");
}
attraper (Exception exception)
{
Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}