diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fcaf8f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# VSCode +########################## +.history/ +.svn/ + +!.vendor/ +.vendor/* +!.vendor/.gitkeep \ No newline at end of file diff --git a/README.md b/README.md index 7daa960..205124d 100644 --- a/README.md +++ b/README.md @@ -183,10 +183,10 @@ $action123 = $asaas->city()->getById(123); Documentação Oficial -------------------- -Obs.: Esta é uma API não oficial. Foi feita com base na documentação disponibilizada [neste link](https://docs.google.com/document/d/1XUJRHY_0nd45CzFK5EmjDK92qgaQJGMxT0rjZriTk-g). +Obs.: Esta é uma API não oficial baseada na API ASAAS v3. A documentação oficial da API ASAAS está disponibilizada [neste link](https://asaasv3.docs.apiary.io). -Creditos +Créditos -------- * [Agência Softr Ltda - www.softr.com.br](http://www.softr.com.br) diff --git a/composer.json b/composer.json index a0f9fbf..022922b 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name" : "softr/asaas-php-sdk", + "name" : "lupainformatica/asaas-php-sdk", "type" : "library", "description": "Asaas.com PHP API Wrapper", "keywords" : ["Asaas", "API", "Payment SaaS", "Credit Card", "Boleto"], @@ -31,4 +31,4 @@ } }, "minimum-stability": "dev" -} \ No newline at end of file +} diff --git a/src/Adapter/GuzzleHttpAdapter.php b/src/Adapter/GuzzleHttpAdapter.php index 3498a7f..b2f36cf 100644 --- a/src/Adapter/GuzzleHttpAdapter.php +++ b/src/Adapter/GuzzleHttpAdapter.php @@ -41,7 +41,7 @@ class GuzzleHttpAdapter implements AdapterInterface */ public function __construct($token, ClientInterface $client = null) { - if(version_compare(ClientInterface::VERSION, '6') === 1) + if(version_compare(ClientInterface::MAJOR_VERSION, '6') === 1) { $this->client = $client ?: new Client(['headers' => ['access_token' => $token]]); } @@ -119,7 +119,7 @@ public function put($url, $content = '') public function post($url, $content = '') { $options = []; - $options['form_params'] = $content; + $options['json'] = $content; try { @@ -161,7 +161,18 @@ protected function handleError() $code = (int) $this->response->getStatusCode(); $content = json_decode($body); + + $errors = []; + if (isset($content->errors)) { + foreach ((array)$content->errors as $error) { + $errors[] = $error->code . ': ' . $error->description; + } + } + + if (!empty($errors)) { + throw new HttpException(implode('
', $errors), $code); + } throw new HttpException(isset($content->message) ? $content->message : 'Request not processed.', $code); } -} \ No newline at end of file +} diff --git a/src/Api/AbstractApi.php b/src/Api/AbstractApi.php index 4cd5626..be5ef16 100644 --- a/src/Api/AbstractApi.php +++ b/src/Api/AbstractApi.php @@ -16,14 +16,21 @@ abstract class AbstractApi * * @var string */ - const ENDPOINT_PRODUCAO = 'https://www.asaas.com/api/v2'; + const ENDPOINT_PRODUCAO = 'https://api.asaas.com/v3'; /** * Endpoint Homologação * * @var string */ - const ENDPOINT_HOMOLOGACAO = 'http://homolog.asaas.com/api/v2'; + const ENDPOINT_HOMOLOGACAO = 'https://sandbox.asaas.com/api/v3'; + + /** + * Endpoint Sandbox + * + * @var string + */ + const ENDPOINT_SANDBOX = 'https://sandbox.asaas.com/api/v3'; /** * Http Adapter Instance @@ -54,7 +61,16 @@ public function __construct(AdapterInterface $adapter, $ambiente = 'producao') { $this->adapter = $adapter; - $this->endpoint = $ambiente == 'homologacao' ? static::ENDPOINT_HOMOLOGACAO : static::ENDPOINT_PRODUCAO; + switch ($ambiente) { + case 'sandbox': + $this->endpoint = static::ENDPOINT_SANDBOX; + break; + case 'homologacao': + $this->endpoint = static::ENDPOINT_HOMOLOGACAO; + break; + default: + $this->endpoint = static::ENDPOINT_PRODUCAO; + } } /** @@ -79,4 +95,4 @@ public function getMeta() { return $this->meta; } -} \ No newline at end of file +} diff --git a/src/Api/Customer.php b/src/Api/Customer.php index 9d25793..1d2533b 100644 --- a/src/Api/Customer.php +++ b/src/Api/Customer.php @@ -27,7 +27,7 @@ public function getAll(array $filters = []) return array_map(function($customer) { - return new CustomerEntity($customer->customer); + return new CustomerEntity($customer); }, $customers->data); } @@ -46,23 +46,37 @@ public function getById($id) return new CustomerEntity($customer); } + /** + * Get Customer By Name + * + * @param string $name Customer Name + * @return CustomerEntity + */ + public function getByName($name) + { + return $this->getAll(['name' => $name]); + } + + /** + * Get Customer By CPF/CNPJ + * + * @param string $cpfCnpj Customer CPF / CNPJ + * @return CustomerEntity + */ + public function getByCpfCnpj($cpfCnpj) + { + return $this->getAll(['cpfCnpj' => $cpfCnpj]); + } + /** * Get Customer By Email * - * @param string $email Customer Id + * @param string $email Customer e-mail * @return CustomerEntity */ public function getByEmail($email) { - foreach($this->getAll(['name' => $email]) as $customer) - { - if($customer->email == $email) - { - return $customer; - } - } - - return; + return $this->getAll(['email' => $email]); } /** diff --git a/src/Api/Payment.php b/src/Api/Payment.php index f060751..3123df0 100644 --- a/src/Api/Payment.php +++ b/src/Api/Payment.php @@ -1,4 +1,5 @@ adapter->get(sprintf('%s/payments?%s', $this->endpoint, http_build_query($filters))); + + $payments = json_decode($payments); + + $this->extractMeta($payments); + + return $payments; + } + /** * Get all payments * @@ -25,8 +43,7 @@ public function getAll(array $filters = []) $this->extractMeta($payments); - return array_map(function($payment) - { + return array_map(function ($payment) { return new PaymentEntity($payment); }, $payments->data); } @@ -61,8 +78,7 @@ public function getByCustomer($customerId, array $filters = []) $this->extractMeta($payments); - return array_map(function($payment) - { + return array_map(function ($payment) { return new PaymentEntity($payment); }, $payments->data); } @@ -82,8 +98,7 @@ public function getBySubscription($subscriptionId) $this->extractMeta($payments); - return array_map(function($payment) - { + return array_map(function ($payment) { return new PaymentEntity($payment); }, $payments->data); } @@ -119,6 +134,22 @@ public function update($id, array $data) return new PaymentEntity($payment); } + /** + * Refund a Payment By Id + * + * @param string $id Payment Id + * @param array $data Payment Data + * @return PaymentEntity + */ + public function refund($id, array $data) + { + $payment = $this->adapter->post(sprintf('%s/payments/%s/refund', $this->endpoint, $id), $data); + + $payment = json_decode($payment); + + return new PaymentEntity($payment); + } + /** * Delete Payment By Id * @@ -128,4 +159,14 @@ public function delete($id) { $this->adapter->delete(sprintf('%s/payments/%s', $this->endpoint, $id)); } -} \ No newline at end of file + + /** + * Delete Payment By Id + * + * @param string|int $id Payment Id + */ + public function deleteInstallment($id) + { + $this->adapter->delete(sprintf('%s/installments/%s', $this->endpoint, $id)); + } +} diff --git a/src/Api/Subscription.php b/src/Api/Subscription.php index a76cfe0..0046559 100644 --- a/src/Api/Subscription.php +++ b/src/Api/Subscription.php @@ -1,4 +1,5 @@ adapter->get(sprintf('%s/subscriptions?%s', $this->endpoint, http_build_query($filters))); + + $subscriptions = json_decode($subscriptions); + + $this->extractMeta($subscriptions); + + return $subscriptions; + } + /** * Get all subscriptions * @@ -25,9 +43,8 @@ public function getAll(array $filters = []) $this->extractMeta($subscriptions); - return array_map(function($subscription) - { - return new SubscriptionEntity($subscription->subscription); + return array_map(function ($subscription) { + return new SubscriptionEntity($subscription); }, $subscriptions->data); } @@ -61,9 +78,8 @@ public function getByCustomer($customerId) $this->extractMeta($subscriptions); - return array_map(function($subscription) - { - return new SubscriptionEntity($subscription->subscription); + return array_map(function ($subscription) { + return new SubscriptionEntity($subscription); }, $subscriptions->data); } @@ -107,4 +123,4 @@ public function delete($id) { $this->adapter->delete(sprintf('%s/subscriptions/%s', $this->endpoint, $id)); } -} \ No newline at end of file +} diff --git a/src/Entity/AbstractEntity.php b/src/Entity/AbstractEntity.php index 5d3f780..f07ecb3 100644 --- a/src/Entity/AbstractEntity.php +++ b/src/Entity/AbstractEntity.php @@ -66,7 +66,7 @@ protected static function convertDateTime($date) return; } - $date = \DateTime::createFromFormat('d/m/Y', $date); + $date = new \DateTime($date); if(!$date) { @@ -91,4 +91,4 @@ protected static function convertToCamelCase($str) return lcfirst(preg_replace_callback('/(^|_)([a-z])/', $callback, $str)); } -} \ No newline at end of file +} diff --git a/src/Entity/Customer.php b/src/Entity/Customer.php index 2b1d6c2..5e31ff1 100644 --- a/src/Entity/Customer.php +++ b/src/Entity/Customer.php @@ -58,8 +58,14 @@ final class Customer extends \Softr\Asaas\Entity\AbstractEntity */ public $province; + /** + * @var string Identificador do cliente no seu sistema + */ + public $externalReference; + /** * @var bool + * @deprecated Property not found on v3 API */ public $foreignCustomer; @@ -98,6 +104,26 @@ final class Customer extends \Softr\Asaas\Entity\AbstractEntity */ public $personType; + /** + * @var string + */ + public $additionalEmails; + + /** + * @var string + */ + public $municipalInscription; + + /** + * @var string + */ + public $stateInscription; + + /** + * @var string + */ + public $groupName; + /** * @var array */ diff --git a/src/Entity/Installment.php b/src/Entity/Installment.php new file mode 100644 index 0000000..8dedb2e --- /dev/null +++ b/src/Entity/Installment.php @@ -0,0 +1,17 @@ + + */ +final class Installment extends \Softr\Asaas\Entity\AbstractEntity +{ + /** + * @var array + */ + public $data; + + +} \ No newline at end of file diff --git a/src/Entity/Payment.php b/src/Entity/Payment.php index 72082c4..9e42d7c 100644 --- a/src/Entity/Payment.php +++ b/src/Entity/Payment.php @@ -8,6 +8,11 @@ */ final class Payment extends \Softr\Asaas\Entity\AbstractEntity { + /** + * @var string + */ + public $object; + /** * @var int */ @@ -18,6 +23,16 @@ final class Payment extends \Softr\Asaas\Entity\AbstractEntity */ public $customer; + /** + * @var string + */ + public $installment; + + /** + * @var string + */ + public $paymentLink; + /** * @var string */ @@ -28,6 +43,36 @@ final class Payment extends \Softr\Asaas\Entity\AbstractEntity */ public $billingType; + /** + * @var bool + */ + public $canBePaidAfterDueDate; + + /** + * @var bool + */ + public $deleted; + + /** + * @var bool + */ + public $anticipated; + + /** + * @var bool + */ + public $anticipable; + + /** + * @var bool + */ + public $postalService; + + /** + * @var string + */ + public $pixTransaction; + /** * @var float */ @@ -83,11 +128,21 @@ final class Payment extends \Softr\Asaas\Entity\AbstractEntity */ public $invoiceUrl; + /** + * @var string + */ + public $transactionReceiptUrl; + /** * @var string */ public $boletoUrl; + /** + * @var string + */ + public $bankSlipUrl; + /** * @var int */ @@ -193,6 +248,36 @@ final class Payment extends \Softr\Asaas\Entity\AbstractEntity */ public $creditCardHolderMobilePhoneDDD; + /** + * @var string Identificador do título no sistema origem + */ + public $externalReference; + + /** + * @var int + */ + public $installmentNumber; + + /** + * @var array|string + */ + public $discount; + + /** + * @var array|string + */ + public $fine; + + /** + * @var array|string + */ + public $interest; + + /** + * @var string + */ + public $confirmedDate; + /** * @param string $dueDate */ @@ -200,4 +285,52 @@ public function setDueDate($dueDate) { $this->dueDate = static::convertDateTime($dueDate); } -} \ No newline at end of file + + /** + * @param string $originalDueDate + */ + public function setOriginalDueDate($originalDueDate) + { + $this->originalDueDate = static::convertDateTime($originalDueDate); + } + + /** + * @param string $paymentDate + */ + public function setPaymentDate($paymentDate) + { + $this->paymentDate = static::convertDateTime($paymentDate); + } + + /** + * @param string $clientPaymentDate + */ + public function setClientPaymentDate($clientPaymentDate) + { + $this->clientPaymentDate = static::convertDateTime($clientPaymentDate); + } + + /** + * @param string $creditDate + */ + public function setCreditDate($creditDate) + { + $this->creditDate = static::convertDateTime($creditDate); + } + + /** + * @param string $estimatedCreditDate + */ + public function setEstimatedCreditDate($estimatedCreditDate) + { + $this->estimatedCreditDate = static::convertDateTime($estimatedCreditDate); + } + + /** + * @param string $confirmedDate + */ + public function setConfirmedDate($confirmedDate) + { + $this->confirmedDate = static::convertDateTime($confirmedDate); + } +} diff --git a/src/Entity/Subscription.php b/src/Entity/Subscription.php index 67bcd10..fa9ff2d 100644 --- a/src/Entity/Subscription.php +++ b/src/Entity/Subscription.php @@ -1,4 +1,5 @@ endDate = static::convertDateTime($endDate); } -} \ No newline at end of file +}