Commit 39e876c3 authored by Marcelo's avatar Marcelo
Browse files

Initial commit

parents
Showing with 2425 additions and 0 deletions
+2425 -0
composer.lock
vendor
.idea
LICENSE 0 → 100644
The MIT License (MIT)
Copyright (c) 2016 - Cielo
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
README.md 0 → 100644
# API-3.0-PHP
SDK API-3.0 PHP
## Principais recursos
* [x] Pagamentos por cartão de crédito.
* [x] Pagamentos recorrentes.
* [x] Com autorização na primeira recorrência.
* [x] Com autorização a partir da primeira recorrência.
* [x] Pagamentos por cartão de débito.
* [x] Pagamentos por boleto.
* [x] Pagamentos por transferência eletrônica.
* [x] Cancelamento de autorização.
* [x] Consulta de pagamentos.
* [x] Tokenização de cartão.
## Limitações
Por envolver a interface de usuário da aplicação, o SDK funciona apenas como um framework para criação das transações. Nos casos onde a autorização é direta, não há limitação; mas nos casos onde é necessário a autenticação ou qualquer tipo de redirecionamento do usuário, o desenvolvedor deverá utilizar o SDK para gerar o pagamento e, com o link retornado pela Cielo, providenciar o redirecionamento do usuário.
## Dependências
* PHP >= 5.6
## Instalando o SDK
Se já possui um arquivo `composer.json`, basta adicionar a seguinte dependência ao seu projeto:
```json
"require": {
"developercielo/api-3.0-php": "^1.0"
}
```
Com a dependência adicionada ao `composer.json`, basta executar:
```
composer install
```
Alternativamente, você pode executar diretamente em seu terminal:
```
composer require "developercielo/api-3.0-php"
```
## Produtos e Bandeiras suportadas e suas constantes
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Ecommerce\CreditCard;
```
| Bandeira | Constante | Crédito à vista | Crédito parcelado Loja | Débito | Voucher |
|------------------|------------------------|-----------------|------------------------|--------|---------|
| Visa | CreditCard::VISA | Sim | Sim | Sim | *Não* |
| Master Card | CreditCard::MASTERCARD | Sim | Sim | Sim | *Não* |
| American Express | CreditCard::AMEX | Sim | Sim | *Não* | *Não* |
| Elo | CreditCard::ELO | Sim | Sim | *Não* | *Não* |
| Diners Club | CreditCard::DINERS | Sim | Sim | *Não* | *Não* |
| Discover | CreditCard::DISCOVER | Sim | *Não* | *Não* | *Não* |
| JCB | CreditCard::JCB | Sim | Sim | *Não* | *Não* |
| Aura | CreditCard::AURA | Sim | Sim | *Não* | *Não* |
## Utilizando o SDK
Para criar um pagamento simples com cartão de crédito com o SDK, basta fazer:
### Criando um pagamento com cartão de crédito
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MERCHANT ID', 'MERCHANT KEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);
// Crie uma instância de Credit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard("123", CreditCard::VISA)
->setExpirationDate("12/2018")
->setCardNumber("0000000000000001")
->setHolder("Fulano de Tal");
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
// Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
// dados retornados pela Cielo
$paymentId = $sale->getPayment()->getPaymentId();
// Com o ID do pagamento, podemos fazer sua captura, se ela não tiver sido capturada ainda
$sale = (new CieloEcommerce($merchant, $environment))->captureSale($paymentId, 15700, 0);
// E também podemos fazer seu cancelamento, se for o caso
$sale = (new CieloEcommerce($merchant, $environment))->cancelSale($paymentId, 15700);
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
### Criando um pagamento e gerando o token do cartão de crédito
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MERCHANT ID', 'MERCHANT KEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);
// Crie uma instância de Credit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração.
// Utilize setSaveCard(true) para obter o token do cartão
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard("123", CreditCard::VISA)
->setExpirationDate("12/2018")
->setCardNumber("0000000000000001")
->setHolder("Fulano de Tal")
->setSaveCard(true);
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
// O token gerado pode ser armazenado em banco de dados para vendar futuras
$token = $sale->getPayment()->getCreditCard()->getCardToken();
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
### Criando um pagamento com cartão de crédito tokenizado
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MERCHANT ID', 'MERCHANT KEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);
// Crie uma instância de Credit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard("123", CreditCard::VISA)
->setCardToken("TOKEN-PREVIAMENTE-ARMAZENADO");
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
// Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
// dados retornados pela Cielo
$paymentId = $sale->getPayment()->getPaymentId();
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
### Criando um pagamento recorrente
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MID', 'MKEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);
// Crie uma instância de Credit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração
$payment->setType(Payment::PAYMENTTYPE_CREDITCARD)
->creditCard("123", CreditCard::VISA)
->setExpirationDate("12/2018")
->setCardNumber("0000000000000001")
->setHolder("Fulano de Tal");
// Configure o pagamento recorrente
$payment->recurrentPayment(true)->setInterval(RecurrentPayment::INTERVAL_MONTHLY);
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
$recurrentPaymentId = $sale->getPayment()->getRecurrentPayment()->getRecurrentPaymentId();
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
### Criando transações com cartão de débito
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MERCHANT ID', 'MERCHANT KEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700);
// Defina a URL de retorno para que o cliente possa voltar para a loja
// após a autenticação do cartão
$payment->setReturnUrl('https://localhost/test');
// Crie uma instância de Debit Card utilizando os dados de teste
// esses dados estão disponíveis no manual de integração
$payment->debitCard("123", CreditCard::VISA)
->setExpirationDate("12/2018")
->setCardNumber("0000000000000001")
->setHolder("Fulano de Tal");
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
// Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
// dados retornados pela Cielo
$paymentId = $sale->getPayment()->getPaymentId();
// Utilize a URL de autenticação para redirecionar o cliente ao ambiente
// de autenticação do emissor do cartão
$authenticationUrl = $sale->getPayment()->getAuthenticationUrl();
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
### Criando uma venda com Boleto
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MERCHANT ID', 'MERCHANT KEY');
// Crie uma instância de Sale informando o ID do pedido na loja
$sale = new Sale('123');
// Crie uma instância de Customer informando o nome do cliente,
// documento e seu endereço
$customer = $sale->customer('Fulano de Tal')
->setIdentity('00000000001')
->setIdentityType('CPF')
->address()->setZipCode('22750012')
->setCountry('BRA')
->setState('RJ')
->setCity('Rio de Janeiro')
->setDistrict('Centro')
->setStreet('Av Marechal Camara')
->setNumber('123');
// Crie uma instância de Payment informando o valor do pagamento
$payment = $sale->payment(15700)
->setType(Payment::PAYMENTTYPE_BOLETO)
->setAddress('Rua de Teste')
->setBoletoNumber('1234')
->setAssignor('Empresa de Teste')
->setDemonstrative('Desmonstrative Teste')
->setExpirationDate(date('d/m/Y', strtotime('+1 month')))
->setIdentification('11884926754')
->setInstructions('Esse é um boleto de exemplo');
// Crie o pagamento na Cielo
try {
// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda
$sale = (new CieloEcommerce($merchant, $environment))->createSale($sale);
// Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
// dados retornados pela Cielo
$paymentId = $sale->getPayment()->getPaymentId();
$boletoURL = $sale->getPayment()->getUrl();
printf("URL Boleto: %s\n", $boletoURL);
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
```
### Tokenizando um cartão
```php
<?php
require 'vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
// ...
// ...
// Configure o ambiente
$environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('MID', 'MKEY');
// Crie uma instância do objeto que irá retornar o token do cartão
$card = new CreditCard();
$card->setCustomerName('Fulano de Tal');
$card->setCardNumber('0000000000000001');
$card->setHolder('Fulano de Tal');
$card->setExpirationDate('10/2020');
$card->setBrand(CreditCard::VISA);
try {
// Configure o SDK com seu merchant e o ambiente apropriado para recuperar o cartão
$card = (new CieloEcommerce($merchant, $environment))->tokenizeCard($card);
// Get the token
$cardToken = $card->getCardToken();
} catch (CieloRequestException $e) {
// Em caso de erros de integração, podemos tratar o erro aqui.
// os códigos de erro estão todos disponíveis no manual de integração.
$error = $e->getCieloError();
}
// ...
```
## Manual
Para mais informações sobre a integração com a API 3.0 da Cielo, vide o manual em: [Integração API 3.0](https://developercielo.github.io/manual/cielo-ecommerce)
{
"autoload": {
"psr-0": {
"Cielo": "src"
}
},
"name": "mactus/api-cielo-php",
"description": "Integração com a API 3.0 da Cielo",
"license": "MIT",
"type": "library",
"require": {
"php": ">=5.6",
"ext-curl": "*",
"ext-json": "*",
"psr/log":"^1.1"
},
"suggest": {
"monolog/monolog": "Allows more advanced logging of the application flow"
},
"homepage": "https://git.mactus.com.br/MactusWeb/libs/api-cielo-php"
}
<?php
namespace Cielo\API30\Ecommerce;
/**
* Class Address
*
* @package Cielo\API30\Ecommerce
*/
class Address implements CieloSerializable
{
private $street;
private $number;
private $complement;
private $zipCode;
private $city;
private $state;
private $country;
private $district;
/**
* @return array
*/
public function jsonSerialize()
{
return get_object_vars($this);
}
/**
* @param \stdClass $data
*/
public function populate(\stdClass $data)
{
$this->street = isset($data->Street) ? $data->Street : null;
$this->number = isset($data->Number) ? $data->Number : null;
$this->complement = isset($data->Complement) ? $data->Complement : null;
$this->zipCode = isset($data->ZipCode) ? $data->ZipCode : null;
$this->city = isset($data->City) ? $data->City : null;
$this->state = isset($data->State) ? $data->State : null;
$this->country = isset($data->Country) ? $data->Country : null;
$this->district = isset($data->District) ? $data->District : null;
}
/**
* @return mixed
*/
public function getDistrict()
{
return $this->district;
}
/**
* @param $district
*
* @return $this
*/
public function setDistrict($district)
{
$this->district = $district;
return $this;
}
/**
* @return mixed
*/
public function getStreet()
{
return $this->street;
}
/**
* @param $street
*
* @return $this
*/
public function setStreet($street)
{
$this->street = $street;
return $this;
}
/**
* @return mixed
*/
public function getNumber()
{
return $this->number;
}
/**
* @param $number
*
* @return $this
*/
public function setNumber($number)
{
$this->number = $number;
return $this;
}
/**
* @return mixed
*/
public function getComplement()
{
return $this->complement;
}
/**
* @param $complement
*
* @return $this
*/
public function setComplement($complement)
{
$this->complement = $complement;
return $this;
}
/**
* @return mixed
*/
public function getZipCode()
{
return $this->zipCode;
}
/**
* @param $zipCode
*
* @return $this
*/
public function setZipCode($zipCode)
{
$this->zipCode = $zipCode;
return $this;
}
/**
* @return mixed
*/
public function getCity()
{
return $this->city;
}
/**
* @param $city
*
* @return $this
*/
public function setCity($city)
{
$this->city = $city;
return $this;
}
/**
* @return mixed
*/
public function getState()
{
return $this->state;
}
/**
* @param $state
*
* @return $this
*/
public function setState($state)
{
$this->state = $state;
return $this;
}
/**
* @return mixed
*/
public function getCountry()
{
return $this->country;
}
/**
* @param $country
*
* @return $this
*/
public function setCountry($country)
{
$this->country = $country;
return $this;
}
}
<?php
namespace Cielo\API30\Ecommerce;
use Cielo\API30\Ecommerce\Request\CreateSaleRequest;
use Cielo\API30\Ecommerce\Request\QueryRecurrentPaymentRequest;
use Cielo\API30\Ecommerce\Request\QuerySaleRequest;
use Cielo\API30\Ecommerce\Request\TokenizeCardRequest;
use Cielo\API30\Ecommerce\Request\UpdateSaleRequest;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* The Cielo Ecommerce SDK front-end;
*/
class CieloEcommerce
{
private $merchant;
private $environment;
private $logger;
/**
* Create an instance of CieloEcommerce choosing the environment where the
* requests will be send
*
* @param Merchant $merchant
* The merchant credentials
* @param Environment environment
* The environment: {@link Environment::production()} or
* {@link Environment::sandbox()}
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, Environment $environment = null, LoggerInterface $logger = null)
{
if ($environment == null) {
$environment = Environment::production();
}
$this->merchant = $merchant;
$this->environment = $environment;
$this->logger = $logger;
}
/**
* Send the Sale to be created and return the Sale with tid and the status
* returned by Cielo.
*
* @param Sale $sale
* The preconfigured Sale
*
* @return Sale The Sale with authorization, tid, etc. returned by Cielo.
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException if anything gets wrong.
*
* @see <a href=
* "https://developercielo.github.io/Webservice-3.0/english.html#error-codes">Error
* Codes</a>
*/
public function createSale(Sale $sale)
{
$createSaleRequest = new CreateSaleRequest($this->merchant, $this->environment, $this->logger);
return $createSaleRequest->execute($sale);
}
/**
* Query a Sale on Cielo by paymentId
*
* @param string $paymentId
* The paymentId to be queried
*
* @return Sale The Sale with authorization, tid, etc. returned by Cielo.
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException if anything gets wrong.
*
* @see <a href=
* "https://developercielo.github.io/Webservice-3.0/english.html#error-codes">Error
* Codes</a>
*/
public function getSale($paymentId)
{
$querySaleRequest = new QuerySaleRequest($this->merchant, $this->environment, $this->logger);
return $querySaleRequest->execute($paymentId);
}
/**
* Query a RecurrentPayment on Cielo by RecurrentPaymentId
*
* @param string $recurrentPaymentId
* The RecurrentPaymentId to be queried
*
* @return \Cielo\API30\Ecommerce\RecurrentPayment
* The RecurrentPayment with authorization, tid, etc. returned by Cielo.
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException if anything gets wrong.
*
* @see <a href=
* "https://developercielo.github.io/Webservice-3.0/english.html#error-codes">Error
* Codes</a>
*/
public function getRecurrentPayment($recurrentPaymentId)
{
$queryRecurrentPaymentRequest = new queryRecurrentPaymentRequest($this->merchant, $this->environment, $this->logger);
return $queryRecurrentPaymentRequest->execute($recurrentPaymentId);
}
/**
* Cancel a Sale on Cielo by paymentId and speficying the amount
*
* @param string $paymentId
* The paymentId to be queried
* @param integer $amount
* Order value in cents
*
* @return Sale The Sale with authorization, tid, etc. returned by Cielo.
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException if anything gets wrong.
*
* @see <a href=
* "https://developercielo.github.io/Webservice-3.0/english.html#error-codes">Error
* Codes</a>
*/
public function cancelSale($paymentId, $amount = null)
{
$updateSaleRequest = new UpdateSaleRequest('void', $this->merchant, $this->environment, $this->logger);
$updateSaleRequest->setAmount($amount);
return $updateSaleRequest->execute($paymentId);
}
/**
* Capture a Sale on Cielo by paymentId and specifying the amount and the
* serviceTaxAmount
*
* @param string $paymentId
* The paymentId to be captured
* @param integer $amount
* Amount of the authorization to be captured
* @param integer $serviceTaxAmount
* Amount of the authorization should be destined for the service
* charge
*
* @return \Cielo\API30\Ecommerce\Payment The captured Payment.
*
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException if anything gets wrong.
*
* @see <a href=
* "https://developercielo.github.io/Webservice-3.0/english.html#error-codes">Error
* Codes</a>
*/
public function captureSale($paymentId, $amount = null, $serviceTaxAmount = null)
{
$updateSaleRequest = new UpdateSaleRequest('capture', $this->merchant, $this->environment, $this->logger);
$updateSaleRequest->setAmount($amount);
$updateSaleRequest->setServiceTaxAmount($serviceTaxAmount);
return $updateSaleRequest->execute($paymentId);
}
/**
* @param CreditCard $card
*
* @return CreditCard
*/
public function tokenizeCard(CreditCard $card)
{
$tokenizeCardRequest = new TokenizeCardRequest($this->merchant, $this->environment, $this->logger);
return $tokenizeCardRequest->execute($card);
}
}
<?php
namespace Cielo\API30\Ecommerce;
/**
* Interface CieloSerializable
*
* @package Cielo\API30\Ecommerce
*/
interface CieloSerializable extends \JsonSerializable
{
/**
* @param \stdClass $data
*
* @return mixed
*/
public function populate(\stdClass $data);
}
<?php
namespace Cielo\API30\Ecommerce;
/**
* Class CreditCard
*
* @package Cielo\API30\Ecommerce
*/
class CreditCard implements \JsonSerializable, CieloSerializable
{
/**
* Bandeira Visa
*/
const VISA = 'Visa';
/**
* Bandeira Mastercard
*/
const MASTERCARD = 'Master';
/**
* Bandeira American Express
*/
const AMEX = 'Amex';
/**
* Bandeira ELO
*/
const ELO = 'Elo';
/**
* Bandeira Aura
*/
const AURA = 'Aura';
/**
* Bandeira JCB
*/
const JCB = 'JCB';
/**
* Bandeira Diners
*/
const DINERS = 'Diners';
/**
* Bandeira Discover
*/
const DISCOVER = 'Discover';
/**
* Bandeira Hipercard
*/
const HIPERCARD = 'Hipercard';
/** @var string $cardNumber */
private $cardNumber;
/** @var string $holder */
private $holder;
/** @var string $expirationDate */
private $expirationDate;
/** @var string $securityCode */
private $securityCode;
/** @var bool $saveCard */
private $saveCard = false;
/** @var string $brand */
private $brand;
/** @var string $cardToken */
private $cardToken;
/** @var string $customerName */
private $customerName;
/** @var \stdClass $links */
private $links;
/**
* @param string $json
*
* @return CreditCard
*/
public static function fromJson($json)
{
$object = \json_decode($json);
$cardToken = new CreditCard();
$cardToken->populate($object);
return $cardToken;
}
/**
* @inheritdoc
*/
public function populate(\stdClass $data)
{
$this->cardNumber = isset($data->CardNumber) ? $data->CardNumber : null;
$this->holder = isset($data->Holder) ? $data->Holder : null;
$this->expirationDate = isset($data->ExpirationDate) ? $data->ExpirationDate : null;
$this->securityCode = isset($data->SecurityCode) ? $data->SecurityCode : null;
$this->saveCard = isset($data->SaveCard) ? !!$data->SaveCard : false;
$this->brand = isset($data->Brand) ? $data->Brand : null;
$this->cardToken = isset($data->CardToken) ? $data->CardToken : null;
$this->links = isset($data->Links) ? $data->Links : new \stdClass();
$this->customerName = isset($data->CustomerName) ? $data->CustomerName : null;
}
/**
* @return array
*/
public function jsonSerialize()
{
return get_object_vars($this);
}
/**
* @return mixed
*/
public function getCardNumber()
{
return $this->cardNumber;
}
/**
* @param $cardNumber
*
* @return $this
*/
public function setCardNumber($cardNumber)
{
$this->cardNumber = $cardNumber;
return $this;
}
/**
* @return mixed
*/
public function getHolder()
{
return $this->holder;
}
/**
* @param $holder
*
* @return $this
*/
public function setHolder($holder)
{
$this->holder = $holder;
return $this;
}
/**
* @return mixed
*/
public function getExpirationDate()
{
return $this->expirationDate;
}
/**
* @param $expirationDate
*
* @return $this
*/
public function setExpirationDate($expirationDate)
{
$this->expirationDate = $expirationDate;
return $this;
}
/**
* @return mixed
*/
public function getSecurityCode()
{
return $this->securityCode;
}
/**
* @param $securityCode
*
* @return $this
*/
public function setSecurityCode($securityCode)
{
$this->securityCode = $securityCode;
return $this;
}
/**
* @return bool
*/
public function getSaveCard()
{
return $this->saveCard;
}
/**
* @param $saveCard
*
* @return $this
*/
public function setSaveCard($saveCard)
{
$this->saveCard = $saveCard;
return $this;
}
/**
* @return mixed
*/
public function getBrand()
{
return $this->brand;
}
/**
* @param $brand
*
* @return $this
*/
public function setBrand($brand)
{
$this->brand = $brand;
return $this;
}
/**
* @return mixed
*/
public function getCardToken()
{
return $this->cardToken;
}
/**
* @param $cardToken
*
* @return $this
*/
public function setCardToken($cardToken)
{
$this->cardToken = $cardToken;
return $this;
}
/**
* @return string
*/
public function getCustomerName()
{
return $this->customerName;
}
/**
* @param string $customerName
*/
public function setCustomerName($customerName)
{
$this->customerName = $customerName;
}
/**
* @return \stdClass
*/
public function getLinks()
{
return $this->links;
}
/**
* @param \stdClass $links
*/
public function setLinks($links)
{
$this->links = $links;
}
}
<?php
namespace Cielo\API30\Ecommerce;
/**
* Class Customer
*
* @package Cielo\API30\Ecommerce
*/
class Customer implements \JsonSerializable
{
private $name;
private $email;
private $birthDate;
private $identity;
private $identityType;
private $address;
private $deliveryAddress;
/**
* Customer constructor.
*
* @param null $name
*/
public function __construct($name = null)
{
$this->setName($name);
}
/**
* @return array
*/
public function jsonSerialize()
{
return get_object_vars($this);
}
/**
* @param \stdClass $data
*/
public function populate(\stdClass $data)
{
$this->name = isset($data->Name) ? $data->Name : null;
$this->email = isset($data->Email) ? $data->Email : null;
$this->birthDate = isset($data->Birthdate) ? $data->Birthdate : null;
$this->identity = isset($data->Identity) ? $data->Identity : null;
$this->identityType = isset($data->IdentityType) ? $data->IdentityType : null;
if (isset($data->Address)) {
$this->address = new Address();
$this->address->populate($data->Address);
}
if (isset($data->DeliveryAddress)) {
$this->deliveryAddress = new Address();
$this->deliveryAddress->populate($data->DeliveryAddress);
}
}
/**
* @return Address
*/
public function address()
{
$address = new Address();
$this->setAddress($address);
return $address;
}
/**
* @return Address
*/
public function deliveryAddress()
{
$address = new Address();
$this->setDeliveryAddress($address);
return $address;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param $name
*
* @return $this
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* @return mixed
*/
public function getEmail()
{
return $this->email;
}
/**
* @param $email
*
* @return $this
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* @return mixed
*/
public function getBirthDate()
{
return $this->birthDate;
}
/**
* @param $birthDate
*
* @return $this
*/
public function setBirthDate($birthDate)
{
$this->birthDate = $birthDate;
return $this;
}
/**
* @return mixed
*/
public function getIdentity()
{
return $this->identity;
}
/**
* @param $identity
*
* @return $this
*/
public function setIdentity($identity)
{
$this->identity = $identity;
return $this;
}
/**
* @return mixed
*/
public function getIdentityType()
{
return $this->identityType;
}
/**
* @param $identityType
*
* @return $this
*/
public function setIdentityType($identityType)
{
$this->identityType = $identityType;
return $this;
}
/**
* @return mixed
*/
public function getAddress()
{
return $this->address;
}
/**
* @param $address
*
* @return $this
*/
public function setAddress($address)
{
$this->address = $address;
return $this;
}
/**
* @return mixed
*/
public function getDeliveryAddress()
{
return $this->deliveryAddress;
}
/**
* @param $deliveryAddress
*
* @return $this
*/
public function setDeliveryAddress($deliveryAddress)
{
$this->deliveryAddress = $deliveryAddress;
return $this;
}
}
<?php
namespace Cielo\API30\Ecommerce;
/**
* Class Environment
*
* @package Cielo\API30\Ecommerce
*/
class Environment implements \Cielo\API30\Environment
{
private $api;
private $apiQuery;
/**
* Environment constructor.
*
* @param $api
* @param $apiQuery
*/
private function __construct($api, $apiQuery)
{
$this->api = $api;
$this->apiQuery = $apiQuery;
}
/**
* @return Environment
*/
public static function sandbox()
{
$api = 'https://apisandbox.cieloecommerce.cielo.com.br/';
$apiQuery = 'https://apiquerysandbox.cieloecommerce.cielo.com.br/';
return new Environment($api, $apiQuery);
}
/**
* @return Environment
*/
public static function production()
{
$api = 'https://api.cieloecommerce.cielo.com.br/';
$apiQuery = 'https://apiquery.cieloecommerce.cielo.com.br/';
return new Environment($api, $apiQuery);
}
/**
* Gets the environment's Api URL
*
* @return string the Api URL
*/
public function getApiUrl()
{
return $this->api;
}
/**
* Gets the environment's Api Query URL
*
* @return string Api Query URL
*/
public function getApiQueryURL()
{
return $this->apiQuery;
}
}
This diff is collapsed.
<?php
namespace Cielo\API30\Ecommerce;
/**
* Class RecurrentPayment
*
* @package Cielo\API30\Ecommerce
*/
class RecurrentPayment implements \JsonSerializable
{
const INTERVAL_MONTHLY = 'Monthly';
const INTERVAL_BIMONTHLY = 'Bimonthly';
const INTERVAL_QUARTERLY = 'Quarterly';
const INTERVAL_SEMIANNUAL = 'SemiAnnual';
const INTERVAL_ANNUAL = 'Annual';
private $authorizeNow;
private $recurrentPaymentId;
private $nextRecurrency;
private $startDate;
private $endDate;
private $interval;
private $amount;
private $country;
private $createDate;
private $currency;
private $currentRecurrencyTry;
private $provider;
private $recurrencyDay;
private $successfulRecurrences;
private $links;
private $recurrentTransactions;
private $reasonCode;
private $reasonMessage;
private $status;
/**
* RecurrentPayment constructor.
*
* @param bool $authorizeNow
*/
public function __construct($authorizeNow = true)
{
$this->setAuthorizeNow($authorizeNow);
}
/**
* @param $json
*
* @return RecurrentPayment
*/
public static function fromJson($json)
{
$object = json_decode($json);
$recurrentPayment = new RecurrentPayment();
if (isset($object->RecurrentPayment)) {
$recurrentPayment->populate($object->RecurrentPayment);
}
return $recurrentPayment;
}
/**
* @param \stdClass $data
*/
public function populate(\stdClass $data)
{
$this->authorizeNow = isset($data->AuthorizeNow) ? !!$data->AuthorizeNow : false;
$this->recurrentPaymentId = isset($data->RecurrentPaymentId) ? $data->RecurrentPaymentId : null;
$this->nextRecurrency = isset($data->NextRecurrency) ? $data->NextRecurrency : null;
$this->startDate = isset($data->StartDate) ? $data->StartDate : null;
$this->endDate = isset($data->EndDate) ? $data->EndDate : null;
$this->interval = isset($data->Interval) ? $data->Interval : null;
$this->amount = isset($data->Amount) ? $data->Amount : null;
$this->country = isset($data->Country) ? $data->Country : null;
$this->createDate = isset($data->CreateDate) ? $data->CreateDate : null;
$this->currency = isset($data->Currency) ? $data->Currency : null;
$this->currentRecurrencyTry = isset($data->CurrentRecurrencyTry) ? $data->CurrentRecurrencyTry : null;
$this->provider = isset($data->Provider) ? $data->Provider : null;
$this->recurrencyDay = isset($data->RecurrencyDay) ? $data->RecurrencyDay : null;
$this->successfulRecurrences = isset($data->SuccessfulRecurrences) ? $data->SuccessfulRecurrences : null;
$this->links = isset($data->Links) ? $data->Links : [];
$this->recurrentTransactions = isset($data->RecurrentTransactions) ? $data->RecurrentTransactions : [];
$this->reasonCode = isset($data->ReasonCode) ? $data->ReasonCode : null;
$this->reasonMessage = isset($data->ReasonMessage) ? $data->ReasonMessage : null;
$this->status = isset($data->Status) ? $data->Status : null;
}
/**
* @return array
*/
public function jsonSerialize()
{
return get_object_vars($this);
}
/**
* @return mixed
*/
public function getRecurrentPaymentId()
{
return $this->recurrentPaymentId;
}
/**
* @return mixed
*/
public function getReasonCode()
{
return $this->reasonCode;
}
/**
* @return mixed
*/
public function getReasonMessage()
{
return $this->reasonMessage;
}
/**
* @return mixed
*/
public function getNextRecurrency()
{
return $this->nextRecurrency;
}
/**
* @return mixed
*/
public function getAmount()
{
return $this->amount;
}
/**
* @return mixed
*/
public function getCountry()
{
return $this->country;
}
/**
* @return mixed
*/
public function getCreateDate()
{
return $this->createDate;
}
/**
* @return mixed
*/
public function getCurrency()
{
return $this->currency;
}
/**
* @return mixed
*/
public function getCurrentRecurrencyTry()
{
return $this->currentRecurrencyTry;
}
/**
* @return mixed
*/
public function getProvider()
{
return $this->provider;
}
/**
* @return mixed
*/
public function getRecurrencyDay()
{
return $this->recurrencyDay;
}
/**
* @return mixed
*/
public function getSuccessfulRecurrences()
{
return $this->successfulRecurrences;
}
/**
* @return mixed
*/
public function getStatus()
{
return $this->status;
}
/**
* @return mixed
*/
public function getAuthorizeNow()
{
return $this->authorizeNow;
}
/**
* @param $authorizeNow
*
* @return $this
*/
public function setAuthorizeNow($authorizeNow)
{
$this->authorizeNow = $authorizeNow;
return $this;
}
/**
* @return mixed
*/
public function getStartDate()
{
return $this->startDate;
}
/**
* @param $startDate
*
* @return $this
*/
public function setStartDate($startDate)
{
$this->startDate = $startDate;
return $this;
}
/**
* @return mixed
*/
public function getEndDate()
{
return $this->endDate;
}
/**
* @param $endDate
*
* @return $this
*/
public function setEndDate($endDate)
{
$this->endDate = $endDate;
return $this;
}
/**
* @return mixed
*/
public function getInterval()
{
return $this->interval;
}
/**
* @param $interval
*
* @return $this
*/
public function setInterval($interval)
{
$this->interval = $interval;
return $this;
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class AbstractSaleRequest
*
* @package Cielo\API30\Ecommerce\Request
*/
abstract class AbstractRequest
{
private $merchant;
private $logger;
/**
* AbstractSaleRequest constructor.
*
* @param Merchant $merchant
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, LoggerInterface $logger = null)
{
$this->merchant = $merchant;
$this->logger = $logger;
}
/**
* @param $param
*
* @return mixed
*/
public abstract function execute($param);
/**
* @param $method
* @param $url
* @param \JsonSerializable|null $content
*
* @return mixed
*
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException
* @throws \RuntimeException
*/
protected function sendRequest($method, $url, \JsonSerializable $content = null)
{
$headers = [
'Accept: application/json',
'Accept-Encoding: gzip',
'User-Agent: CieloEcommerce/3.0 PHP SDK',
'MerchantId: ' . $this->merchant->getId(),
'MerchantKey: ' . $this->merchant->getKey(),
'RequestId: ' . uniqid()
];
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
switch ($method) {
case 'GET':
break;
case 'POST':
curl_setopt($curl, CURLOPT_POST, true);
break;
default:
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
}
if ($content !== null) {
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($content));
$headers[] = 'Content-Type: application/json';
} else {
$headers[] = 'Content-Length: 0';
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
if ($this->logger !== null) {
$this->logger->debug('Requisição', [
sprintf('%s %s', $method, $url),
$headers,
json_decode(preg_replace('/("cardnumber"):"([^"]{6})[^"]+([^"]{4})"/i', '$1:"$2******$3"', json_encode($content)))
]
);
}
$response = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($this->logger !== null) {
$this->logger->debug('Resposta', [
sprintf('Código de status: %s', $statusCode),
json_decode($response)
]);
}
if (curl_errno($curl)) {
$message = sprintf('cURL error[%s]: %s', curl_errno($curl), curl_error($curl));
$this->logger->error($message);
throw new \RuntimeException($message);
}
curl_close($curl);
return $this->readResponse($statusCode, $response);
}
/**
* @param $statusCode
* @param $responseBody
*
* @return mixed
*
* @throws CieloRequestException
*/
protected function readResponse($statusCode, $responseBody)
{
$unserialized = null;
switch ($statusCode) {
case 200:
case 201:
$unserialized = $this->unserialize($responseBody);
break;
case 400:
$exception = null;
$response = json_decode($responseBody);
foreach ($response as $error) {
$cieloError = new CieloError($error->Message, $error->Code);
$exception = new CieloRequestException('Request Error', $statusCode, $exception);
$exception->setCieloError($cieloError);
}
throw $exception;
case 404:
throw new CieloRequestException('Resource not found', 404, null);
default:
throw new CieloRequestException('Unknown status', $statusCode);
}
return $unserialized;
}
/**
* @param $json
*
* @return mixed
*/
protected abstract function unserialize($json);
}
<?php
namespace Cielo\API30\Ecommerce\Request;
/**
* Class CieloError
*
* @package Cielo\API30\Ecommerce\Request
*/
class CieloError
{
private $code;
private $message;
/**
* CieloError constructor.
*
* @param $message
* @param $code
*/
public function __construct($message, $code)
{
$this->setMessage($message);
$this->setCode($code);
}
/**
* @return mixed
*/
public function getCode()
{
return $this->code;
}
/**
* @param $code
*
* @return $this
*/
public function setCode($code)
{
$this->code = $code;
return $this;
}
/**
* @return mixed
*/
public function getMessage()
{
return $this->message;
}
/**
* @param $message
*
* @return $this
*/
public function setMessage($message)
{
$this->message = $message;
return $this;
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
/**
* Class CieloRequestException
*
* @package Cielo\API30\Ecommerce\Request
*/
class CieloRequestException extends \Exception
{
private $cieloError;
/**
* CieloRequestException constructor.
*
* @param string $message
* @param int $code
* @param null $previous
*/
public function __construct($message, $code, $previous = null)
{
parent::__construct($message, $code, $previous);
}
/**
* @return mixed
*/
public function getCieloError()
{
return $this->cieloError;
}
/**
* @param CieloError $cieloError
*
* @return $this
*/
public function setCieloError(CieloError $cieloError)
{
$this->cieloError = $cieloError;
return $this;
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Environment;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class CreateSaleRequest
*
* @package Cielo\API30\Ecommerce\Request
*/
class CreateSaleRequest extends AbstractRequest
{
private $environment;
/**
* CreateSaleRequest constructor.
*
* @param Merchant $merchant
* @param Environment $environment
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, Environment $environment, LoggerInterface $logger = null)
{
parent::__construct($merchant, $logger);
$this->environment = $environment;
}
/**
* @param $sale
*
* @return null
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException
* @throws \RuntimeException
*/
public function execute($sale)
{
$url = $this->environment->getApiUrl() . '1/sales/';
return $this->sendRequest('POST', $url, $sale);
}
/**
* @param $json
*
* @return Sale
*/
protected function unserialize($json)
{
return Sale::fromJson($json);
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Ecommerce\RecurrentPayment;
use Cielo\API30\Environment;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class QueryRecurrentPaymentRequest
*
* @package Cielo\API30\Ecommerce\Request
*/
class QueryRecurrentPaymentRequest extends AbstractRequest
{
private $environment;
/**
* QueryRecurrentPaymentRequest constructor.
*
* @param Merchant $merchant
* @param Environment $environment
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, Environment $environment, LoggerInterface $logger = null)
{
parent::__construct($merchant, $logger);
$this->environment = $environment;
}
/**
* @param $recurrentPaymentId
*
* @return null
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException
* @throws \RuntimeException
*/
public function execute($recurrentPaymentId)
{
$url = $this->environment->getApiQueryURL() . '1/RecurrentPayment/' . $recurrentPaymentId;
return $this->sendRequest('GET', $url);
}
/**
* @param $json
*
* @return RecurrentPayment
*/
protected function unserialize($json)
{
return RecurrentPayment::fromJson($json);
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Environment;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class QuerySaleRequest
*
* @package Cielo\API30\Ecommerce\Request
*/
class QuerySaleRequest extends AbstractRequest
{
private $environment;
/**
* QuerySaleRequest constructor.
*
* @param Merchant $merchant
* @param Environment $environment
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, Environment $environment, LoggerInterface $logger = null)
{
parent::__construct($merchant, $logger);
$this->environment = $environment;
}
/**
* @param $paymentId
*
* @return null
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException
* @throws \RuntimeException
*/
public function execute($paymentId)
{
$url = $this->environment->getApiQueryURL() . '1/sales/' . $paymentId;
return $this->sendRequest('GET', $url);
}
/**
* @param $json
*
* @return Sale
*/
protected function unserialize($json)
{
return Sale::fromJson($json);
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Ecommerce\CreditCard;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class CreateCardTokenRequestHandler
*
* @package AppBundle\Handler\Cielo
*/
class TokenizeCardRequest extends AbstractRequest
{
private $environment;
/** @var Merchant $merchant */
private $merchant;
/**
* CreateCardTokenRequestHandler constructor.
*
* @param Merchant $merchant
* @param Environment $environment
* @param LoggerInterface|null $logger
*/
public function __construct(Merchant $merchant, Environment $environment, LoggerInterface $logger = null)
{
parent::__construct($merchant, $logger);
$this->merchant = $merchant;
$this->environment = $environment;
}
/**
* @inheritdoc
*/
public function execute($param)
{
$url = $this->environment->getApiUrl() . '1/card/';
return $this->sendRequest('POST', $url, $param);
}
/**
* @inheritdoc
*/
protected function unserialize($json)
{
return CreditCard::fromJson($json);
}
}
<?php
namespace Cielo\API30\Ecommerce\Request;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Environment;
use Cielo\API30\Merchant;
use Psr\Log\LoggerInterface;
/**
* Class UpdateSaleRequest
*
* @package Cielo\API30\Ecommerce\Request
*/
class UpdateSaleRequest extends AbstractRequest
{
private $environment;
private $type;
private $serviceTaxAmount;
private $amount;
/**
* UpdateSaleRequest constructor.
*
* @param Merchant $type
* @param Merchant $merchant
* @param Environment $environment
* @param LoggerInterface|null $logger
*/
public function __construct($type, Merchant $merchant, Environment $environment, LoggerInterface $logger = null)
{
parent::__construct($merchant, $logger);
$this->environment = $environment;
$this->type = $type;
}
/**
* @param $paymentId
*
* @return null
* @throws \Cielo\API30\Ecommerce\Request\CieloRequestException
* @throws \RuntimeException
*/
public function execute($paymentId)
{
$url = $this->environment->getApiUrl() . '1/sales/' . $paymentId . '/' . $this->type;
$params = [];
if ($this->amount != null) {
$params['amount'] = $this->amount;
}
if ($this->serviceTaxAmount != null) {
$params['serviceTaxAmount'] = $this->serviceTaxAmount;
}
$url .= '?' . http_build_query($params);
return $this->sendRequest('PUT', $url);
}
/**
* @param $json
*
* @return Payment
*/
protected function unserialize($json)
{
return Payment::fromJson($json);
}
/**
* @return mixed
*/
public function getServiceTaxAmount()
{
return $this->serviceTaxAmount;
}
/**
* @param $serviceTaxAmount
*
* @return $this
*/
public function setServiceTaxAmount($serviceTaxAmount)
{
$this->serviceTaxAmount = $serviceTaxAmount;
return $this;
}
/**
* @return mixed
*/
public function getAmount()
{
return $this->amount;
}
/**
* @param $amount
*
* @return $this
*/
public function setAmount($amount)
{
$this->amount = $amount;
return $this;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment