- Composer
- PHP >=7.1
- PHP Extensions: curl | json | mbstring | dom
# Creamos la carpeta para el sdk
mkdir sdk
# Ingresamos a la carpeta
cd sdk
# Descomprimimos el SDK
unzip php-checkout-sdk.zip
# Instalamos las dependencias en /vendor
composer install
El primer paso es crear un PaymentRequest
que contiene toda la información del pago que queremos recibir:
<?php
// Importamos el SDK y las clases
require_once(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../checkoutApi.php');
// Instanciamos la clase NaranjaCheckout
// Utilizamos el CLIENT_ID y CLIENT_SECRET provistos por Naranja
// En 'ENVIRONMENT', para las pruebas usamos 'sandbox' y para nuestro entorno productivo 'production'
// Tener en cuenta que el CLIENT_ID y el CLIENT_SECRET son distintos para sandbox y para producción
$naranjaCheckout = new NaranjaCheckout('CLIENT_ID','CLIENT_SECRET','ENVIROMENT');
// Definimos el primer producto
$product1 = new Naranja\CheckoutApi\Model\ProductItem();
$product1->setName('Veggies');
$product1->setDescription('Granja del sol');
$product1->setQuantity(2);
// Definimos unit_price
$unitPrice1 = new Naranja\CheckoutApi\Model\Amount();
$unitPrice1->setCurrency('ARS');
$unitPrice1->setValue('115');
// Agregamos el unitPrice al producto
$product1-> setUnitPrice($unitPrice1);
// Definimos el segundo producto
$product2 = new Naranja\CheckoutApi\Model\ProductItem();
$product2->setName('Croquetas');
$product2->setDescription('Granja del sol');
$product2->setQuantity(1);
// Definimos el unit price del segundo producto
$unitPrice2 = new Naranja\CheckoutApi\Model\Amount();
$unitPrice2->setCurrency('ARS');
$unitPrice2->setValue('115');
// Agregamos el unitPrice al producto
$product2->setUnitPrice($unitPrice2);
// Definimos el objeto transaccion
$transaction = new Naranja\CheckoutApi\Model\Transaction();
// Definimos el Amount
$amountTransaction = new Naranja\CheckoutApi\Model\Amount();
$amountTransaction->setCurrency('ARS');
$amountTransaction->setValue('345');
// Agregamos el objeto amount a la transaccion
$transaction->setAmount($amountTransaction);
$transaction->setSoftDescriptor('GOFRIZ CONGELADOS');
$transaction->setProducts([$product1, $product2]);
// Generamos el payment request
$paymentRequest = new Naranja\CheckoutApi\Model\PaymentRequest();
$paymentRequest->setPaymentType('web_checkout');
$paymentRequest->setAuthorizationMode('SALE');
$paymentRequest->setExternalPaymentId('123456789');
$paymentRequest->setTransactions([$transaction]);
// Definimos el Requests creation redirect
$requestsCreationRedirect = new Naranja\CheckoutApi\Model\RequestCreationRedirect();
$requestsCreationRedirect->setSuccessUrl('https://gofriz.com.ar/success');
$requestsCreationRedirect->setFailureUrl('https://gofriz.com.ar/failure');
// Agregamos el requests redirect al paymenRequests
$paymentRequest->setRequestCreationRedirect($requestsCreationRedirect);
$paymentRequest->setCallbackUrl('https://gofriz.com.ar/notification');
// Ejecutamos el metodo
$response = $naranjaCheckout->createPaymentRequest($paymentRequest);
// Transformamos el JSON a datos nativo de PHP
$response = json_decode($response, true);
print_r($response['checkout_url'] . PHP_EOL);
Luego, para recibir las notificaciones, debemos implementar un endpoint que las reciba (que debe ser el mismo que especificamos en $paymentRequest->setCallbackUrl
):
<?php
// Importamos el SDK y las clases
require_once(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../checkoutApi.php');
// Instanciamos la clase de NaranjaCheckout
$naranjaCheckout = new NaranjaCheckout('CLIENT_ID','CLIENT_SECRET','ENVIROMENT');
// Las notificaciones sobre el pago llegan via POST
// Por lo tanto solo nos preocupamos por ese verbo http
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// El id del pago llega via request body
$body = json_decode(file_get_contents('php://input'), true);
// Solicitamos los detalles del pago
$payment = $naranjaCheckout->getPayment($body['id']);
// Mostrar los detalles del pago
$payment = $payment->__toString();
print_r($payment);
}
?>
Para probar el flujo de checkout, una vez en el webform te vamos a pedir que te loguees. Tenemos dos usuarios de prueba que podes usar para los distintos escenarios:
- Éxito: success@naranja-checkout-test.com
- Falla: failure@naranja-checkout-test.com
Para ambos, el password es
checkout123
class NaranjaCheckout(string $client_id, string $client_secret, string $environment);
- client_id: El id del cliente
- client_secret: El secreto del cliente
- environment: El ambiente que deseamos utilizar ( sandbox | prod )
Se utiliza para crear el paymentRequest
createPaymentRequest($paymentRequestInfo);
- paymentRequestInfo: Modelo instanciado de Naranja\CheckoutApi\Model\PaymentRequest
getPaymentRequest(string $id);
- id: ID del payment request a checkear
getPaymentByExternalId(string $external_payment_id);
- external_payment_id: ID externa configurada al crear el payment request
getPayment(string $id);
- id: ID del payment a checkear
Tipo de pago. Sólo permite "web_checkout".
Modo de autorización. Sólo permite "SALE".
Un id externo, para que el vendedor pueda identificar la venta.
Por más que haya una sola transacción debemos pasar un array.
Información adicional.
Representa los datos del vendedor
URLs a las cuales redirigir al usuario cuando termina el proceso del checkout.
URL a la cual enviar notficaciones sobre el estado de la transacción.
Representa un ítem en la compra.
Nombre del producto.
Descripción del producto.
Cantidad de productos adquiridos.
Precio unitario del producto.
Moneda en la cual se hizo la compra. Sólo admite "ARS".
Valor de la compra.
Monto total de la transacción.
Descripción con el cual queda registrado el consumo y como se ve en el resumen de cuenta.
Los productos de la compra. Los mismos son sólo a título informativo para el cliente.
Identificador de la tienda
Identificador del vendedor o comercio
Identificador del POS
Nombre del sistema del vendedor
Código de geolocalización
Datos discrecionales de la factura-ticket
La URL a la cual enviamos al cliente cuando la transacción fue exitosa.
La URL a la cual enviamos al cliente cuando la transacción falló.