guilherme guia
1 year ago
1 changed files with 176 additions and 0 deletions
@ -0,0 +1,176 @@
|
||||
|
||||
# Integração Simples IP |
||||
|
||||
Este projeto foi desenvolvida afim de padronizar e melhorar a forma de integrar sistemas de provedores de internet com a central Simples IP. |
||||
|
||||
## 💻 Requisitos |
||||
Para rodar os scripts é necessário uma versão em execução da central Simples IP. |
||||
|
||||
## Projeto |
||||
|
||||
O desenvolvimento da aplicação seguiu alguns princípios de arquitetura estabelicidos pelos desenvolvedores. |
||||
|
||||
## Estrutura do projeto |
||||
O projeto foi estruturado em algumas pastas e cada uma contém sua responsabilidade específica. |
||||
|
||||
![Estrutura do projeto](https://i.imgur.com/BSExpWz.png) |
||||
|
||||
### CONFIG |
||||
Começando pela pasta config, ela irá conter arquivos de configurações geral do projeto como constantes de valores, caminhos de arquivos entre outros. |
||||
|
||||
Também, é encontrado o arquivo de instanciação das classes de providers. |
||||
|
||||
![Pasta config](https://i.imgur.com/5znMxjo.png) |
||||
|
||||
### CORE |
||||
Na pasta core, é encontrado as partes principais para o funcionamento da aplicação. |
||||
|
||||
![Pasta core](https://i.imgur.com/0fM5Cpr.png) |
||||
|
||||
### Classe de integração com banco (IntegracaoDatabase.php) |
||||
|
||||
A Classe IntegracaoDatabase é responsável por: |
||||
|
||||
* Comunicação com o banco de dados Postgresql. |
||||
|
||||
|
||||
### Classe de integração (Integracao.php) |
||||
|
||||
A Classe Integracao é responsável por: |
||||
|
||||
* Realizar chamadas a outras classes como o banco de dados, AGI (Asterisk Gateway Interface) e CURL. |
||||
|
||||
* Fornece uma interface padronizada para a chamadas das classes auxiliares. |
||||
|
||||
* Fornecer métodos e funcionalidades comuns que podem ser estendidos por outras classes. |
||||
|
||||
|
||||
### Classe de Provedores (Provedores.php) |
||||
|
||||
A classe de Provedores é um componente fundamental do projeto que atua como um intermediador entre os scripts e os providers da aplicação. Ela é uma subclasse da classe "Integração", herdando funcionalidades importantes para o processo de integração. |
||||
|
||||
* Coordenar a comunicação entre os scripts e os providers da aplicação. |
||||
|
||||
* Gerenciar a execução dos scripts e a integração com os diferentes providers. |
||||
|
||||
* Fornecer uma interface padronizada para os scripts se comunicarem com os providers. |
||||
|
||||
* Manipular e transformar os dados entre os scripts e os providers, se necessário. |
||||
|
||||
|
||||
## HELPERS |
||||
|
||||
Na pasta helpers, é encontrado os arquivos auxiliares genéricos que podem ser usados no projeto. |
||||
|
||||
![Pasta helpers](https://i.imgur.com/r2O89Zk.png) |
||||
|
||||
### Classe Helper (Helpers.php) |
||||
|
||||
A classe Helpers é responsável por armazenar métodos genéricos de formatação de data, validação de algum dado ou transformação de dados, que podem facilitar o desenvolvimento. |
||||
|
||||
|
||||
## INTERFACES |
||||
|
||||
Na pasta de Interfaces, é encontrado os arquivos que definem interfaces do sistema. |
||||
|
||||
![Pasta interfaces](https://i.imgur.com/BbPast7.png) |
||||
|
||||
### Interfacede provedores (IProvedores.php) |
||||
|
||||
A interface de provedores é responsável por definir de forma obrigatória o que todas as classes providers devem possuir. |
||||
|
||||
## PROVIDERS |
||||
|
||||
Na pasta de providers, é encontrado os arquivos de implementação da lógica de cada provedor de internet, no qual cada um é representado por um arquivo. |
||||
|
||||
![Pasta providers](https://i.imgur.com/vVSqybg.png) |
||||
|
||||
|
||||
### Implementação Específica |
||||
|
||||
Cada provedor tem liberdade para implementar suas funcionalidades de forma independente. Eles podem ter diferenças na forma como se comunicam com a aplicação e como lidam com as solicitações de integração. No entanto, todos os provedores devem seguir a interface padrão estabelecida pela inteface IProvedor para garantir a integração correta com o restante do sistema. |
||||
|
||||
|
||||
### Substituição Fácil |
||||
|
||||
A estrutura modular da pasta "Provedores" permite que novos provedores sejam adicionados ou provedores existentes sejam substituídos facilmente. Ao seguir a interface padrão, os provedores podem ser trocados sem afetar o restante do código, proporcionando maior flexibilidade e extensibilidade à aplicação. |
||||
|
||||
### Interface com a Classe CASE |
||||
|
||||
A Classe CASE é responsável por intermediar a chamada de scripts com o restante da aplicação. Assim, Cada provedor é chamado pela Classe CASE usando os métodos apropriados para executar suas funcionalidades específicas. |
||||
|
||||
## SCRIPTS |
||||
|
||||
A pasta scripts contém os scripts procedurais genéricos que atuam como intermediários entre a aplicação e os provedores de internet. Esses scripts recebem ordens e tomam decisões com base nos valores recebidos, redirecionando o usuário para ações específicas. |
||||
|
||||
Cada script representa uma ação que irá acontecer. |
||||
|
||||
![Pasta scripts](https://i.imgur.com/LY2oajC.png) |
||||
|
||||
### Descrição |
||||
* Receber comandos ou ordens de outras partes do sistema. |
||||
* Redirecionar o usuário para ações específicas com base nos valores retornados. |
||||
* Fazer uso da Classe CASE para coordenar a comunicação com os provedores de internet. |
||||
|
||||
### Exemplo de funcionamento |
||||
|
||||
Primeiramente todos os scripts devem contem em seu topo a chamada do arquivo de configuração, e também do arquivo CASE. |
||||
|
||||
```php |
||||
require_once __DIR__.'/../config/config.php'; |
||||
require_once CONF_RAIZ_PROJETO . '/core/Provedores.php'; |
||||
|
||||
``` |
||||
Logo depois, devemos instanciar o provedor Case e também armazenar qual provedor estamos utilizando na integração. |
||||
|
||||
Todo o processo de verificação e validação de qual provedor deverá ser utilizado é totalmente dinâmico e acontece dentro do CASE. |
||||
|
||||
```php |
||||
$provedorCase = new ProvedorCase($uid); |
||||
$provedor = $provedorCase->getProvedor(); |
||||
|
||||
``` |
||||
|
||||
Com isso, coletamos algumas variáveis que iremos utilizar no script. Nesse caso, necessitamos saber quais foram os números que o usuário digitou e a quantidade de tentativas. |
||||
|
||||
|
||||
```php |
||||
$documento = $provedorCase->agi()->get_variable('URA', true); |
||||
$reg_pass = $provedorCase->agi()->get_variable("REG_PASS", true); |
||||
|
||||
``` |
||||
|
||||
Então, temos a chamada da função de consultar documento que recebe um array associativo de params, que nesse script foi o CPF e a quantidade de tentativas |
||||
|
||||
```php |
||||
$result = $provedor->consultarDocumento(["documento" => $documento, "reg_pass" => $reg_pass]); |
||||
|
||||
``` |
||||
|
||||
Nessa parte, temos a coleta da versão da integração que está sendo utilizada. |
||||
|
||||
```php |
||||
$data_sistema = $provedorCase->data()->getData(); |
||||
$versao_integracao = $data["int_versao"]; |
||||
|
||||
``` |
||||
|
||||
Por fim, temos o encerramento do script onde ele faz o direcionamento do usuário depedendo do valor que foi retornado. |
||||
|
||||
```php |
||||
if($result && $result !== "reg_pass"){ |
||||
$redirecionamento_dados = $provedorCase->db()->redirectUraDestino("REDIR_CONSULTA_CLIENTE", "SUCESSO", $versao_integracao); |
||||
}else if($result == "reg_pass"){ |
||||
$redirecionamento_dados = $provedorCase->db()->redirectUraDestino("REDIR_CONSULTA_CLIENTE", "ALTERNATIVO", $versao_integracao); |
||||
} else{ |
||||
$redirecionamento_dados = $provedorCase->db()->redirectUraDestino("REDIR_CONSULTA_CLIENTE", "FALHA", $versao_integracao); |
||||
} |
||||
|
||||
$provedorCase->executarFluxo($redirecionamento_dados["TIPO"], $redirecionamento_dados["NOME"]); |
||||
|
||||
``` |
||||
## Tecnologias |
||||
* **PHP** |
||||
* **AGI** |
||||
* **PHP Mailer** |
||||
* **Postgresql** |
Loading…
Reference in new issue