pagos360/sdk-php

SDK for integrating to Pagos360.com

v1.0.7 2021-12-28 18:55 UTC

README

SDK para realizar transacciones por medio de Pagos360

Instalación

La instalación se debe hacer mediante Composer con el siguiente comando:

composer require pagos360/sdk-php

Introducción

Este SDK actúa de forma similar a un ORM, usando un diseño similar a los repositorios para generar objetos nativos en base de las respuestas JSON de la API.

Si bien el objetivo del SDK es simplificar el proceso de integración, no es un reemplazo de la Documentación para Desarrolladores.

Inicialización

Para empezar a utilizar el SDK desde su código, se provee una clase \Pagos360\Sdk, la cual toma como único parámetro una API KEY generada desde el menú de Integraciones desde el portal web de Pagos360.

$sdk = new \Pagos360\Sdk('API_KEY_VALUE');

O si tenes una variable de entorno configurada

$sdk = new \Pagos360\Sdk(getenv('API_KEY_VAR_NAME'));

Para comprobar que la API KEY esté configurada correctamente, se puede utilizar el repositorio de cuenta.

$account = $sdk->account->get();
var_dump($account);

En caso que todo sea correcto, $account debería ser una instancia de la clase \Pagos360\Models\Account.

Modelos

Solicitud de Pago

Conceptos generales

Crear

Documentación

$paymentRequest = new \Pagos360\Models\PaymentRequest();
$paymentRequest
    ->setFirstTotal(13.53)
    ->setFirstDueDate(new DateTimeImmutable('tomorrow'))
    ->setDescription('Creada por SDK')
    ->setPayerName('Matias Pino')
;

$paymentRequest = $sdk->paymentRequests->create($paymentRequest);

Excluir canales

Para facilitar la exclusión de canales, se proveen constantes dentro de la clase \Pagos360\Constants. Como la plataforma de Pagos360 se encuentra en desarrollo activo, es probable que en el futuro se agreguen más tipos de canales que aun no estén soportados en el SDK. En ese caso, se puede usar una string representando el nuevo valor.

$paymentRequest->setExcludedChannels([
    \Pagos360\Constants::CHANNEL_CREDIT_CARD,
    'tipo_de_canal_nuevo',
]);

Excluir cuotas

Números de las cuotas que serán omitidas de las opciones al pagador (Solo aplica para el medio de pago Tarjeta de Crédito).

$paymentRequest->setExcludedInstallments([1, 3, 6]);

Excluir marcas de tarjetas

Códigos de las tarjetas que serán omitdas de las opciones al pagador. Valores posibles: campo code del endpoint Obtener Planes y Cuotas (Solo aplica para el medio de pago Tarjeta de Crédito).

$paymentRequest->setExcludedCardBrands([1, 5, 10]);

Buscar por id

Documentación

$paymentRequest = $sdk->paymentRequests->get(179960);

Resultados

Documentación

Los resultados de una Solicitud de Pago estan encapsulados en un objeto de tipo \Doctrine\Common\Collections\ArrayCollection, el cual contiene una colección de instancias del modelo \Pagos360\Models\Result. En caso que la solicitud no tenga ningun resultado, este metodo devolvera null.

$paymentRequest = $sdk->paymentRequests->get(234741);

$collectedResult = $sdk->paymentRequests->findCollectedResult($paymentRequest);
echo sprintf(
    'Solicitud de Pago %s pagada mediante %s. Monto: $%s.%s',
    $paymentRequest->getId(),
    $collectedResult->getChannel(),
    $collectedResult->getAmount(),
    PHP_EOL
);

$metadata = $collectedResult->getPaymentMetadata();
if (!empty($metadata)) {
    echo sprintf(
        'Pagada con tarjeta terminada en %s. Cuotas: %s ($%s).%s',
        $metadata->getCardLastFourDigits(),
        $metadata->getInstallments(),
        $metadata->getInstallmentAmount(),
        PHP_EOL
    );
}

Funciones de utilidad

Verificar que la solicitud haya sido pagada

$paymentRequest = $sdk->paymentRequests->get(179960);
$isPaid = $sdk->paymentRequests->isPaid($paymentRequest);

Alternativamente, se puede usar esta funcion que tira una excepcion en caso que no haya sigo pagada.

$paymentRequest = $sdk->paymentRequests->get(179960);
$sdk->paymentRequests->assertIsPaid($paymentRequest);

Solicitud de Débito en CBU

Conceptos generales

Crear

Documentación

$request = new \Pagos360\Models\DebitRequest();
$request
    ->setAdhesion($adhesion)
    ->setFirstDueDate(new DateTimeImmutable('+1 month'))
    ->setFirstTotal(13.53)
;

$sdk->debitRequests->create($request);

Si bien es recomendable obtener la adhesion y verificar que siga en el estado firmada, es posible generar un mock de una Adhesion de la siguiente forma:

$request->setAdhesion(new \Pagos360\Models\Adhesion(['id' => 25]))

Buscar por id

Documentación

$debitRequest = $sdk->debitRequests->get(182760);

Resultados

Documentación

Los resultados de una Solicitud de Débito estan encapsulados en un objeto de tipo \Doctrine\Common\Collections\ArrayCollection, el cual contiene una colección de instancias del modelo Result. En caso que la solicitud no tenga ningun resultado, este metodo devolvera null.

$debitRequest = $sdk->debitRequests->get(185027);

$collectedResult = $sdk->debitRequests->findCollectedResult($debitRequest);
echo sprintf(
    'Solicitud de Debito %s pagada. Monto: $%s.%s',
    $paymentRequest->getId(),
    $collectedResult->getAmount(),
    PHP_EOL
);

Cancelar

Documentación

$originalDebitRequest = $sdk->debitRequests->get($debitRequestId);
$debitRequest = $sdk->debitRequests->cancel($originalDebitRequest);

Adhesion en CBU

Conceptos generales

Crear

Documentación

$adhesion = new \Pagos360\Models\Adhesion();
$adhesion
    ->setAdhesionHolderName('Matias Pino')
    ->setExternalReference('8354')
    ->setCbuNumber('0000000000000000000000')
    ->setCbuHolderIdNumber(11111111)
    ->setCbuHolderName('Matias Pino')
    ->setEmail('pagos360@example.com')
    ->setDescription('Creada por SDK')
    ->setShortDescription('P360')
;

$adhesion = $sdk->adhesions->create($adhesion);

Buscar por id

Documentación

$adhesion = $sdk->adhesions->get(25);

Cancelar

Documentación

$adhesion = $sdk->adhesions->get(25);
$adhesion = $sdk->adhesions->cancel($adhesion);

Solicitud de Débito en Tarjeta

Crear

Documentación

$cardAdhesion = $sdk->cardAdhesions->get(1488);

$cardDebitRequest = new \Pagos360\Models\CardDebitRequest();
$cardDebitRequest
    ->setCardAdhesion($cardAdhesion)
    ->setMonth(4)
    ->setYear(2021)
    ->setAmount(13.53)
;
$cardDebitRequest = $sdk->cardDebitRequests->create($cardDebitRequest);

Buscar por id

Documentación

$cardDebitRequest = $sdk->cardDebitRequests->get(652641);

Resultados

Cancelar

Documentación

$cardDebitRequest = $sdk->cardDebitRequests->get(652641);
$cardDebitRequest = $sdk->cardDebitRequests->cancel($cardDebitRequest);

Adhesion en Tarjeta

Crear

Documentación

$cardAdhesion = new \Pagos360\Models\CardAdhesion();
$cardAdhesion
    ->setAdhesionHolderName('Matias Pino')
    ->setEmail('pagos360@example.com')
    ->setDescription('Creada por SDK')
    ->setExternalReference('210000013847')
    ->setCardNumber()
    ->setCardHolderName('Matias Pino')
;
$cardAdhesion = $sdk->cardAdhesions->create($cardAdhesion);

Buscar por id

Documentación

$cardAdhesion = $sdk->cardAdhesions->get(1467);

Cancelar

Documentación

$cardAdhesion = $sdk->cardAdhesions->get(1467);
$sdk->cardAdhesions->cancel($ad);

Reporte de Cobranza

Buscar por fecha

Documentación

$collectionReport = $sdk->collectionReports->get(
    new DateTimeImmutable('2018-11-29')
);

Datos

Documentación

Los datos de un Reporte de Cobranza estan encapsulados en un objeto de tipo \Doctrine\Common\Collections\ArrayCollection, el cual contiene una colección de instancias del modelo \Pagos360\Models\CollectionData.

foreach ($collectionReport->getData() as $data) {
    /** @var \Pagos360\Models\CollectionData $data */
    $paymentDate = $data->getPaymentDate();
}

Reporte de Reversiones

Buscar por fecha

Documentación

$chargebackReport = $sdk->chargebackReports->get(
    new DateTimeImmutable('2018-11-29')
);

Datos

Los datos de un Reporte de Cobranza estan encapsulados en un objeto de tipo \Doctrine\Common\Collections\ArrayCollection, el cual contiene una colección de instancias del modelo \Pagos360\Models\ChargebackData.

foreach ($chargebackReport->getData() as $data) {
   /** @var \Pagos360\Models\ChargebackData $data */
       $requestId = $data->getRequestId(),
   );
}

Reporte de Rendicion

Buscar por fecha

Documentación

$settlementReport = $sdk->settlementReports->get(
    new DateTimeImmutable('2019-04-16')
);

Datos

Documentación

Los datos de un Reporte de Cobranza estan encapsulados en un objeto de tipo \Doctrine\Common\Collections\ArrayCollection, el cual contiene una colección de instancias del modelo \Pagos360\Models\SettlementData.

foreach ($settlementReport->getData() as $data) {
   /** @var \Pagos360\Models\SettlementData $data */
       $requestId = $data->getRequestId(),
   );
}

Cuenta

Conceptos generales

Obtener

Documentación

$account = $sdk->account->get();

Otros

Logs

La clase SDK, RestClient, y los repositorios implementan la interfaz LoggerAwareInterface del PSR-3.

$logger = new \Monolog\Logger('Pagos360 SDK');
$logger->pushHandler(new \Monolog\Handler\StreamHandler(STDOUT));

$sdk->setLogger($logger);

En caso de querer usar distintos loggers para las distintas partes, se puede especificar de la siguiente forma:

$restClientLogger = new \Monolog\Logger('Pagos360 RestClient');
$sdk->getRestClient()->setLogger($restClientLogger);

$paymentRequestLogger = new \Monolog\Logger('Pagos360 PaymentRequest');
$sdk->paymentRequests->setLogger($paymentRequestLogger);

Tambien existe el metodo setLoggerAndPropagate en el SDK que replica el logger al RestClient y todos los repositorios.

$logger = new \Monolog\Logger('Pagos360 SDK');
$logger->pushHandler(new \Monolog\Handler\StreamHandler(STDOUT));

$sdk->setLoggerAndPropagate($logger);

En estos ejemplos se usa la libreria Monolog, pero se puede usar cualquier libreria que implemente los metodos declarados en LoggerInterface de dicho PSR.