diff --git a/README.md b/README.md index 80292b2..73ff468 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,251 @@ PJBank SDK para PHP! :elephant: :elephant: :elephant: [![Build Status](https://travis-ci.org/pjbank/pjbank-php-sdk.svg?branch=master)](http://travis-ci.org/pjbank/pjbank-php-sdk) -![Construcao](https://openclipart.org/image/2400px/svg_to_png/231626/underconstruction.png) + +# SDK da API de Recebimento do PJBank + +* Exemplos em Docs + +## Instalação + + +```bash +$ composer require pjbank/pjbank-sdk-php +``` + +## Boleto bancário + +### Emitindo um boleto bancário + +```php +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "6ef5e5c493f22ef42d1c052e069af5df3060c090"; +$chave = "cfeb3e01f0d7d2217fc5f522f73c67ea56e5a669"; + + +$PJBankRecebimentos = new Recebimento($credencial, $chave); +$boleto = $PJBankRecebimentos->Boletos->NovoBoleto(); + + +$boleto->setNomeCliente("Matheus Fidelis") + ->setCpfCliente("29454730000144") + ->setValor(10.50) + ->setVencimento("09/01/2017") + ->setPedidoNumero(rand(0, 999)) + ->gerar(); + + +print_r($boleto->getNossoNumero() . PHP_EOL); +print_r($boleto->getLink() . PHP_EOL); +print_r($boleto->getPedidoNumero() . PHP_EOL); + +``` + + +### Impressão de boletos + +> Você pode especificar vários boletos identificados pelo `pedido_numero` para gerar uma impressão em lote. + + +```php + +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "6ef5e5c493f22ef42d1c052e069af5df3060c090"; +$chave = "cfeb3e01f0d7d2217fc5f522f73c67ea56e5a669"; + +$PJBankRecebimento = new Recebimento($credencial, $chave); + +$lote = $PJBankRecebimento->Boletos->Imprimir([ + "110", + "443" +]); + +print_r($lote); + +``` + + +## Cartão de Crédito + +### Gerando um pagamento de cartão de crédito com os dados do cartão + +```php + +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "1264e7bea04bb1c24b07ace759f64a1bd65c8560"; +$chave = "ef947cf5867488f744b82744dd3a8fc4852e529f"; + +$PJBankRecebimentos = new Recebimento($credencial, $chave); + +$transacao = $PJBankRecebimentos->Cartoes->NovaTransacao(); + +//Pagando com os dados do cartão +$transacao->setNumeroCartao("4012001037141112") + ->setNomeCartao("Cliente de Exemplo") + ->setMesVencimento("05") + ->setAnoVencimento("2018") + ->setCPF("24584548000194") + ->setEmail("api@pjbank.com.br") + ->setCVV("123") + ->setValor("1.00") + ->setParcelas(1) + ->setDescricao("Pagamento de exemplo") + ->gerar(); + +print_r($transacao->getValues()); + +``` + +### Gerando um pagamento de cartão de crédito com Token + +> Após o primeiro pagamento, um `token_cartao` será gerado. Use este token para pagar de forma segura nas próximas vezes conforme as recomendações do PCI + +```php + +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "1264e7bea04bb1c24b07ace759f64a1bd65c8560"; +$chave = "ef947cf5867488f744b82744dd3a8fc4852e529f"; + +$PJBankRecebimentos = new Recebimento($credencial, $chave); + +$transacao = $PJBankRecebimentos->Cartoes->NovaTransacao(); + +//Pagando com os token gerado pelo PJBank! +$transacao->setNumeroCartao("4012001037141112") + ->setValor(1.00) + ->setTokenCartao("d30e4fc83e153ffb113af7e7c736f4bb5004c552") + ->setDescricao("Pagamento de exemplo com Token") + ->gerar(); + +print_r($transacao->getValues()); + +``` + +### Cancelando uma transação de cartão + +> Todo pagamento via cartão retorna um parâmetro chamado `tid`. Esse parâmetro equivale ao identificador da transação entre o PJBank e as adquirentes. + +```php + +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "1264e7bea04bb1c24b07ace759f64a1bd65c8560"; +$chave = "ef947cf5867488f744b82744dd3a8fc4852e529f"; + +$PJBankRecebimentos = new Recebimento($credencial, $chave); + +//Gerando uma transação de exemplo +$transacao = $PJBankRecebimentos->Cartoes->NovaTransacao(); + +$transacao->setNumeroCartao("4012001037141112") + ->setValor(1.00) + ->setTokenCartao("d30e4fc83e153ffb113af7e7c736f4bb5004c552") + ->setDescricao("Pagamento de exemplo com Token") + ->gerar(); + + +//Cancelamento a transação criada +$cancelamento = $PJBankRecebimentos->Cartoes->CancelarTransacao($transacao->getTid()); + +print_r($cancelamento); + +``` + +### Tokenizando um cartão + +> No primeiro pagamento com os dados do Cartão, o parâmetro `token_cartao` será retornado. Mas há casos onde o usuário não vai efetuar a compra no momento da captura dos dados, e por segurança não é recomendado armazenar os mesmos. Para resolver esse problema, você pode enviar os dados recém capturados para a API e trocar os mesmos por um token do cartão. + +```php + +use PJBank\Recebimento; + +$credencial = "1264e7bea04bb1c24b07ace759f64a1bd65c8560"; +$chave = "ef947cf5867488f744b82744dd3a8fc4852e529f"; + +$PJBankRecebimentos = new Recebimento($credencial, $chave); + +/** + * Array de exemplo com os dados do cartão + */ +$dadosCartao = array( + "nome_cartao" => "Cliente Exemplo", + "numero_cartao" => "4012001037141112", + "mes_vencimento" => 05, + "ano_vencimento" => 2018, + "cpf_cartao" => "64111456529", + "email_cartao" => "api@pjbank.com.br", + "celular_cartao" => "978456723", + "codigo_cvv" => 123 +); + +$token = $PJBankRecebimentos->Cartoes->Tokenizar($dadosCartao); + +print_r($token); + +``` + +## Extrato + +### Extrato simples + +> Gerando um extrato da conta sem filtros. + +```php +require_once "./vendor/autoload.php"; + +use PJBank\Recebimento; + +$credencial = "1264e7bea04bb1c24b07ace759f64a1bd65c8560"; +$chave = "ef947cf5867488f744b82744dd3a8fc4852e529f"; + +$PJBankRecebimentos = new Recebimento($credencial, $chave); + +echo("Gerando o extrato bancário da conta sem filtros" . PHP_EOL); + +$extrato = $PJBankRecebimentos->Extratos->NovoExtrato(); +$extrato->gerar(); + +print_r($extrato->getItens()); +``` + +### Extrato - Listando somente as cobranças liquidadas + +> Gerando um extrato somente com os itens que foram pagos + +```php + +$extrato = $PJBankRecebimentos->Extratos->NovoExtrato(); +$extrato->apenasPagos() + ->gerar(); + +print_r($extrato->getItens()); +``` + +### Extrato - Filtro por data + +> Você pode inserir um filtro por um intervalo de datas no extrato. As datas devem ser informadas no formato MM/DD/AAAA + +```php + +$extrato = $PJBankRecebimentos->Extratos->NovoExtrato(); +$extrato + ->setDataInicio("06/01/2017") + ->setDataFim("06/30/2017") + ->gerar(); + +print_r($extrato->getItens()); +``` \ No newline at end of file diff --git a/composer.json b/composer.json index 86cf3f0..7fc610a 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,9 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "guzzlehttp/guzzle": "^6.2@dev", + "guzzlehttp/guzzle": "^6.2@dev" + }, + "require-dev": { "phpunit/phpunit": "^6.4@dev" }, "scripts" : { diff --git a/src/Api/Api.php b/src/Api/Api.php index ed9c550..83c5831 100644 --- a/src/Api/Api.php +++ b/src/Api/Api.php @@ -16,6 +16,12 @@ class Api */ protected $apiBaseUrl = "https://api.pjbank.com.br/"; + /** + * URL base da API Sandbox + * @var string + */ + protected $apiBaseUrlSandbox = "https://sandbox.pjbank.com.br"; + /** * Versão da API a ser consumida pelo SDK * @var string diff --git a/src/Api/PJBankClient.php b/src/Api/PJBankClient.php index c783119..96bdb71 100644 --- a/src/Api/PJBankClient.php +++ b/src/Api/PJBankClient.php @@ -19,11 +19,12 @@ class PJBankClient extends Api * @param [type] $chave * @return void */ - public function __construct() + public function __construct($sandbox=false) { + $base_uri = ($sandbox) ? $this->apiBaseUrlSandbox : $this->apiBaseUrl; $this->client = new Client([ - 'base_uri' => $this->apiBaseUrl, + 'base_uri' => $base_uri, ]); } @@ -36,6 +37,4 @@ public function getClient() { return $this->client; } - - } \ No newline at end of file diff --git a/src/Boleto/Boleto.php b/src/Boleto/Boleto.php index 7d2b904..2d43104 100644 --- a/src/Boleto/Boleto.php +++ b/src/Boleto/Boleto.php @@ -95,6 +95,11 @@ class Boleto * @var */ private $link; + /** + * Link do Grupo + * @var + */ + private $link_grupo; /** * Nosso numero de boleto * @var @@ -115,6 +120,12 @@ class Boleto private $id_unico; + /** + * Usar Sandbox + * @var bool + */ + private $sandbox; + /** * @var */ @@ -125,10 +136,11 @@ class Boleto * @param $credencial * @param $chave */ - public function __construct($credencial, $chave) + public function __construct($credencial, $chave, $sandbox) { $this->credencial_boleto = $credencial; $this->chave_boleto = $chave; + $this->sandbox = $sandbox; } /** @@ -139,6 +151,14 @@ public function getLink() return $this->link; } + /** + * @return mixed + */ + public function getLinkGrupo() + { + return $this->link_grupo; + } + /** * @return mixed */ @@ -509,6 +529,13 @@ public function setGrupo($grupo) return $this; } + /** + * @return bool + */ + public function getSandbox() + { + return $this->sandbox; + } /** * Pega os campos utilizados para a emissão do boleto bancário. @@ -541,6 +568,7 @@ public function gerar() { $this->id_unico = $boletoGerado->id_unico; $this->linha_digitavel = $boletoGerado->linhaDigitavel; $this->link = $boletoGerado->linkBoleto; + $this->link_grupo = $boletoGerado->linkGrupo; } diff --git a/src/Boleto/BoletosManager.php b/src/Boleto/BoletosManager.php index e7eb0a2..f8056a2 100644 --- a/src/Boleto/BoletosManager.php +++ b/src/Boleto/BoletosManager.php @@ -23,15 +23,22 @@ class BoletosManager */ private $chave_boletos; + /** + * Usar Sandbox + * @var bool + */ + private $sandbox; + /** * BoletosManager constructor. * @param $credencial * @param $boletos */ - public function __construct($credencial, $chave) + public function __construct($credencial, $chave, $sandbox) { $this->credencial_boletos = $credencial; $this->chave_boletos = $chave; + $this->sandbox = $sandbox; } /** @@ -39,7 +46,7 @@ public function __construct($credencial, $chave) * @return \PJBank\Boleto\Boleto */ public function NovoBoleto() { - return new Boleto($this->credencial_boletos, $this->chave_boletos); + return new Boleto($this->credencial_boletos, $this->chave_boletos, $this->sandbox); } /** diff --git a/src/Boleto/Emissor.php b/src/Boleto/Emissor.php index ed58931..30ffaad 100644 --- a/src/Boleto/Emissor.php +++ b/src/Boleto/Emissor.php @@ -35,8 +35,8 @@ public function __construct(Boleto $boleto) public function emitir() { - $PJBankClient = new PJBankClient(); - $client = $PJBankClient->getClient(); + $PJBankClient = new PJBankClient($this->boleto->getSandbox()); + $client = $PJBankClient->getClient(); $boletoItens = $this->boleto->getValues(); try { @@ -57,7 +57,5 @@ public function emitir() } - - } } diff --git a/src/Extrato/Extrato.php b/src/Extrato/Extrato.php index 8485cee..441a687 100644 --- a/src/Extrato/Extrato.php +++ b/src/Extrato/Extrato.php @@ -53,6 +53,12 @@ class Extrato */ private $itens; + /** + * Usar Sandbox + * @var bool + */ + private $sandbox; + /** * @return mixed */ @@ -89,6 +95,14 @@ public function setChave($chave) return $this; } + /** + * @return bool + */ + public function getSandbox() + { + return $this->sandbox; + } + /** * @return mixed */ @@ -137,7 +151,7 @@ public function getPago() * @param mixed $pago * @return Extrato */ - public function apenasPagos($pago = true) + public function apenasPagos($pago = 1) { $this->pago = $pago; return $this; @@ -158,10 +172,11 @@ public function setPagina($pagina = 1) * @param $credencial * @param $chave */ - public function __construct($credencial, $chave) + public function __construct($credencial, $chave, $sandbox) { $this->credencial = $credencial; $this->chave = $chave; + $this->sandbox = $sandbox; } /** @@ -194,13 +209,12 @@ public function getValues() /** * Gera o extrato propriamente dito */ - public function gerar() { - + public function gerar() + { $impressorinha = new Impressorinha($this); $extrato = $impressorinha->gerar(); - $this->itens = $extrato->extrato; - + $this->itens = $extrato; } } \ No newline at end of file diff --git a/src/Extrato/ExtratoManager.php b/src/Extrato/ExtratoManager.php index 6f89f4a..dbb9cc6 100644 --- a/src/Extrato/ExtratoManager.php +++ b/src/Extrato/ExtratoManager.php @@ -22,15 +22,22 @@ class ExtratoManager */ private $chave_conta; + /** + * Usar Sandbox + * @var bool + */ + private $sandbox; + /** * ExtratoManager constructor. * @param $credencial * @param $chave */ - public function __construct($credencial, $chave) + public function __construct($credencial, $chave, $sandbox) { $this->credencial_conta = $credencial; $this->chave_conta = $chave; + $this->sandbox = $sandbox; } /** @@ -38,7 +45,7 @@ public function __construct($credencial, $chave) * @return Extrato */ public function NovoExtrato() { - return new Extrato($this->credencial_conta, $this->chave_conta); + return new Extrato($this->credencial_conta, $this->chave_conta, $this->sandbox); } } \ No newline at end of file diff --git a/src/Extrato/Impressorinha.php b/src/Extrato/Impressorinha.php index 63d0a57..f2c49f2 100644 --- a/src/Extrato/Impressorinha.php +++ b/src/Extrato/Impressorinha.php @@ -35,16 +35,16 @@ public function __construct(Extrato $extrato) public function gerar() { - $PJBankClient = new PJBankClient(); + $PJBankClient = new PJBankClient($this->extrato->getSandbox()); $client = $PJBankClient->getClient(); $extratoQuery = $this->extrato->getValues(); unset($extratoQuery['credencial']); unset($extratoQuery['chave']); + unset($extratoQuery['sandbox']); try { - $resource = "recebimentos/{$this->extrato->getCredencial()}/transacoes"; $res = $client->request('GET', $resource, ['query' => $extratoQuery, 'headers' => [ @@ -55,7 +55,8 @@ public function gerar() return json_decode((string) $res->getBody()); } catch (ClientException $e) { - + $responseBody = json_decode($e->getResponse()->getBody()); + throw new \Exception($responseBody->msg, $responseBody->status); } } diff --git a/src/Recebimento.php b/src/Recebimento.php index 66a047d..f26eff2 100644 --- a/src/Recebimento.php +++ b/src/Recebimento.php @@ -26,6 +26,12 @@ class Recebimento */ private $chave; + /*** + * Utilzar sandbox + * @var bool + */ + private $sandbox; + /** * Boleto Manager SDK * @var Boleto @@ -56,10 +62,11 @@ class Recebimento * @param string $credencial * @param string $chave */ - public function __construct($credencial = null, $chave = null) + public function __construct($credencial = null, $chave = null, $sandbox = false) { $this->credencial = $credencial; $this->chave = $chave; + $this->sandbox = (bool)$sandbox; $this->constructorCartao(); $this->constructorBoletos(); @@ -77,16 +84,14 @@ private function constructorCartao() { * Constructor Boletos */ private function constructorBoletos() { - $this->Boletos = new BoletosManager($this->credencial, $this->chave); + $this->Boletos = new BoletosManager($this->credencial, $this->chave, $this->sandbox); } /** * Constructor Extrato */ private function constructorExtrato() { - $this->Extratos = new ExtratoManager($this->credencial, $this->chave); + $this->Extratos = new ExtratoManager($this->credencial, $this->chave, $this->sandbox); } - - } \ No newline at end of file