<?php sha1($datos['comercio_token_privado'] . $idPedido . strval(floatval($j['monto_total']))); ?>
{ "token": "fbe4586135e7f482d6c8ad624413139b9c90825f", "comprador": { "ruc": "4247903-7", "email": "fernandogoetz@gmail.com", "ciudad": null, "nombre": "Rudolph Goetz", "telefono": "0972200046", "direccion": "", "documento": "4247903", "coordenadas": "", "razon_social": "Rudolph Goetz", "tipo_documento": "CI", "direccion_referencia": null }, "public_key": "98b97ce494801bf26575a5c4ff2d4f14", "monto_total": 100000, "tipo_pedido": "VENTA-COMERCIO", "compras_items": [ { "ciudad": "1", "nombre": "Ticket virtual a evento Ejemplo 2017", "cantidad": 1, "categoria": "909", "public_key": "98b97ce494801bf26575a5c4ff2d4f14", "url_imagen": "http://www.example.com/d7/wordpress/wp-content/uploads/2017/10/ticket.png", "descripcion": "Ticket virtual a evento Ejemplo 2017", "id_producto": 895, "precio_total": 100000, "vendedor_telefono": "", "vendedor_direccion": "", "vendedor_direccion_referencia": "", "vendedor_direccion_coordenadas": "" } ], "fecha_maxima_pago": "2018-01-04 14:14:48", "id_pedido_comercio": "1134", "descripcion_resumen": "" }
Campo | Descripción | Ejemplo |
token | Se genera de la siguiente forma: sha1($datos['comercio_token_privado'] . $idPedido . strval(floatval($j['monto_total']))); | fbe4586135e7f482d6c8ad624413139b9c90825f |
comprador.ruc | Ruc del comprador. El campo debe estar presente, si no tiene ruc, debe ir con el valor vacío ("") | 4247903-7 |
comprador.email | E-mail del comprador. Campo obligatorio. | fernandogoetz@gmail.com |
comprador.ciudad | Si no está utilizando los servicios de couriers ofrecidos por pagopar (Sólo para productos físicos), debe enviar de todas formas el campo con el valor 1. De lo contrario utilizar la documentación de integración de couriers para obtener el ID de ciudad | 1 |
comprador.nombre | Nombre del comprador. Campo obligatorio. | Rudolph Goetz |
comprador.telefono | Número de teléfono en formato internacional. | +595972200046 |
comprador.direccion | Dirección del comprador. El campo debe estar presente, si no tiene dirección, enviar el valor vacío (""). | |
comprador.documento | Número de cédula. Campo obligatorio. | 4247903 |
comprador.coordenadas | Coordenadas de la dirección del comprador, si no tiene, enviar con el valor vacío. | |
comprador.razon_social | Razón social del comprador, si no tiene, enviar el campo con el valor vacío. | |
comprador.tipo_documento | Tipo de documento del comprador, por el momento siempre debe enviarse el valor "CI". | CI |
comprador.direccion_referencia | Referencia de la dirección del comprador. El campo debe estar presente, si no tiene referencia, enviar vacío. | |
public_key | Clave publica obtenida desde Pagopar.com en el apartado "Integrar con mi sitio web" | 98b97ce494801bf26575a5c4ff2d4f14 |
monto_total | Monto total que se va a transaccionar, en guaranies (PYG). | 100000 |
tipo_pedido | Si se trata de una transacción simple, debe enviarse el valor "VENTA-COMERCIO". Si es split billing "COMERCIO-HEREDADO". | VENTA-COMERCIO |
compras_items.[0].ciudad | La ciudad del comprador, si no tiene, enviar el valor 1. | 1 |
compras_items.[0].nombre | Nombre del producto o servicio que se está comprando. Obligatorio. | Ticket virtual a evento Ejemplo 2017 |
compras_items.[0].cantidad | Cantidad del producto que se está comprando, solo con fines informativos. | 1 |
compras_items.[0].categoria | Si no está utilizando los servicios de couriers ofrecidos por pagopar (Sólo para productos físicos), debe enviar de todas formas el campo con el valor 909. De lo contrario utilizar la documentación de integración de couriers para obtener el ID de la categoría | 909 |
compras_items.[0].public_key | Clave publica del vendedor, si no es una transacción split billing, será el mismo valor que el campo public_key. | 98b97ce494801bf26575a5c4ff2d4f14 |
compras_items.[0].url_imagen | URL de la imagen del producto. Si no tiene imagen, enviar el campo con el valor vacío. | |
compras_items.[0].descripcion | Descripción del producto que se está comprando. | Ticket virtual a evento Ejemplo 2017 |
compras_items.[0].id_producto | Identificador del producto/servicio que se está comprando. | 895 |
compras_items.[0].precio_total | Precio total del producto/servicio que se está comprando (No es el precio unitario, sino el precio total agrupado por producto) | 100000 |
compras_items.[0].vendedor_telefono | Vendedor del comprador. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion | Dirección del comprador. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion_referencia | Referencia de la dirección del comprador. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion_coordenadas | Coordenadas de la dirección del comprador. Si no tiene, debe enviarse el valor vacío. | |
fecha_maxima_pago | Es la fecha máxima que tiene el comprador para pagar el pedido, una vez que llegue a la fecha establecida, el pedido automáticamente se cancela y ya no puede pagarse. | 2018-01-04 14:14:48 |
id_pedido_comercio | ID del pedido/transacción del comercio. Debe ser único tanto en entorno de Desarrollo y Producción. Alfanumérico. | 1134 |
descripcion_resumen | Descripción breve del pedido, puede coincidir con el valor de compras_items.[0].nombre o enviar con el valor vacío. | Ticket virtual a evento Ejemplo 2017 |
{ "respuesta": true, "resultado": [ { "data": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd" } ] }
{ "respuesta": false,"resultado": "Token no coincide."
}
<?php header('Location: https://www.pagopar.com/pagos/ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd'); exit(); ?>
https://www.pagopar.com/pagos/$hash?forma_pago=' + idFormaPago;
11 | Transferencia Bancaria | |
18 | Zimple | |
20 | Wally |
sha1(Private_key + “FORMA-PAGO”)
{ "token": "cebe636c26b55ec95309260941f5a2c00be9b0b6", "token_publico": "98b97ce494801bf26575a5c4ff2d4f14" }
{ "respuesta": true, "resultado": [ { "forma_pago": "9", "titulo": "Bancard - Tarjetas de crédito", "descripcion": "Acepta Visa, Mastercard, American Express, Discover, Diners Club y Credifielco.", "monto_minimo": "1000" }, { "forma_pago": "1", "titulo": "Procard - Tarjetas de crédito", "descripcion": "Acepta Visa, Mastercard, Credicard y Unica. (Acepta pagos internacionales)", "monto_minimo": "1000" }, { "forma_pago": "2", "titulo": "Aqui Pago", "descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido", "monto_minimo": "55000" }, { "forma_pago": "3", "titulo": "Pago Express", "descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido", "monto_minimo": "80000" }, { "forma_pago": "4", "titulo": "Practipago", "descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido", "monto_minimo": "50000" }, { "forma_pago": "7", "titulo": "Cuenta Bancaria", "descripcion": "Home Banking", "monto_minimo": "50000" }, { "forma_pago": "10", "titulo": "Tigo Money", "descripcion": "Utilice sus fondos de Tigo Money", "monto_minimo": "1000" } ] }
{ "resultado": [ { "pagado": true, "forma_pago": "Tarjetas de crédito/débito", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-04 23:40:36", "hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd", "numero_pedido": "1746", "cancelado": false, "forma_pago_identificador": "1", "token": "aec22cacc0415f067f0da57ce5148085b36cd067" } ], "respuesta": true }
[ { "pagado": true, "forma_pago": "Tarjetas de crédito/débito", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-04 23:40:36", "hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd", "numero_pedido": "1746", "cancelado": false, "forma_pago_identificador": "1", "token": "aec22cacc0415f067f0da57ce5148085b36cd067" } ]
{ "resultado": [ { "pagado": false, "forma_pago": "Tarjetas de crédito/débito", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-04 23:40:36", "hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd", "numero_pedido": "1746", "cancelado": false, "forma_pago_identificador": "1", "token": "aec22cacc0415f067f0da57ce5148085b36cd067" } ], "respuesta": true }
{ "resultado": [ { "pagado": false, "forma_pago": "Pagoexpress", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-04 23:40:36", "hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd", "numero_pedido": "1746", "cancelado": false, "forma_pago_identificador": "3", "token": "aec22cacc0415f067f0da57ce5148085b36cd067" } ], "respuesta": true }
[ { "pagado": false, "forma_pago": "Tarjetas de crédito/débito", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-04 23:40:36", "hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd", "numero_pedido": "1746", "cancelado": false, "forma_pago_identificador": "1", "token": "aec22cacc0415f067f0da57ce5148085b36cd067" } ]
<?php $rawInput = file_get_contents('php://input');
$json_pagopar = json_decode($rawInput, true);
global $wpdb;
#Obtenemos el ID de Pedido
$order_db = $wpdb->get_results($wpdb->prepare( "SELECT id FROM wp_transactions_pagopar WHERE hash = %s ORDER BY id DESC LIMIT 1", $json_pagopar['resultado'][0]['hash_pedido']));
#Obtenemos key privado
$db = new DBPagopar(DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, "wp_transactions_pagopar");
$pedidoPagopar = new Pagopar(null, $db, $origin_pagopar);
$payments = WC()->payment_gateways->payment_gateways();
# Si coinciden los token, esta validación es extrictamente obligatoria para evitar el uso malisioso de este endpoint
if (sha1($payments['pagopar']->settings['private_key'] . $json_pagopar['resultado'][0]['hash_pedido']) === $json_pagopar['resultado'][0]['token']) {
# Marcamos como pagado en caso de que ya se haya pagado
if (isset($order_db[0]->id)) {
if ($json_pagopar['resultado'][0]['pagado'] === true) {
$order_id = $order_db[0]->id;
global $woocommerce;
$customer_order = new WC_Order((int) $order_id);
// Marcamos el pedido como Pagado
$customer_order->payment_complete();
$customer_order->update_status('completed', 'Pedido Completado/Pagado.');
} elseif ($json_pagopar['resultado'][0]['pagado'] === false) {
// Marcamos el pedido como Pendiente
}
}
} else {
echo 'Token no coincide';
return '';
}
echo json_encode($json_pagopar['resultado']);
?>
{ "hash_pedido": "b1d98a906be9d0dc6956ead8642e0d6393abe9a6fd2743663109aa90e4d73e59", "token": "cebe636c26b55ec95309260941f5a2c00be9b0b6", "token_publico": "98b97ce494801bf26575a5c4ff2d4f14" }
{ "respuesta": true, "resultado": [ { "pagado": false, "forma_pago": "Pago Express", "fecha_pago": null, "monto": "100000.00", "fecha_maxima_pago": "2018-01-05 02:09:37", "hash_pedido": "b1d98a906be9d0dc6956ead8642e0d6393abe9a6fd2743663109aa90e4d73e59", "numero_pedido": "1750", "cancelado": true, "forma_pago_identificador": "3", "token": "fa443e1b63c7a51bd14732ed22098c62b7ebb4dd" } ] }