Browse Source

Initial Commit: Criei estrutura inicial do projeto;

Criei e testei mecanismo de geracao de token na classe consumidora da API do salesforce SalesforceConsumer.php;
Setei as configuracoes do workspace do vsCode para que o tamanho padrao da identacao seja sempre 4.
1.8.1-crm-simplesip
Claudio 9 months ago
parent
commit
74c960b75d
  1. 5
      .vscode/settings.json
  2. 13
      crm/Utils.php
  3. 21
      crm/config.php
  4. 229
      crm/consumer/SalesforceConsumer.php
  5. 59
      crm/controller/ContractController.php
  6. 11
      crm/service/ContractService.php
  7. 11
      crm/tests/testSalesforceConsumer.php

5
.vscode/settings.json vendored

@ -1,3 +1,6 @@
{
"files.encoding": "iso88591"
"files.encoding": "iso88591",
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.detectIndentation": false
}

13
crm/Utils.php

@ -0,0 +1,13 @@
<?php
//utility static methods
require_once __DIR__ . '/config.php';
class Utils
{
public static function printToLog(string $text, $line = '')
{
file_put_contents(CONF_LOG_PATH, "\n\n\n" . "******** LOG " . date("d/m/Y - H:i:s ") . $line . " ******** \n", FILE_APPEND);
file_put_contents(CONF_LOG_PATH, $text . "\n", FILE_APPEND);
}
}

21
crm/config.php

@ -0,0 +1,21 @@
<?php
###########################################################################
##### #####
##### CONFIGURATION CONSTANTS FILE #####
##### ----------------------------------------- #####
##### #####
###########################################################################
//access credentials
define('CONF_TOKEN_API', '');
define('CONF_ENDPOINT', 'https://simplesip.my.salesforce.com/');
define('CONF_ACCESS_TOKEN_URL', 'https://login.salesforce.com/');
define('CONF_API_CLIENT_ID', '3MVG9gtDqcOkH4PIPJPexLrXsxR3ArVufMBthhGYVGnD0Swzn2Yiy22ph74Wd4YxQSulzTOYsVJL61GmJ9YyH');
define('CONF_API_CLIENT_SECRET', 'CA632F48BF6586C9B391421430E547EBE2357651188E7A1D0716ED3B793D0A9D');
define('CONF_API_USERNAME', 'rafael.sousa@simplesip.onmicrosoft.com');
define('CONF_API_PASSWORD', 'SimpleS_root201628S3nhga76CzSO3Aa0od2R0BU');
define('CONF_API_VERSION', 'v59.0');
define('CONF_API_GRANT_TYPE', 'password');
//log
define('CONF_LOG_PATH', '/var/log/scripts/crmInterno.log');

229
crm/consumer/SalesforceConsumer.php

@ -0,0 +1,229 @@
<?php
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../Utils.php';
class SalesforceConsumer
{
private $responseCode;
private $curl;
private $query;
private string $method;
private string $request;
private string $contentType;
public function __construct(
private string $token = CONF_TOKEN_API,
private string $url = CONF_ENDPOINT,
private string $apiVersion = CONF_API_VERSION,
private string $logPath = CONF_LOG_PATH,
private string $clientId = CONF_API_CLIENT_ID,
private string $clientSecret = CONF_API_CLIENT_SECRET,
private string $password = CONF_API_PASSWORD,
private string $username = CONF_API_USERNAME,
private string $grantType = CONF_API_GRANT_TYPE,
private array $params = array()
) {
Utils::printToLog("Classe consumidora do salesforce instanciada.", __LINE__);
if ($this->generateToken()) Utils::printToLog("Token do Salesforce gerado com sucesso.", __LINE__);
else Utils::printToLog("ERRO! Falha ao gerar Token do Salesforce.", __LINE__);
}
/*
* Gera o token de autenticacao que ira ser colocado no cabecalho das requisicoes, e armazena na variavel $this->token
*/
private function generateToken()
{
$this->url = CONF_ACCESS_TOKEN_URL;
$this->setMethod('services/oauth2/token');
$this->setRequest('POST');
$this->contentType = 'application/x-www-form-urlencoded';
$this->params = array(
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret,
'redirect_uri' => CONF_ENDPOINT,
'password' => $this->password,
'username' => $this->username,
'grant_type' => $this->grantType
);
Utils::printToLog('Corpo da requisicao de gerar token: ' . print_r($this->params, true), __LINE__);
$data = $this->setParams();
if (substr($this->responseCode, 0, 1) == '2') {
$this->setToken($data['access_token']);
return true;
}
return false;
}
/*
Recupera do Salesforce o objeto do contrato cujo id foi passado no argumento do metodo
*/
public function getContract(string $id)
{
}
/**
* Parametriza o method utilizado para a consulta.
*
* @param type $method
*/
private function setMethod($method)
{
$this->method = $method;
}
/**
* Escreve a query para ser passada ao curl
*
* @param string $query
*/
private function setQuery($query)
{
return $this->query .= $query;
}
/**
* retorna a string pronta da query do curl e limpa a variavel.
*
* @return string $query
*/
private function getQuery()
{
$query = $this->query;
unset($this->query);
return $query;
}
/**
* Constroi de forma dinamica a string para realizar a execucao do Curl
*
* @void
*/
private function curl()
{
$this->curl = curl_init();
curl_setopt_array($this->curl, array(
CURLOPT_URL => $this->url . $this->method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_CUSTOMREQUEST => $this->request,
CURLOPT_HTTPHEADER => array(
'Authorization:' . $this->token,
'Content-Type:' . $this->contentType ? $this->contentType : 'application/json'
)
));
if ($this->setRequest() == "POST") {
Utils::printToLog('body: ' . $this->query, __LINE__);
curl_setopt_array(
$this->curl,
array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $this->getQuery()
)
);
}
unset($this->contentType);
$this->url = CONF_ENDPOINT;
}
/**
* Informa o tipo de requisicao que sera feita pela cURL
* @param bool $request
*/
private function setRequest($request = null)
{
if (!$this->request || $request) {
$this->request = (strtoupper($request) == 'POST' ? strtoupper($request) : "GET");
}
return $this->request;
}
/**
* Retorna o token a ser utilizado
* @param string $this->token
*/
/* private function getToken()
{
return $this->token;
}
*/
/**
* Define o token a ser utilizado
* @param string $this->token
*/
private function setToken($token)
{
$this->token = 'Bearer ' . $token;
}
/**
* Recebe array em forma de indice e valor
*
* @example array("qtype" => 'test_api', "query" => '123', "oper" => '=')
*
* @param type $token
* @debug_track function debug_backtrace()
*/
private function setParams()
{
//decides if body will have url encoded content or json
if (!$this->contentType) {
$this->query = $this->params;
} else {
$this->query = http_build_query($this->params);
}
unset($this->params);
$data = $this->exec();
return $this->response($data);
}
/**
* Recebe as informacoes e realiza a execucao da API
*
* @void
*/
private function exec()
{
$this->curl();
$response = curl_exec($this->curl);
Utils::printToLog("resposta da requisicao: " . print_r(curl_getinfo($this->curl), true), __LINE__);
$this->responseCode = curl_getinfo($this->curl)['http_code'];
if (curl_errno($this->curl)) {
curl_close($this->curl);
return false;
}
curl_close($this->curl);
return $response;
}
/**
* Prepara dos dados para serem transmitidos para o method a serem retornados a
* integracao.
*
* @return array
*/
private function response($data)
{
Utils::printToLog("Response code: " . $this->responseCode . "\nReponse API: " . print_r(json_decode($data, true), true), __LINE__);
if ($data) {
return json_decode($data, true);
} else {
return false;
}
}
}

59
crm/controller/ContractController.php

@ -0,0 +1,59 @@
<?php
require_once __DIR__ . '/../Service/ContractService.php';
require_once __DIR__ . '../../config.php';
require_once __DIR__ . '../../Utils.php';
//header("Content-Type:application/json");
if (isset($_GET['id_contrato']) && $_GET['id_contrato'] != "") {
$contractId = $_GET['id_contrato'];
$response = ContractService::saveSalesforceContract($contractId);
//log
Utils::printToLog("Requisicao GET recebida do salesforce com id do contrato.\nid do contrato: " . $contractId);
echo 'foiii';
}
/* //instancia as classes
$usuario = new Usuario();
$usuariodao = new UsuarioDAO();
//pega todos os dados passado por POST
$d = filter_input_array(INPUT_POST);
//se a operação for gravar entra nessa condição
if (isset($_POST['cadastrar'])) {
$usuario->setNome($d['nome']);
$usuario->setSobrenome($d['sobrenome']);
$usuario->setIdade($d['idade']);
$usuario->setSexo($d['sexo']);
$usuariodao->create($usuario);
header("Location: ../../");
}
// se a requisição for editar
else if (isset($_POST['editar'])) {
$usuario->setNome($d['nome']);
$usuario->setSobrenome($d['sobrenome']);
$usuario->setIdade($d['idade']);
$usuario->setSexo($d['sexo']);
$usuario->setId($d['id']);
$usuariodao->update($usuario);
header("Location: ../../");
}
// se a requisição for deletar
else if (isset($_GET['del'])) {
$usuario->setId($_GET['del']);
$usuariodao->delete($usuario);
header("Location: ../../");
} else {
header("Location: ../../");
} */

11
crm/service/ContractService.php

@ -0,0 +1,11 @@
<?php
require_once __DIR__ . "/../Consumer/SalesforceConsumer.php";
class ContractService
{
public static function saveSalesforceContract(string $id)
{
$salesforceConsumer = new SalesforceConsumer();
$sContract = $salesforceConsumer->getContract($id);
}
}

11
crm/tests/testSalesforceConsumer.php

@ -0,0 +1,11 @@
<?php
ini_set('display_errors', 1);
ini_set("memory_limit", "512M");
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../consumer/SalesforceConsumer.php';
Utils::printToLog('Iniciando Teste do SalesforceConsumer.', __LINE__);
$salesforceConsumer = new SalesforceConsumer();
Utils::printToLog('Finalizando Teste do SalesforceConsumer.', __LINE__);
Loading…
Cancel
Save