Servicio de pagos

Introducción

Esta API le permite depositar dinero en la cuenta bancaria de un cliente. El depósito siempre será realizado en moneda local.
https://payouts.paygol.com/api/v1

Firma del mensaje

Todas las solicitudes a la API de pago deben firmarse utilizando la clave secreta del comerciante con el algoritmo HMAC SHA256. La firma debe calcularse utilizando la carga útil de la solicitud, ordenada en orden ascendente y agregando este resultado en un encabezado de solicitud con el nombre X-PG-SIG.
<?php 

/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

$payload = [...];

ksort($payload, SORT_NATURAL | SORT_FLAG_CASE);

$signature = hash_hmac('sha256', json_encode($payload), $shared_secret);

Obtener un token de autorización

POST /auth/token
<?php 

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

$payload = json_encode(['pg_serviceid' => $service_id]);

$signature = hash_hmac("sha256", $payload, $shared_secret);

// API URL
$url = 'https://payouts.paygol.com/api/v1/auth/token';

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-type: application/json',
            'X-PG-SIG: ' . $signature,
        ],
        'content' => $payload,
    ],
];

$context = @stream_context_create($opts);

$json_response = @file_get_contents($url, false, $context);

$result = json_decode($json_response, true);

$token = $result['token'];

Solicitar pagos

Descripción de parámetros
Parámetro Tipo Descripción Requerido
pg_serviceid Integer Service ID del Merchant requerido
pg_token String Un token de autenticación válido requerido
payouts Array Arreglo de objetos Payout (max. 1500) requerido
payout Payout object Objeto Payout requerido
beneficiary Beneficiary object Objeto Beneficiary requerido
account Account object Objeto Account requerido
Objeto Payout
Parámetro Tipo Descripción Requerido
id String (Max. 64 chars) Merchan payout ID único requerido
country String (2 chars) Código de país del cliente. Código ISO 3166-1 alpha-2 requerido
currency String (3 chars) Código ISO 4217 requerido
amount Decimal (max. 2 decimal numbers) Monto del pago (en la moneda correspondiente a lo ingresado en “currency”) requerido
beneficiary Beneficiary object Objeto Beneficiary requerido
account Account object Objeto Account requerido
details String (max. 255 chars) Información opcional opcional
Objeto Beneficiary
Parámetro Tipo Descripción Requerido
type String person | company requerido
full_name String (Max. 128 chars) Nombre completo del benficiario requerido
first_name String (Max. 32 chars) Nombre del beneficiario requerido para beneficiario de tipo person
last_name String (Max. 32 chars) Apellido del beneficiario requerido para beneficiario de tipo person
surname String (Max. 32 chars) Apellido materno beneficiario opcional
document_type String Tipo de documento de identificación del beneficiario. Ver tipos de documentos requerido
document_number String (Max. 32 chars) Número de documento de identificación del beneficiario. requerido
document_dv String (Max. 2 chars) Dígito de verificación requerido
email String (Max. 128 chars) Dirección de correo del beneficiario opcional
Objeto Account
Parámetro Tipo Descripción Requerido
bank_code String (5 chars) Código del banco. Ver Códigos bancarios requerido
bank_name String (max. 32 chars) Nombre del banco. Ver Nombre de bancos opcional
number String (max. 64 chars) Número cuenta bancaria requerido
type String (5 chars) Tipo de cuenta. Ver tipos de cuentas requerido
POST /payouts
<?php 

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

// Get an authentication access token
$token = '302ec9c75bf9390db75959e2eded9ae3f5cdb7c1';

// Unique merchant payout ID
$uniqueid = $service_id . '-' . rand(10000, 99999);

$payload = [
    'pg_mode' => 'strict',
    'pg_serviceid' => $service_id,
    'pg_token' => $token,
    'payouts' => [
        [
            'id' => $uniqueid,
            'country' => 'CL',
            'amount' => 1000000.00,
            'currency' => 'CLP',
            'beneficiary' => [
                'type' => 'person',
                'full_name' => 'Robert Pani Hernandez',
                'first_name' => 'Robert',
                'last_name' => 'Pani',
                'surname' => 'Hernandez',
                'document_type' => 'cl_rut',
                'document_number' => '14555555',
                'document_dv' => '4',
                'email' => '[email protected]',
            ],
            'account' => [
                'bank_code' => 'CL001',
                'number' => '002555-343456',
                'type' => 'FP001',
            ],
            'details' => 'Debt payment',
        ],
    ],
];

// sort payload
ksort($payload, SORT_NATURAL | SORT_FLAG_CASE);

$payload = json_encode($payload);

$signature = hash_hmac("sha256", $payload, $shared_secret);

// API URL
$url = 'https://payouts.paygol.com/api/payouts';

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-type: application/json',
            'X-PG-SIG: ' . $signature,
        ],
        'content' => $payload,
    ],
];

$context = @stream_context_create($opts);

$json_response = @file_get_contents($url, false, $context);

Respuesta
{
  "data": {
    "mode": "strict",
    "inserted_rows": 1,
    "error_rows": 0,
    "mode": "strict",
    "payouts": [{
      "payout_id": "pay_5d711e7f6b9598-37174324",
      "country": "CL",
      "amount": 1000000.00,
      "currency": "CLP",
      "external_id": "merchant-id-5d711e7ec9525666850",
      "full_name": "Robert Pani Hernandez",
      "first_name": "Robert",
      "last_name": "Pani",
      "surname": "Hernandez",
      "document_type": "cl_rut",
      "document_number": "14555555",
      "document_dv": "4",
      "email": "[email protected]",
      "bank_code": "CL001",
      "account_type": "FP001",
      "account_number": "002555-343456",
      "details": "Pago remuneracion USD",
      "status": "created"
    }]
  },
  "result": 0
}

Comprobar estado

Comprobar el estado de un pago
Parámetro Tipo Descripción Requerido
pg_serviceid Integer Service ID del merchant requerido
pg_token String Un token de autenticación válido requerido
external_id String (max. 64 chars) Merchant Payout ID requerido
POST /payouts/status
<?php 

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

// Get an authentication access token
$token = '302ec9c75bf9390db75959e2eded9ae3f5cdb7c1';

$payload = [
    'pg_serviceid' => $service_id,
    'pg_token' => $token,
    'external_id' => 'merchant-id-859649'
];

// sort payload
ksort($payload, SORT_NATURAL | SORT_FLAG_CASE);

$payload = json_encode($payload);

$signature = hash_hmac("sha256", $payload, $shared_secret);

// API URL
$url = 'https://payouts.paygol.com/api/payouts/status';

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-type: application/json',
            'X-PG-SIG: ' . $signature,
        ],
        'content' => $payload,
    ],
];

$context = @stream_context_create($opts);

$json_response = @file_get_contents($url, false, $context);

Respuesta
{
  "data": {
    "country": "CL",
    "amount": 1000000,
    "currency": "CLP",
    "merchant_payout_id": "merchant-id-859649",
    "pay_at": null,
    "full_name": "Robert Pani Hernandez",
    "first_name": "Robert",
    "last_name": "Pani",
    "surname": "Hernandez",
    "document_type": "cl_rut",
    "document_number": "14555555",
    "document_dv": "4",
    "email": "[email protected]",
    "bank_code": "CL001",
    "account_number": "002555-343456",
    "account_type": "FP001",
    "details": "Debt payment",
    "status": "created",
    "events": []
  },
  "result": 0
}

Obtener pagos

Obtener el listado de pagos
Parámetro Tipo Descripción Requerido
pg_serviceid Integer Service ID del merchant requerido
pg_token String Un token de autenticación válido requerido
status String Un estado de transacción válido. Ver tabla de estados opcional
limit Integer > 0 Número máximo de resultados (default 50) opcional
page Integer > 0 Página (default 1) opcional
POST /payouts/list
<?php 

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

// Get an authentication access token
$token = '302ec9c75bf9390db75959e2eded9ae3f5cdb7c1';

$payload = [
    'pg_serviceid' => $service_id,
    'pg_token' => $token,
    'status' => 'created',
    'limit' => 5,
    'page' => 2
];

// sort payload
ksort($payload, SORT_NATURAL | SORT_FLAG_CASE);

$payload = json_encode($payload);

$signature = hash_hmac("sha256", $payload, $shared_secret);

// API URL
$url = 'https://payouts.paygol.com/api/payouts/list';

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-type: application/json',
            'X-PG-SIG: ' . $signature,
        ],
        'content' => $payload,
    ],
];

$context = @stream_context_create($opts);

$json_response = @file_get_contents($url, false, $context);

Respuesta
{
  "data": {
    "items": [
      {
        "country": "CL",
        "amount": 58509,
        "currency": "CLP",
        "merchant_payout_id": "77722",
        "pay_at": null,
        "full_name": "Roberto Pani 5o",
        "first_name": "Roberto",
        "last_name": "Pani",
        "surname": null,
        "document_type": 1,
        "document_number": "23708467",
        "document_dv": "4",
        "email": null,
        "bank_code": "CL001",
        "account_number": "0002555-1232137",
        "account_type": "FP001",
        "details": null,
        "status": "created"
      },
      {...},
      {...},
      {...},
      {...}
    ],
    "total": 118,
    "current_page": 2,
    "last_page": 24,
    "per_page": 5
  },
  "result": 0
}

Cancelar pago

Cancelar un pago. Para poder cancelar un pago, este debe estar en estado ‘created’.
Parámetro Tipo Descripción Requerido
pg_serviceid Integer Service ID del merchant requerido
pg_token String Un token de autenticación válido requerido
external_id String (max. 64 chars) Merchant Payout ID requerido
POST /payouts/cancel
<?php 

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

// Get an authentication access token
$token = '302ec9c75bf9390db75959e2eded9ae3f5cdb7c1';

$payload = [
    'pg_serviceid' => $service_id,
    'pg_token' => $token,
    'external_id' => 'merchant-id-859649'
];

// sort payload
ksort($payload, SORT_NATURAL | SORT_FLAG_CASE);

$payload = json_encode($payload);

$signature = hash_hmac("sha256", $payload, $shared_secret);

// API URL
$url = 'https://payouts.paygol.com/api/payouts/cancel';

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-type: application/json',
            'X-PG-SIG: ' . $signature,
        ],
        'content' => $payload,
    ],
];

$context = @stream_context_create($opts);

$json_response = @file_get_contents($url, false, $context);

Respuesta
{
  "data": {
    "id": "merchant-id-859649",
    "old_status": "created",
    "new_status": "canceled"
  },
  "result": 0
}

Notificaciones Webhook

Con webhooks, le brindamos la posibilidad de reaccionar automáticamente a ciertos eventos que ocurren dentro de nuestro sistema. Un webhook es básicamente una URL a la que enviamos una solicitud HTTP POST cada vez que se activa uno de los eventos adjuntos a ese webhook.
Código evento Descripción
payout.received El pago se ha creado en el sistema y se encuentra a la espera de una acción.
payout.in_process El pago ha sido enviado al banco para su procesamiento.
payout.paid El pago ha sido paga por el banco.
payout.canceled El pago ha sido cancelado por el merchant.
payout.failed El pago no ha podido ser completado por un error en la información entregada
<?php 

/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

try {
    $headers = getallheaders();

    $content_json  = file_get_contents('php://input');

    $payload = json_decode($content_json, true);

    $signature = hash_hmac("sha256", json_encode($payload), $shared_secret);

    if (empty($headers['X-Pg-Sig']) || $headers['X-Pg-Sig'] !== $signature) {
        throw new \Exception('Invalid signature');
    }

    http_response_code(200);
    echo json_encode(['OK']);
} catch (\Exception $e) {
    http_response_code(401);
    echo json_encode(['error' => $e->getMessage()]);
}

Información de documento.

País Código Documento Tipo Dígito verificador
Argentina ar_cuit CUIT Numeric (11) Último dígito
Argentina ar_cuil CUIL Numeric (11) Último dígito
Brazil br_cpf CPF Numeric (11) Últimos 2 dígitos
Brazil br_cnpj CNPJ Numeric (14) Últimos 2 dígitos
Chile cl_rut RUT Alphanumeric (8/9) Último dígito

Códigos de bancos

Códigos para el parámetro bank_code.
Chile

Banco Código
Banco Del Estado De Chile 012
Banco Bbva ( Bilbao Vizcaya Argentaria Chile) / Banco Bhif 504
Banco Bice 028
Banco Consorcio 055
Banco Corpbanca 027
Banco De Chile / Banco A. Edwards / Credichile / Citybank 001
Banco De Crédito E Inversiones (BCI) / Tbanc 016
Banco Del Desarrollo 507
Banco Falabella 051
Banco Internacional 009
Banco Itau Chile / Bank Boston 039
Banco Ripley 053
Banco París 057
Banco Santander – Santiago / Banco Santander / Banefe 037
Banco Security 049
Coopeuch 672
Hsbc Bank (Chile) 031
Scotiabank / Sud – Americano 014

Tipos de cuentas

Códigos para el parámetro account types.
Chile
Cuenta Banco Código
Cuenta Corriente / Cueta Vista All banks FP001
Cuenta de ahorro All banks FP002
Chequera electrónica Banco Estado FP003
Cuenta RUT Banco Estado FP004

Estados

Códigos de estados disponibles.
Estado Código Descripción
Creado created El pago ha sido creado
En proceso de pago in-process El pago ha sido enviado al banco
Pagado paid El pago ha sido completado satisfactoriamemete
Cancelado canceled El pago ha sido cancelado por el merchant
Fallido failed El pago ha sido rechazado por el banco por error en la información proporcionada
Webcheckout

Implementación Web checkout
Descripción de parámetros
Métodos de pago disponibles

Implementación Web checkout

A continuación encontrarás un código de muestra para tu botón de pago. Simplemente reemplaza los valores de ejemplo según se requiera y estarás listo para comenzar a recibir pagos.

Descripción de parámetros

Parámetro Tipo Descripción Requerido
pg_serviceid integer Este es el ID de servicio de tu cuenta. requerido
pg_price numeric Monto de la transacción. requerido
pg_currency string Tipo de divisa especificado en código alfabético ISO 4217 que quieres
usar (Ej: EUR, USD, GBP, MXN, etc.).
Ver lista completa de códigos de divisa.
requerido
pg_country string País del pagador, en formato ISO 3166-2 (ej: GB, DE, ES).
Ver listado
requerido
pg_language string Idioma, en formato ISO 639-1 (ej: es, en). Si el idioma proporcionado no
está disponible, utiliza inglés por defecto.
opcional
pg_method string Método de pago. Favor de revisar la tabla que se presenta a continuación
para una lista de métodos disponibles y sus códigos. Para más
información referente a cada método de pago, visita nuestra página de
Costos.
requerido solo para checkout transparente
pg_name string Descripción de tu producto/servicio, el cual será mostrado el la
pantalla de pago.
opcional
pg_custom string Campo flexible, puede ser usado para rastrear usuario,
inventario, etc.
opcional
pg_email string Dirección de correo electrónico del pagador. requerido solo para checkout transparente
pg_phone string Número de teléfono del pagador.
Requerido en Brasil para Banco Do Brasil, Itaú, Santander y Bradesco. En Perú Pagoefectivo
requerido solo para checkout transparente en algunos métodos locales.
pg_first_name string Nombre del pagador. requerido solo para checkout transparente
pg_last_name string Apellido del pagador. requerido solo para checkout transparente
pg_personalid string Número de identificación local del pagador. requerido solo para checkout transparente en algunos métodos locales
pg_sub_merchant_id string opcional
pg_sub_merchant_id string opcional
pg_return_url string Tus clientes serán redireccionados aquí una vez que el
proceso de pago sea completado (ej:
https://www.misitio.com/pago-completado).
opcional
pg_cancel_url string Tus clientes serán redireccionados aquí si el proceso de pago
falla o es cancelado (ej: https://www.misitio.com/pago-cancelado).
opcional

Métodos de pago disponibles:

Nombre Código Descripción

Tarjeta de crédito

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Bitcoin

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Webpay

pg_country requerido
pg_email requerido

Multicaja

pg_country requerido
pg_email requerido

Servipag

pg_country requerido
pg_email requerido

PagoEfectivo

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido
pg_phone requerido

Pago Fácil

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Rapipago

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Paysafecard

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Giropay

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido (Usar este campo para BIC)

iDEAL

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Sofort

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

EPS

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

SEPA

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

MyBank

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Verkkopankki

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Przelewy24

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Bancontact

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido

Bradesco

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido
pg_phone requerido (Formato Ej.: 5531123456789)

OXXO

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Itaú

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido
pg_phone requerido (Formato Ej.: 5531123456789)

Davivienda

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Boleto

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Redpagos

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Santander Brasil

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido
pg_phone requerido (Formato Ej.: 5531123456789)

Santander México

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Banco do Brasil

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido
pg_phone requerido (Formato Ej.: 5531123456789)

PSE

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

Efecty

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
pg_personalid requerido

ViaBaloto

pg_country requerido
pg_email requerido
pg_first_name requerido
pg_last_name requerido
Notificación Instantánea de Pago V2 (IPN)

¿Qué es IPN?

Instant Payment Notification (IPN) traducido al español sería Notificación Instantánea de Pago, es un servicio de mensaje que te notifica de eventos relacionados a transacciones de Paygol. Puedes usarlo para automatizar el back-office y las funciones administrativas, tales como completar órdenes, actualizar membresía, rastreo de clientes, y proveer el estado y otra información relacionada a la transacción.

 

Información acerca del pago

Paygol realiza una llamada GET/POST a la URL de tu servicio IPN previamente configurado en cuanto tu cliente completa la transacción. Puedes usar esta notificación para finalizar y completar las órdenes, habilitar la descarga de material digital, información de la tienda en un CRM o en el sistema de contabilidad, etc.

 

¿Cómo recibir la información desde el IPN en mi página web?

Paygol provee ejemplos de código IPN para ambientes de desarrollo populares. Para archivos IPN personalizados, puedes utilizar el siguiente ejemplo como punto de inicio.

 
Ejemplo de implementación

<?php 

use Paygol\Notification;

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";
/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

$ipn = new Notification($service_id, $shared_secret);

try {
    $ipn->validate();

    $params = $ipn->getParams();

    var_dump($params);
    
    // do something

    // Confirm reception
    $ipn->sendResponse(['OK'], 200);
} catch (\Exception $e) {
    $ipn->sendResponse(['error' => 'Validation error'], 400);
}

La petición anterior devuelve un objeto JSON estructurado de la siguiente manera:

{
  "country": "ES",
  "currency": "USD",
  "custom": "Producto 1 - Producto 2 - Producto 3",
  "method": "teleingreso",
  "price": "10.00",
  "service_id": "123",
  "status": "completed",
  "transaction_id": "ZISS-A7Q8-RE2Z-S73W"
}

 

Manejo de notificaciones

El manejo correcto de las notificaciones es crucial para asegurarse de que la lógica de negocios de su integración funcione como se espera.

 

Confirmación de las notificaciones

Si su script de notificaciones ejecuta una lógica muy compleja o realiza llamadas a la red, es posible que el tiempo de espera se agote antes de que Paygol reciba la confirmación de recepción. Idealmente, su código que maneja la recepción de notificaciones (acusando recibo con código de estado 2xx) sea independiente de cualquier otra lógica.

 

Manejo de notificaciones duplicadas

Los endpoints de notificaciones pueden recibir en ocasiones la misma notificación más de una vez. Es por eso que recomendamos que evite recibos de notificaciones duplicados haciendo que su procesamiento de eventos sea idempotente.

Implementación API

Vista General
Cómo usar la Implementación API
Descripción de parámetros
Métodos de pago disponibles
Consultar métodos de pago
Creando una Transacción
Verificar el estado de una transacción
Estados

 


Vista General

Nuestra implementación API ofrece un alto nivel de personalización, permitiéndote implementar una solución de pagos white label directamente en tu plataforma de una forma rápida y fácil.

Esta implementación está basada en llamadas POST/GET a servicios web, los cuales entregarán una respuesta en formato JSON. La respuesta contendrá la URL a la cual deberás redirigir a tus clientes para comenzar el proceso de pago.

Cómo usar la implementación API

https://www.paygol.com/api/v2/

Descripción de parámetros

Métodos de pago disponibles

Nombre Cobertura Código Descripción

Consultar métodos de pago

Esta función devuelve una lista con los métodos de pago válidos para el país solicitado.

<?php

use \Paygol\API;
use \Paygol\Exceptions\InvalidParameterException;

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";

/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

try {
  $pg = new API($service_id, $shared_secret);

  $payment_methods = $pg->getPaymentMethods("de");

  var_dump($payment_methods);
} catch (\Exception $e) {
  die($e->getMessage());
}

Resultado de la petición

{
  "methods": {
    "creditcard": {
      "code": "creditcard",
      "name": "Credit Card",
      "image": "https://www.paygol.com/pay-now/images/method_button_creditcard.png"
    },
    "paysafecard": {
      "code": "paysafecard",
      "name": "Paysafecard",
      "image": "https://www.paygol.com/pay-now/images/method_button_paysafecard.png"
    },
    "bitcoin": {
      "code": "bitcoin",
      "name": "Bitcoin",
      "image": "https://www.paygol.com/pay-now/images/method_button_bitcoin.png"
    },
    "giropay": {
      "code": "giropay",
      "name": "Giropay",
      "image": "https://www.paygol.com/pay-now/images/method_button_giropay.png"
    }
  }
}


Creando una Transacción

Cada solicitud de pago en la API generará una transacción. Cada Transacción se identifica de forma única por el ID de Transacción. Para obtener detalles sobre una transacción, debe realizar una solicitud GET por separado.

<?php

use \Paygol\API;
use \Paygol\Models\Payer;
use \Paygol\Models\RedirectUrls;


/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";

/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

try {
    $pg = new API($service_id, $shared_secret);

    $redirectUrls = new RedirectUrls();
    $redirectUrls->setRedirects(
        "https://www.my-site.com/success", 
        "https://www.my-site.com/failure"
    ); // optional

    $pg->setRedirects($redirectUrls);

    $pg->setCountry('DE');
    $pg->setPrice(11.00, 'EUR');
    $pg->setPaymentMethod('bitcoin');

    $payer = new Payer();
    $payer->setFirstName('John');
    $payer->setLastName('Doe');
    $payer->setEmail('[email protected]');
    $payer->setBIC('123423432');

    $pg->setPayer($payer);

    $payment = $pg->createPayment();

    var_dump( $payment );

    if (!empty($payment['data']['payment_method_url'])) {
        // do something
    }
} catch (\Exception $e) {
    die($e->getMessage());
}

La petición anterior devuelve un objeto JSON estructurado de la siguiente manera:

{
  "data": {
    "service_id": "123",
    "transaction_id": "ABCD-ZZZZ-BIKE-R000",
    "status": "created",
    "payment_method": "bitcoin",
    "amount": "11.00",
    "currency": "EUR",
    "payment_method_url": "https://www.paygol.com/api/pay-direct/ABCD-ZZZZ-BIKE-R000",
    "custom":"internalID=918273645",
    "customer": {
      "first_name": "John",
      "last_name": "Doe",
      "email": "[email protected]",
      "phone": "5699334453",
      "personal_id": "111111111",
      "country": "CL"
    },
    "redirect_urls": {
        "success_url": "https://www.my-site.com/success",
        "cancel_url": "https://www.my-site.com/failure"
      }
  },
}

Verificar el estado de una transacción

<?php

use \Paygol\API;

/**
 * Merchant service ID
 *
 * @var int
 */
$service_id = "123";

/**
 * Merchant shared secret
 *
 * @var string
 */
$shared_secret = "7c1a6a24-7943-102d-92f8-29573711ad31";

try {
    $pg = new API($service_id, $shared_secret);

    $status = $pg->getPaymentStatus('1234-5678-ABCD-EFGH');

    var_dump( $status );
} catch (\Exception $e) {
    die($e->getMessage());
}

La petición anterior devuelve un objeto JSON estructurado de la siguiente manera:

{
  "payment": {
    "service_id": "123",
    "transaction_id": "ABCD-ZZZZ-BIKE-R000",
    "status": "created",
    "payment_method": "webpay",
    "amount": "11.00",
    "currency": "EUR",
    "created_at": "2019-05-30 22:01:46",
    "completed_at": null,
    "custom":"internalID=918273645",
    "customer": {
      "first_name": "John",
      "last_name": "Doe",
      "email": "[email protected]",
      "phone": "5699334453",
      "personal_id": "111111111",
      "country": "CL"
    }
  }
}

Estados

Estado Código Descripción
Notificación Instantánea de Pago (IPN)

¿Qué es IPN?
Instant Payment Notification (IPN) traducido al español sería Notificación Instantánea de Pago, es un servicio de mensaje que te notifica de eventos relacionados a transacciones de Paygol. Puedes usarlo para automatizar el back-office y las funciones administrativas, tales como completar ordenes, insertar puntos o monedas, actualizar membresía, rastreo de clientes, y proveer el estado y otra información relacionada a la transacción.

Información acerca del pago
Paygol realiza una solicitud GET a tu archivo IPN cuanto tu cliente completa la transacción. Puedes usar esta notificación para finalizar y completar la orden, habilitar la descarga del material digital, información de la tienda en un CRM o en el sistema de contabilidad, etc.

¿Cómo recibir la información desde el IPN en mi página web?
Paygol provee ejemplos de código IPN para ambientes de desarrollo populares. Para archivos IPN personalizados, puedes utilizar el siguiente ejemplo como punto de inicio.

Ejemplo:

<?php 

$secret_key = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee";  // Enter secret key for your service. 

// Secret key validation 
if ($secret_key != $_GET['key']) {
    echo "Validation error"; 
    exit;
}


// get the variables from Paygol system
$transaction_id	  = $_GET['transaction_id'];
$service_id	      = $_GET['service_id'];
$country	         = $_GET['country'];
$custom	          = $_GET['custom'];
$price	           = $_GET['price'];
$currency	        = $_GET['currency'];
$frmprice	        = $_GET['frmprice'];
$frmcurrency	     = $_GET['frmcurrency'];

// Here you can do whatever you want with the variables, for instance inserting or updating data into your Database 

?>

IPN Descripción de parámetros