SDK para realizar transacciones por medio de Pagos360
-
-
Solicitud de Pago (
PaymentRequest
) -
Solicitud de Débito en CBU (
DebitRequest
) -
Adhesion en CBU (
Adhesion
) -
Solicitud de Débito en Tarjeta (
CardDebitRequest
) -
Adhesion en Tarjeta (
CardAdhesion
) -
Reporte de Cobranza (
CollectionReport
) -
Reporte de Reversiones (
ChargebackReport
) -
Reporte de Rendicion (
SettlementReport
) -
Cuenta (
Account
)
-
La instalación se debe hacer mediante Composer con el siguiente comando:
composer require pagos360/sdk-php
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.
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
.
$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);
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',
]);
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]);
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]);
$paymentRequest = $sdk->paymentRequests->get(179960);
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
);
}
$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);
$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]))
$debitRequest = $sdk->debitRequests->get(182760);
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
);
$originalDebitRequest = $sdk->debitRequests->get($debitRequestId);
$debitRequest = $sdk->debitRequests->cancel($originalDebitRequest);
$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);
$adhesion = $sdk->adhesions->get(25);
$adhesion = $sdk->adhesions->get(25);
$adhesion = $sdk->adhesions->cancel($adhesion);
$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);
$cardDebitRequest = $sdk->cardDebitRequests->get(652641);
$cardDebitRequest = $sdk->cardDebitRequests->get(652641);
$cardDebitRequest = $sdk->cardDebitRequests->cancel($cardDebitRequest);
$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);
$cardAdhesion = $sdk->cardAdhesions->get(1467);
$cardAdhesion = $sdk->cardAdhesions->get(1467);
$sdk->cardAdhesions->cancel($ad);
$collectionReport = $sdk->collectionReports->get(
new DateTimeImmutable('2018-11-29')
);
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();
}
$chargebackReport = $sdk->chargebackReports->get(
new DateTimeImmutable('2018-11-29')
);
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(),
);
}
$settlementReport = $sdk->settlementReports->get(
new DateTimeImmutable('2019-04-16')
);
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(),
);
}
$account = $sdk->account->get();
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.