Bancard S.A. es una empresa de apoyo al sector financiero, cuyos accionistas y clientes son las más importantes instituciones financieras del país, entre ellas Bancos Internacionales, Regionales y Nacionales, además de Financieras, Cooperativas y Procesadoras de tarjetas de crédito.
Implementacion en PHP para consumir el servicio de eCommerce de Bancard o VPOS.
Este cliente fue desarrollado con el fin de ser 100% agnóstico.
¿Esto que significa?
No utilíza librerías externas para realizar llamadas al api de bancard. No depende de ninguna base de datos.
La idea detrás de esto es hacer algo que se pueda implemetar en cualquier proyecto PHP.
En conclusión solo se encarga de cosumir los servicios de bancard y la persistencia de datos depende del gusto del desarrollador.
El cliente esta hecho (o trata al menos) siguiendo las recomendaciones de http://www.php-fig.org/psr/ especificamente:
- PSR-1
- PSR-2
- PSR-4
- SingleBuy.
- SingleBuy rollback.
- Preautorizacion.
- Preautorizacion rollback.
- Preautorizacion confirm.
- Preautorizacion abort.
- Preautorizacion confirm rollback.
A pedido del público 👍 un ejemplo.
-
Configurar el archivo de configuracion en Bancard/Core/Config.php (si hubiera necesidad).
-
Iniciar el flujo de compra
require_once(__DIR__ . '/../Bancard/autoload.php');
$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);
$id = $redis->incr("Bancard:Bancard:shop_process_id");
$amount = number_format($_POST['amount'], 2, ".", "");
$data = [
'shop_process_id' => $id,
'amount' => $amount,
'currency' => 'PYG',
'additional_data' => '',
'description' => $_POST['description']
// Optional: sobre escribir variables.
// 'private_key' => "##########",
// 'public_key' => "##########",
// 'return_url' => "http://example.com/thankyou?id={$id}",
// 'cancel_url' => "http://example.com/cancel?id={$id}"
];
if ($_POST['sandbox']) {
$env = Bancard\Bancard\Core\Environments\Environments::STAGING_URL;
} else {
$env = Bancard\Bancard\Core\Environments\Environments::PRODUCTION_URL;
}
try {
$singlebuy = Bancard\Bancard\Operations\SingleBuy\SingleBuy::init($data, $env)->send();
} catch (Exception $e) {
die($e->getMessage());
}
header("Location: " . $singlebuy->redirect_to;
die();
- En la página de bancard configurar cual es el endpoint en nuestro sitio con el cual confirmaremos la transacción. Este paso no tiene nada que ver con el cliente, pero sí con el flujo de pago, más información en la documentación de bancard. A modo informativo dejo un ejemplo.
Ej.: https://example.com/confirm
if ($_SERVER['REQUEST_METHOD'] != "POST") {
http_response_code(403);
exit;
}
try {
$post = json_decode(file_get_contents('php://input'));
} catch (Exception $e) {
http_response_code(403);
exit;
}
if (empty($post)) {
http_response_code(403);
exit;
}
$transaction = get_transaction_automagically($post->operation->shop_process_id);
$amount = number_format($transaction->amount, 2, ".", "");
if ($amount !== $post->operation->amount) {
http_response_code(403);
exit;
}
// Hacer algo con esta info
$transaction->complete($post->operation);
http_response_code(200);
header('Content-type: application/json');
echo json_encode([
"status" => "success",
"message" => "Su pago ha sido procesado",
"developer_message" => "Operation confirmed"]);
exit;
-
Bancard redirige a la página que configuramos en
return_url
. -
Bancard en el caso que un usuario haya dado click en el boton de cancelar, retorna al cancel_url, ningun misterio ahí.
-
Rollbacks.
include_once('bancard/Bancard/autoload.php');
$transaction = get_transaction_automagically($_GET['id']);
$data = [
'shop_process_id' => $transaction->id,
// Optional: override variables.
// 'private_key' => "##########",
// 'public_key' => "##########"
];
if ($_POST['sandbox']) {
$env = Bancard\Bancard\Core\Environments::STAGING_URL;
} else {
$env = Bancard\Bancard\Core\Environments::PRODUCTION_URL;
}
try {
$rollback = Bancard\Bancard\Operations\SingleBuy\Rollback::init($data, $env)->send();
} catch (Exception $e) {
die($e->getMessage());
}
var_dump($rollback);
// Hacer algo con esta info.
$transaction->rollback($rollback);
exit;
- Llevauno (solo sandbox para las operaciones de pre autorización)
- Woocommerce, plugin desarrollado para integrar pagos de bancard utilizando la operación SingleBuy. El plugin está a la venta. 😜
Los PR son bienvenidos, ademas de las cervezas, asados, picadas y/o similares.
Ignacio Rojas 😎
- La completamente inútil web: http://imroca.com
- Email <[email protected]>
- Twitter: @iMalignus
Cualquier duda a las ordenes.