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