<?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": "",
"forma_pago": 9
}
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. En caso que la forma de pago sea PIX se debe enviar el CPF o CPNJ | 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" inclusive si la forma de pago sea PIX. | 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 | Telefono del vendedor. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion | Dirección del vendedor. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion_referencia | Referencia de la dirección del vendedor. Si no tiene, debe enviarse el valor vacío. | |
compras_items.[0].vendedor_direccion_coordenadas | Coordenadas de la dirección del vendedor. 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 |
forma_pago | 9 | Forma de pago en la que se pagará el pedido creado |
{ "respuesta": true, "resultado": [ { "data": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd","pedido": "1750"} ] }
{ "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 | |
22 | Wepa | |
23 | Giros Claro | |
24 | Pago QR | |
25 | PIX |
sha1(Private_key + “FORMA-PAGO”)
{ "token": "cebe636c26b55ec95309260941f5a2c00be9b0b6", "token_publico": "98b97ce494801bf26575a5c4ff2d4f14" }
{
"respuesta": true,
"resultado": [
{
"forma_pago": "25",
"titulo": "PIX",
"descripcion": "PIX vía QR",
"monto_minimo": "1000",
"porcentaje_comision": "3.00"
},
{
"forma_pago": "24",
"titulo": "Pago QR",
"descripcion": "Pagá con la app de tu banco, financiera o cooperativa a través de un QR",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "18",
"titulo": "Zimple",
"descripcion": "Utilice sus fondos de Zimple",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "9",
"titulo": "Tarjetas de crédito",
"descripcion": "Acepta Visa, Mastercard, American Express, Cabal, Panal, Discover, Diners Club.",
"monto_minimo": "1000",
"porcentaje_comision": "6.82",
"pagos_internacionales": false
},
{
"forma_pago": "10",
"titulo": "Tigo Money",
"descripcion": "Utilice sus fondos de Tigo Money",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "11",
"titulo": "Transferencia Bancaria",
"descripcion": "Pago con transferencias bancarias. Los pagos se procesan de 08:30 a 17:30 hs.",
"monto_minimo": "1000",
"porcentaje_comision": "3.30"
},
{
"forma_pago": "12",
"titulo": "Billetera Personal",
"descripcion": "Utilice sus fondos de Billetera Personal",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "13",
"titulo": "Pago Móvil",
"descripcion": "Usando la App Pago Móvil / www.infonet.com.py",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "20",
"titulo": "Wally",
"descripcion": "Utilice sus fondos de Wally",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "23",
"titulo": "Giros Claro",
"descripcion": "Utilice sus fondos de Billetera Claro",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "22",
"titulo": "Wepa",
"descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "2",
"titulo": "Aqui Pago",
"descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "3",
"titulo": "Pago Express",
"descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
},
{
"forma_pago": "15",
"titulo": "Infonet Cobranzas",
"descripcion": "Acercándose a las bocas de pagos habilitadas luego de confirmar el pedido",
"monto_minimo": "1000",
"porcentaje_comision": "6.82"
}
]
}
{
"resultado": [
{
"pagado": true,
"numero_comprobante_interno": "8230473",
"ultimo_mensaje_error": null,
"forma_pago": "Tarjetas de crédito/débito",
"fecha_pago": "2023-06-07 09:11:49.52895",
"monto": "100000.00",
"fecha_maxima_pago": "2023-06-14 09:11:32",
"hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd",
"numero_pedido": "1746",
"cancelado": false,
"forma_pago_identificador": "1",
"token": "9c2ed973536395bf3f91c43ffa925bacadcf58e5"
}
],
"respuesta": true
}
[
{
"pagado": true,
"numero_comprobante_interno": "8230473",
"ultimo_mensaje_error": null,
"forma_pago": "Tarjetas de crédito/débito",
"fecha_pago": "2023-06-07 09:11:49.52895",
"monto": "100000.00",
"fecha_maxima_pago": "2023-06-14 09:11:32",
"hash_pedido": "ad57c9c94f745fdd9bc9093bb409297607264af1a904e6300e71c24f15d618fd",
"numero_pedido": "1746",
"cancelado": false,
"forma_pago_identificador": "1",
"token": "9c2ed973536395bf3f91c43ffa925bacadcf58e5"
}
]
{
"resultado": [
{
"pagado": false,
"numero_comprobante_interno": "8230473",
"ultimo_mensaje_error": null,
"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": false,
"numero_comprobante_interno": "8230473",
"ultimo_mensaje_error": null,
"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,
"numero_comprobante_interno": "8230473",
"ultimo_mensaje_error": null,
"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
}
<?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",
"mensaje_resultado_pago": {
"titulo": "Pedido pendiente de pago",
"descripcion": "<ul><li> Eligió pagar con Pago Express, recuerde que tiene hasta las
02:09:37 del 05/01/2018 para pagar.</li><li> Debe ir a boca de cobranza de Pago Express,
decir que quiere pagar el comercio <strong>Pagopar</strong>, mencionando su cédula <strong>
0</strong> o número de pedido <strong>1.750</strong>.</li></ul>" } } ] }