forked from SimplesIP/pabx-app
Browse Source
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
7 changed files with 348 additions and 1 deletions
@ -1,3 +1,6 @@
|
||||
{ |
||||
"files.encoding": "iso88591" |
||||
"files.encoding": "iso88591", |
||||
"editor.tabSize": 4, |
||||
"editor.insertSpaces": true, |
||||
"editor.detectIndentation": false |
||||
} |
@ -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); |
||||
} |
||||
} |
@ -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'); |
@ -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; |
||||
} |
||||
} |
||||
} |
@ -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: ../../"); |
||||
} */ |
@ -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); |
||||
} |
||||
} |
@ -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…
Reference in new issue