usando Sistema;
usando Sistema.Colecções.Genérico;
usando Sistema.Eu;
usando Sistema.Internet;
usando Sistema.Texto;
usando Sistema.Rede;
usando Gateway_Sample_Application.Propriedades;
usando Newtonsoft.jSON;
usando Newtonsoft.jSON.Linq;
namespace SMS
{
estático classe API
{
privado estático somente leitura corda Servidor = "Https://sms.sendapp.live"
privado estático somente leitura corda Chave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
público enum Opção
{
USE_SPECIFIED = 0,
USE_ALL_DEVICES = 1,
USE_ALL_SIMS = 2
}
///
/// Envia uma mensagem para um número de celular específico.
///
/// O número do celular para o qual você deseja enviar a mensagem.
/// A mensagem que você deseja enviar.
/// O ID do dispositivo que você deseja usar para enviar esta mensagem.
/// Defina como carimbo de data e hora quando você deseja enviar esta mensagem.
/// Se houver um erro ao enviar uma mensagem.
/// O dicionário que contém informações sobre a mensagem.
público estático Dicionário<corda, objeto> SendSingleMessage(corda número, corda mensagem, corda dispositivo = "0", longo? cronograma = nulo)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Número", número},
{ "Mensagem", mensagem},
{ "Cronograma", cronograma },
{ "Chave", Chave },
{ "Dispositivos", dispositivo }
};
Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"])[0];
}
///
/// Envie várias mensagens para diferentes números de celular.
///
/// A matriz que contém números e mensagens.
/// Defina isso como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos.
/// Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens.
/// Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
/// A matriz de ID dos dispositivos que você deseja usar para enviar essas mensagens.
/// Defina como carimbo de data e hora quando você deseja enviar esta mensagem.
/// Defina como true se desejar enviar mensagens usando apenas um dispositivo aleatório dos dispositivos selecionados.
/// Se houver um erro ao enviar mensagens.
/// A matriz que contém mensagens.
público estático Dicionário<corda, objeto> [] Enviar mensagens(Lista<Dicionário<corda, corda>> mensagens, Opção opções = Opção.USE_SPECIFIED, corda[] dispositivos = nulo, longo? cronograma = nulo, bool useRandomDevice = falso)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Mensagens", JsonConvert.SerializeObject(mensagens)},
{ "Cronograma", cronograma },
{ "Chave", Chave },
{ "Dispositivos", dispositivos },
{ "Opção", (int) opções },
{ "UseRandomDevice", useRandomDevice }
};
Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"]);
}
///
/// Envie uma mensagem para os contatos na lista de contatos especificada.
///
/// O ID da lista de contatos para onde você deseja enviar esta mensagem.
/// A mensagem que você deseja enviar.
/// Defina isso como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos.
/// Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens.
/// Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
/// A matriz de ID dos dispositivos que você deseja usar para enviar essas mensagens.
/// Defina como carimbo de data e hora quando você deseja enviar esta mensagem.
/// Se houver um erro ao enviar mensagens.
/// A matriz que contém mensagens.
público estático Dicionário<corda, objeto> [] SendMessageToContactsList(int escasso, corda mensagem, Opção opções = Opção.USE_SPECIFIED, corda[] dispositivos = nulo, longo? cronograma = nulo)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Listid", escasso},
{ "Mensagem", mensagem},
{ "Cronograma", cronograma },
{ "Chave", Chave },
{ "Dispositivos", dispositivos },
{ "Opção", (int) opções }
};
Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"]);
}
///
/// Receba uma mensagem usando o ID.
///
/// O ID de uma mensagem que você deseja recuperar.
/// Se houver um erro ao receber uma mensagem.
/// O dicionário que contém informações sobre a mensagem.
público estático Dicionário<corda, objeto> GetMessageByID(int Eu iria)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Chave", Chave },
{ "Eu iria", Eu iria }
};
Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"])[0];
}
///
/// Obter mensagens usando o ID do grupo.
///
/// O ID do grupo de mensagens que você deseja recuperar.
/// Se houver um erro ao obter mensagens.
/// A matriz que contém mensagens.
público estático Dicionário<corda, objeto> [] GetMessagesByGroupID(corda ID do grupo)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Chave", Chave },
{ "GroupId", ID do grupo }
};
Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"]);
}
///
/// Receba mensagens usando o status.
///
/// O status das mensagens que você deseja recuperar.
/// Procure mensagens enviadas ou recebidas após esse período.
/// Pesquise as mensagens enviadas ou recebidas antes deste horário.
/// Se houver um erro ao obter mensagens.
/// A matriz que contém mensagens.
público estático Dicionário<corda, objeto> [] GetMessagesByStatus(corda status, longo? startTimestamp = nulo, longo? endTimestamp = nulo)
{
var valores = Novo Dicionário<corda, objeto>
{
{ "Chave", Chave },
{ "status", status },
{ "StartTimestamp", startTimestamp },
{ "EndTimestamp", endTimestamp }
};
Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"]);
}
///
/// Adicione um novo contato à lista de contatos.
///
/// O ID da lista de contatos em que você deseja adicionar esse contato.
/// O número do celular do contato.
/// O nome do contato.
/// Defina-o como true se você deseja assinar novamente este contato, se ele já existir.
/// Um dicionário que contém detalhes sobre um contato adicionado recentemente.
público estático Dicionário<corda, objeto> Adicionar contato(int escasso, corda número, corda nome = nulo, bool reinscrever = falso)
{
var valores = Novo Dicionário<corda, objeto>
{
{"Chave", Chave},
{"Listid", escasso},
{"Número", número},
{"Nome", nome},
{"Inscrever-se novamente", reinscrever ? '1' : '0'},
};
jobject jobject = (jobject) GetResponse($"{Server} /services/manage-contacts.php", valores)["Contato"];
Retorna jobject.ToObject<Dicionário<corda, objeto>> ();
}
///
/// Cancele a inscrição de um contato da lista de contatos.
///
/// O ID da lista de contatos da qual você deseja cancelar a inscrição deste contato.
/// O número do celular do contato.
/// Um dicionário que contém detalhes sobre o contato não inscrito.
público estático Dicionário<corda, objeto> Cancelar inscrição(int escasso, corda número)
{
var valores = Novo Dicionário<corda, objeto>
{
{"Chave", Chave},
{"Listid", escasso},
{"Número", número},
{"Cancelar subscrição", '1'}
};
jobject jobject = (jobject)GetResponse($"{Server} /services/manage-contacts.php", valores)["Contato"];
Retorna jobject.ToObject<Dicionário<corda, objeto>> ();
}
///
/// Obtenha créditos de mensagens restantes.
///
/// Se houver um erro ao obter créditos da mensagem.
/// A quantidade de créditos de mensagens restantes.
público estático corda GetBalance()
{
var valores = Novo Dicionário<corda, objeto>
{
{"Chave", Chave}
};
JToken créditos = GetResponse($"{Servidor} /services/send.php", valores)["Créditos"];
E se (créditos.Tipo != JTokenType.Nulo)
{
Retorna créditos.Para sequenciar();
}
Retorna "Ilimitado";
}
privado estático Dicionário<corda, objeto> [] getMessages(JToken messagesJToken)
{
JArray jArray = (JArray)messagesJToken;
var mensagens = Novo Dicionário<corda, objeto> [jArray.Contagem];
para (var índice = 0; índice < jArray.Contagem; índice++)
{
mensagens[índice] = jArray[índice].ToObject<Dicionário<corda, objeto>> ();
}
Retorna mensagens;
}
privado estático JToken GetResponse(corda url, Dicionário<corda, objeto> dados de postagem)
{
var solicitação = (HttpWebRequest)WebRequest.Crio(url);
var datatring = CreateDataString(dados de postagem);
var encontro = Codificação.UTF8.GetBytes(datatring);
solicitação.Método = "POSTAR";
solicitação.Tipo de conteúdo = "Application / x-www-form-urlencoded";
solicitação.Comprimento do conteúdo = encontro.comprimento;
ServicePointManager.Expect100Continue = falso;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
usando (var corrente = solicitação.GetRequestStream())
{
corrente.Escrever(encontro, 0, encontro.comprimento);
}
var resposta = (HttpWebResponse)solicitação.GetResponse();
E se (resposta.StatusCode == HttpStatusCode.ok)
{
usando (StreamReader StreamReader = Novo StreamReader(resposta.GetResponseStream()))
{
var jsonResponse = StreamReader.ReadToEnd();
experimentar
{
jobject jobject = jobject.Analisar(jsonResponse);
E se ((bool)jobject["Sucesso"])
{
Retorna jobject["encontro"];
}
lançar Novo Exceção(jobject["Erro"]["Mensagem"].Para sequenciar());
}
pegar (JsonReaderException)
{
E se (corda.IsNullOrEmpty(jsonResponse))
{
lançar Novo InvalidDataException("Dados ausentes na solicitação. Forneça todas as informações necessárias para enviar mensagens.");
}
lançar Novo Exceção(jsonResponse);
}
}
}
lançar Novo WebException($"Erro HTTP: {(int) response.StatusCode} {response.StatusCode}");
}
privado estático corda CreateDataString(Dicionário<corda, objeto> encontro)
{
StringBuilder datatring = Novo StringBuilder();
bool primeiro = falso;
para cada (var obj no encontro)
{
E se (obj.Valor != nulo)
{
E se (primeiro)
{
primeiro = falso;
}
outro
{
datatring.Acrescentar("&");
}
datatring.Acrescentar(HttpUtility.UrlEncode(obj.Chave));
datatring.Acrescentar("=");
datatring.Acrescentar(obj.Valor é corda[]
? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Valor))
: HttpUtility.UrlEncode(obj.Valor.Para sequenciar()));
}
}
Retorna datatring.Para sequenciar();
}
}
}
Enviar mensagem única
experimentar
{
// Envie uma mensagem usando o dispositivo principal.
SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.");
// Envie uma mensagem usando o ID do dispositivo 1.
Dicionário<corda, objeto> mensagem = SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.", "1");
// Envie uma mensagem usando o SIM no slot 1 da ID do dispositivo 1 (representado como "1 | 0").
// O slot do SIM é um índice; portanto, o índice do primeiro SIM é 0 e o índice do segundo SIM é 1.
// Neste exemplo, 1 representa o ID do dispositivo e 0 representa o índice do slot SIM.
Dicionário<corda, objeto> mensagem = SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.", "1|0");
// Enviar mensagem agendada usando o dispositivo principal.
longo timestamp = (longo) Data hora.UtcNow.AddMinutes(2).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
Dicionário<corda, objeto> mensagem = SendSingleMessage(textBoxNumber.Texto, textBoxMessage.Texto, nulo, timestamp);
Caixa de mensagem.mostrar("Enviou uma mensagem com sucesso.");
}
pegar (Exceção exceção)
{
Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}
Enviar mensagens em massa
Lista<Dicionário<corda, corda>> mensagens = Novo Lista<Dicionário<corda, corda>> ();
para (int a = 1; a <= 12; a++)
{
var mensagem = Novo Dicionário<corda, corda>
{
{ "Número", "+911234567890" },
{ "Mensagem", "Este é um teste # {$i} da versão C#. Testando a funcionalidade de mensagens em massa." }
};
mensagens.Adicionar(mensagem);
}
experimentar
{
// Envie mensagens usando o dispositivo principal.
SMS.API.Enviar mensagens(mensagens);
// Envie mensagens usando o SIM padrão de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os dispositivos.
SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_ALL_DEVICES);
// Envie mensagens usando todos os SIMs de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os SIMs.
SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_ALL_SIMS);
// Envie mensagens usando apenas dispositivos especificados. As mensagens serão divididas entre dispositivos ou SIMs que você especificou.
// Se você enviar 12 mensagens usando esse código, 4 mensagens serão enviadas pelo ID do dispositivo 1, outras 4 pelo SIM no slot 1 do
// ID do dispositivo 2 (representado como "2 | 0") e os 4 restantes pelo SIM no slot 2 do ID do dispositivo 2 (representado como "2 | 1").
SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_SPECIFIED, Novo [] {"1", "2|0", "2|1"});
// Envia mensagens dentro do cronograma usando o dispositivo principal.
longo timestamp = (longo) Data hora.UtcNow.AddMinutes(2).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
Dicionário<corda, objeto> [] mensagens = SMS.API.Enviar mensagens(mensagens, Opção.USE_SPECIFIED, nulo, timestamp);
// Envia uma mensagem para os contatos na lista de contatos com o ID 1.
Dicionário<corda, objeto> [] mensagens = SMS.API.SendMessageToContactsList(1, "Teste", SMS.API.Opção.USE_SPECIFIED, Novo [] {"1"});
// Envia uma mensagem agendada para os contatos na lista de contatos com o ID 1.
Dicionário<corda, objeto> [] mensagens = SMS.API.SendMessageToContactsList(1, "Teste #1", Opção.USE_SPECIFIED, nulo, timestamp);
Caixa de mensagem.mostrar("Sucesso");
}
pegar (Exceção exceção)
{
Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}
Obter créditos de mensagem restantes
experimentar
{
corda créditos = SMS.API.GetBalance();
Caixa de mensagem.mostrar($"Créditos de mensagem restantes: {credits}");
}
pegar (Exceção exceção)
{
Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}
Obter mensagens e seu status atual
experimentar
{
// Recebe uma mensagem usando o ID.
Dicionário<corda, objeto> mensagem = SMS.API.GetMessageByID(1);
// Obtenha mensagens usando o ID do grupo.
Dicionário<corda, objeto> [] mensagens = SMS.API.GetMessagesByGroupID(") * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871");
// Recebe mensagens recebidas nas últimas 24 horas.
longo timestamp = (longo) Data hora.UtcNow.AddHours(-24).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
GetMessagesByStatus("Recebido", timestamp);
}
pegar (Exceção exceção)
{
Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}
Gerenciar contatos
experimentar {
// Adicione um novo contato à lista de contatos 1 ou reinscreva o contato, se ele já existir.
Dicionário<corda, objeto> contato = SMS.API.Adicionar contato(1, "+911234567890", "Teste C#", falso);
// Cancele a inscrição de um contato usando o número de celular.
Dicionário<corda, objeto> contato = Cancelar inscrição(1, "+911234567890");
}
pegar (Exceção exceção)
{
Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}