usando Sistema;
usando Sistema.Coleções.Genérico;
usando Sistema.EU;
usando Sistema.Líquido;
usando Sistema.Texto;
usando Sistema.Rede;
usando Aplicativo_de_amostra_de_gateway.Propriedades;
usando Newtonsoft.Json;
usando Newtonsoft.Json.Linq;
espaço de nomes SMS
{
estático aula API
{
privado estático somente leitura corda Servidor = "https://sms.sendapp.live"
privado estático somente leitura corda Chave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";
público enumeração Opção
{
USO_ESPECIFICADO = 0,
USAR_TODOS_OS_DISPOSITIVOS = 1,
USAR_TODOS_OS_SIMS = 2
}
///
/// Enviar mensagem única para um número de celular específico.
///
/// O número de celular para onde você deseja enviar a mensagem.
/// A mensagem que você quer enviar.
/// O ID de um dispositivo que você deseja usar para enviar esta mensagem.
/// Defina o registro de data e hora em que você deseja enviar esta mensagem.
/// Se ocorrer um erro ao enviar uma mensagem.
/// O dicionário contendo informações sobre a mensagem.
público estático Dicionário<corda, objeto> Enviar mensagem única(corda número, corda mensagem, corda dispositivo = "0", longo? agendar = nulo)
{
var valores = novo Dicionário<corda, objeto>
{
{ "número", número},
{ "mensagem", mensagem},
{ "agendar", agendar },
{ "chave", Chave },
{ "dispositivos", dispositivo }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"])[0];
}
///
/// Envie várias mensagens para diferentes números de celular.
///
/// A matriz contendo números e mensagens.
/// Defina como USE_SPECIFIED se quiser usar dispositivos e SIMs especificados no argumento de dispositivos.
/// Defina como USE_ALL_DEVICES se quiser usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens.
/// Defina como USE_ALL_SIMS se quiser usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
/// A matriz de IDs de dispositivos que você deseja usar para enviar essas mensagens.
/// Defina o registro de data e hora em que você deseja enviar esta mensagem.
/// Defina como verdadeiro se quiser enviar mensagens usando apenas um dispositivo aleatório dentre os dispositivos selecionados.
/// Se ocorrer um erro ao enviar mensagens.
/// A matriz contendo mensagens.
público estático Dicionário<corda, objeto>[] Enviar mensagens(Lista<Dicionário<corda, corda>> mensagens, Opção opção = Opção.USO_ESPECIFICADO, corda[] dispositivos = nulo, longo? agendar = nulo, bool useRandomDevice = falso)
{
var valores = novo Dicionário<corda, objeto>
{
{ "mensagens", JsonConvert.SerializarObjeto(mensagens)},
{ "agendar", agendar },
{ "chave", Chave },
{ "dispositivos", dispositivos },
{ "opção", (int) opção },
{ "usarDispositivoAleatório", useRandomDevice }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"]);
}
///
/// Envia uma mensagem para contatos na lista de contatos especificada.
///
/// O ID da lista de contatos para onde você deseja enviar esta mensagem.
/// A mensagem que você quer enviar.
/// Defina como USE_SPECIFIED se quiser usar dispositivos e SIMs especificados no argumento de dispositivos.
/// Defina como USE_ALL_DEVICES se quiser usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens.
/// Defina como USE_ALL_SIMS se quiser usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
/// A matriz de IDs de dispositivos que você deseja usar para enviar essas mensagens.
/// Defina o registro de data e hora em que você deseja enviar esta mensagem.
/// Se ocorrer um erro ao enviar mensagens.
/// A matriz contendo mensagens.
público estático Dicionário<corda, objeto>[] Enviar mensagem para lista de contatos(int ID da lista, corda mensagem, Opção opção = Opção.USO_ESPECIFICADO, corda[] dispositivos = nulo, longo? agendar = nulo)
{
var valores = novo Dicionário<corda, objeto>
{
{ "ID da lista", ID da lista},
{ "mensagem", mensagem},
{ "agendar", agendar },
{ "chave", Chave },
{ "dispositivos", dispositivos },
{ "opção", (int) opção }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"]);
}
///
/// Receba uma mensagem usando o ID.
///
/// O ID de uma mensagem que você deseja recuperar.
/// Se ocorrer um erro ao receber uma mensagem.
/// O dicionário contendo informações sobre a mensagem.
público estático Dicionário<corda, objeto> ObterMensagemPorID(int eu ia)
{
var valores = novo Dicionário<corda, objeto>
{
{ "chave", Chave },
{ "eu ia", eu ia }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"])[0];
}
///
/// Receba mensagens usando o ID do grupo.
///
/// O ID do grupo de mensagens que você deseja recuperar.
/// Se ocorrer um erro ao receber mensagens.
/// A matriz contendo mensagens.
público estático Dicionário<corda, objeto>[] ObterMensagensPorIDDoGrupo(corda ID do grupo)
{
var valores = novo Dicionário<corda, objeto>
{
{ "chave", Chave },
{ "ID do grupo", ID do grupo }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"]);
}
///
/// Receba mensagens usando o status.
///
/// O status das mensagens que você deseja recuperar.
/// Pesquise mensagens enviadas ou recebidas após esse período.
/// Pesquise mensagens enviadas ou recebidas antes desse horário.
/// Se ocorrer um erro ao receber mensagens.
/// A matriz contendo mensagens.
público estático Dicionário<corda, objeto>[] Obter mensagens por status(corda status, longo? startTimestamp = nulo, longo? carimbo de data/hora final = nulo)
{
var valores = novo Dicionário<corda, objeto>
{
{ "chave", Chave },
{ "status", status },
{ "carimbo de data/hora de início", startTimestamp },
{ "carimbo de data/hora final", carimbo de data/hora final }
};
retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"]);
}
///
/// Adicionar um novo contato à lista de contatos.
///
/// O ID da lista de contatos onde você deseja adicionar este contato.
/// O número de celular do contato.
/// O nome do contato.
/// Defina como verdadeiro se quiser inscrever novamente este contato, caso ele já exista.
/// Um dicionário contendo detalhes sobre um contato recém-adicionado.
público estático Dicionário<corda, objeto> Adicionar contato(int ID da lista, corda número, corda nome = nulo, bool reinscrever-se = falso)
{
var valores = novo Dicionário<corda, objeto>
{
{"chave", Chave},
{"ID da lista", ID da lista},
{"número", número},
{"nome", nome},
{"inscrever-se novamente", reinscrever-se ? '1' : '0'},
};
JObject jObject = (JObject) Obter resposta($"{Servidor}/serviços/gerenciar-contatos.php", valores)["contato"];
retornar jObject.ParaObjeto<Dicionário<corda, objeto>>();
}
///
/// Cancelar 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 de celular do contato.
/// Um dicionário contendo detalhes sobre o contato cancelado.
público estático Dicionário<corda, objeto> Cancelar inscriçãoContato(int ID da lista, corda número)
{
var valores = novo Dicionário<corda, objeto>
{
{"chave", Chave},
{"ID da lista", ID da lista},
{"número", número},
{"cancelar inscrição", '1'}
};
JObject jObject = (JObject)Obter resposta($"{Servidor}/serviços/gerenciar-contatos.php", valores)["contato"];
retornar jObject.ParaObjeto<Dicionário<corda, objeto>>();
}
///
/// Obter créditos de mensagem restantes.
///
/// Se ocorrer um erro ao obter créditos da mensagem.
/// A quantidade de créditos de mensagem restantes.
público estático corda Obter equilíbrio()
{
var valores = novo Dicionário<corda, objeto>
{
{"chave", Chave}
};
JToken créditos = Obter resposta($"{Servidor}/serviços/send.php", valores)["créditos"];
se (créditos.Tipo != Tipo JToken.Nada)
{
retornar créditos.Para String();
}
retornar "Ilimitado";
}
privado estático Dicionário<corda, objeto>[] Obter mensagens(JToken mensagensJToken)
{
JArray jArray = (JArray)mensagensJToken;
var mensagens = novo Dicionário<corda, objeto>[jArray.Contar];
para (var índice = 0; índice < jArray.Contar; índice++)
{
mensagens[índice] = jArray[índice].ParaObjeto<Dicionário<corda, objeto>>();
}
retornar mensagens;
}
privado estático JToken Obter resposta(corda URL, Dicionário<corda, objeto> postData)
{
var solicitar = (Solicitação HttpWeb)Solicitação da Web.Criar(URL);
var cadeia de dados = CriarString de Dados(postData);
var data = Codificação.UTF8.Obter bytes(cadeia de dados);
solicitar.Método = "PUBLICAR";
solicitar.Tipo de conteúdo = "aplicativo/x-www-form-urlencoded";
solicitar.Comprimento do conteúdo = data.Comprimento;
Gerenciador de Pontos de Serviço.Expect100Continuar = verdadeiro;
Gerenciador de Pontos de Serviço.Protocolo de Segurança = Tipo de protocolo de segurança.Tls12;
usando (var fluxo = solicitar.Obter fluxo de solicitação())
{
fluxo.Escrever(data, 0, data.Comprimento);
}
var resposta = (HttpWebResponse)solicitar.Obter resposta();
se (resposta.Código de status == Código de status HTTP.OK)
{
usando (Leitor de fluxo Leitor de fluxo = novo Leitor de fluxo(resposta.Obter fluxo de resposta()))
{
var jsonResponse = Leitor de fluxo.Ler até o fim();
tentar
{
JObject jObject = JObject.Analisar(jsonResponse);
se ((bool)jObject["sucesso"])
{
retornar jObject["data"];
}
lançar novo Exceção(jObject["erro"]["mensagem"].Para String());
}
pegar (JsonReaderException)
{
se (corda.ÉNuloOuVazio(jsonResponse))
{
lançar novo Exceção de dados inválidos("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 Exceção da Web($"Erro HTTP: {(int)response.StatusCode} {response.StatusCode}");
}
privado estático corda CriarString de Dados(Dicionário<corda, objeto> data)
{
Construtor de Strings cadeia de dados = novo Construtor de Strings();
bool primeiro = verdadeiro;
para cada (var objeto em data)
{
se (objeto.Valor != nulo)
{
se (primeiro)
{
primeiro = falso;
}
outro
{
cadeia de dados.Acrescentar("&");
}
cadeia de dados.Acrescentar(Utilitário Http.Codificação de URL(objeto.Chave));
cadeia de dados.Acrescentar("=");
cadeia de dados.Acrescentar(objeto.Valor é corda[]
? Utilitário Http.Codificação de URL(JsonConvert.SerializarObjeto(objeto.Valor))
: Utilitário Http.Codificação de URL(objeto.Valor.Para String()));
}
}
retornar cadeia de dados.Para String();
}
}
}
Enviar mensagem única
tentar
{
// Envie uma mensagem usando o dispositivo principal.
SMS.API.Enviar mensagem única("+911234567890", "Este é um teste de mensagem única.");
// Envie uma mensagem usando o ID do dispositivo 1.
Dicionário<corda, objeto> mensagem = SMS.API.Enviar mensagem única("+911234567890", "Este é um teste de mensagem única.", "1");
// Envie uma mensagem usando o SIM no slot 1 do ID do dispositivo 1 (representado como "1|0").
// O slot do SIM é um índice, então 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 do SIM.
Dicionário<corda, objeto> mensagem = SMS.API.Enviar mensagem única("+911234567890", "Este é um teste de mensagem única.", "1|0");
// Enviar mensagem agendada usando o dispositivo principal.
longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar minutos(2).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
Dicionário<corda, objeto> mensagem = Enviar mensagem única(Número da caixa de texto.Texto, mensagem da caixa de texto.Texto, nulo, carimbo de data/hora);
Caixa de mensagem.Mostrar("Mensagem enviada com sucesso.");
}
pegar (Exceção exceção)
{
Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}
Enviar mensagens em massa
Lista<Dicionário<corda, corda>> mensagens = novo Lista<Dicionário<corda, corda>>();
para (int o = 1; o <= 12; o++)
{
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);
}
tentar
{
// 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.USAR_TODOS_OS_DISPOSITIVOS);
// 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.USAR_TODOS_OS_SIMS);
// Envie mensagens usando apenas os dispositivos especificados. As mensagens serão divididas entre os dispositivos ou SIMs que você especificar.
// Se você enviar 12 mensagens usando este código, 4 mensagens serão enviadas pelo ID do dispositivo 1 e outras 4 pelo SIM no slot 1 de
// 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.USO_ESPECIFICADO, novo [] {"1", "2|0", "2|1"});
// Envie mensagens conforme programado usando o dispositivo principal.
longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar minutos(2).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagens(mensagens, Opção.USO_ESPECIFICADO, nulo, carimbo de data/hora);
// Envia uma mensagem para contatos na lista de contatos com ID 1.
Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagem para lista de contatos(1, "Teste", SMS.API.Opção.USO_ESPECIFICADO, novo [] {"1"});
// Enviar uma mensagem conforme agendado para contatos na lista de contatos com ID 1.
Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagem para lista de contatos(1, "Teste #1", Opção.USO_ESPECIFICADO, nulo, carimbo de data/hora);
Caixa de mensagem.Mostrar("Sucesso");
}
pegar (Exceção exceção)
{
Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}
Obter créditos de mensagem restantes
tentar
{
corda créditos = SMS.API.Obter equilíbrio();
Caixa de mensagem.Mostrar($"Créditos da mensagem restantes: {créditos}");
}
pegar (Exceção exceção)
{
Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}
Receba mensagens e seu status atual
tentar
{
// Receba uma mensagem usando o ID.
Dicionário<corda, objeto> mensagem = SMS.API.ObterMensagemPorID(1);
// Receba mensagens usando o ID do grupo.
Dicionário<corda, objeto>[] mensagens = SMS.API.ObterMensagensPorIDDoGrupo(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
// Obtenha mensagens recebidas nas últimas 24 horas.
longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar horas(-24).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
Obter mensagens por status("Recebido", carimbo de data/hora);
}
pegar (Exceção exceção)
{
Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}
Gerenciar contatos
tentar {
// Adicione um novo contato à lista de contatos 1 ou inscreva novamente o contato se ele já existir.
Dicionário<corda, objeto> contato = SMS.API.Adicionar contato(1, "+911234567890", "Teste C#", verdadeiro);
// Cancelar a inscrição de um contato usando o número do celular.
Dicionário<corda, objeto> contato = Cancelar inscriçãoContato(1, "+911234567890");
}
pegar (Exceção exceção)
{
Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}