Recommend this page to a friend! |
![]() |
Info | Documentation | ![]() |
![]() |
![]() |
Reputation | Support forum | Blog | Links |
Last Updated | Ratings | Unique User Downloads | Download Rankings | |||||
2025-07-01 (3 days ago) ![]() | Not enough user ratings | Total: 124 | All time: 9,460 This week: 524![]() |
Version | License | PHP version | Categories | |||
php-instapago 3.0.11 | MIT/X Consortium ... | 5.6 | PHP 5, E-Commerce, Web services |
Description | Author | ||||||||
This class can process payments with the Instapago API. |
|
<p align="center">
Documentación de la librería <b>Instapago</b> - Versión Refactorizada
</p>
* keyId = 74D4A278-C3F8-4D7A-9894-FA0571D7E023
* publicKeyId = e9a5893e047b645fed12c82db877e05a
> [!NOTE]
> Debes solicitar las llaves públicas y privadas (publicKeyId
y keyId
) a Instapago. Aquí puedes encontrar mayor información.
> [!WARNING] > Esta implementación es funcional con las version 1.6 de instapago
Esta versión refactorizada requiere:
De ahora en más usaremos $paymentData
para referirnos a el arreglo con los parámetros antes mencionados.
$paymentData = [
'amount' => '200',
'description' => 'test',
'card_holder' => 'jon doe',
'card_holder_id' => '11111111',
'card_number' => '4111111111111111',
'cvc' => '123',
'expiration' => '12/2020',
'ip' => '127.0.0.1',
];
Todos los métodos del api devuelven un arreglo asociativo con el siguiente esquema:
La excepción base de la librería es \Instapago\Exceptions\InstapagoException
y reporta errores generales con instapago, y de ella se derivan 5 excepciones de la siguiente manera.
Para todas las transacciones realizadas bajo el API de Instapago, los códigos HTTP de respuestas corresponden a los siguientes estados:
> Importante: Si recibe un código de respuesta diferente a los antes descritos deben ser tomados como errores de protocolo HTTP.
Para realizar las pruebas, se provee de los siguientes datos para comprobar la integracio?n:
Pueden indicar cualquier valor para Ce?dula o RIF, Fecha de Vencimiento y CVC:
use Instapago\Instapago\Api;
$api = new Api('<keyId>', '<publicKeyId>');
use Instapago\Instapago\Api;
use Instapago\Instapago\Http\GuzzleHttpClientFactory;
use Instapago\Instapago\Config\InstapagoConfig;
use Instapago\Instapago\Logging\NullLogger;
// Configuración personalizada
$config = new InstapagoConfig(
baseUri: 'https://api.instapago.com/',
timeout: 30,
debug: false
);
// Cliente HTTP personalizado
$httpClientFactory = new GuzzleHttpClientFactory($config);
$httpClient = $httpClientFactory->create();
// Logger personalizado
$logger = new NullLogger();
// API con dependencias inyectadas
$api = new Api('<keyId>', '<publicKeyId>', $httpClient, $logger);
use Instapago\Instapago\Config\InstapagoConfig;
// Configuración por defecto
$config = InstapagoConfig::default();
// Configuración con debug habilitado
$config = InstapagoConfig::withDebug();
// Configuración personalizada completa
$config = new InstapagoConfig(
baseUri: 'https://api.instapago.com/',
timeout: 60,
debug: true,
headers: [
'User-Agent' => 'MiApp/1.0',
'X-Custom-Header' => 'valor'
]
);
Efectúa un pago directo con tarjeta de crédito, los pagos directos son inmediatamente debitados del cliente y entran en el proceso bancario necesario para acreditar al beneficiario.
use Instapago\Instapago\Api;
use Instapago\Instapago\Exceptions\InstapagoException;
try {
$api = new Api('<keyId>', '<publicKeyId>');
$respuesta = $api->directPayment($paymentData);
// Procesar respuesta exitosa
echo "ID del Pago: " . $respuesta['id_pago'];
echo "Referencia: " . $respuesta['reference'];
echo "Código: " . $respuesta['code'];
} catch (InstapagoException $e) {
echo "Error procesando el pago: " . $e->getMessage();
// Manejar el error específico
}
use Instapago\Instapago\DTOs\PaymentRequest;
use Instapago\Instapago\Enums\PaymentType;
// Crear request usando DTO
$paymentRequest = new PaymentRequest(
amount: 200.00,
description: 'Pago de producto',
cardHolder: 'Juan Pérez',
cardHolderId: '12345678',
cardNumber: '4111111111111111',
cvc: '123',
expiration: '12/2026',
ip: '192.168.1.1'
);
// Convertir a array y procesar
$respuesta = $api->directPayment($paymentRequest->toArray());
Efectúa una reserva o retención de pago en la tarjeta de crédito del cliente, la reserva diferirá los fondos por un tiempo (3 días máximo segun fuentes extraoficiales), en el plazo en el que los fondos se encuentren diferidos, ni el beneficiario ni el cliente poseen el dinero. El dinero será tramitado al beneficiario una vez completado el pago, o de lo contrario será acreditado al cliente de vuelta si no se completa durante el plazo o si se cancela el pago.
try{
$api = new Api('<keyId>','<publicKeyId>');
$respuesta = $api->reservePayment($paymentData);
// hacer algo con $respuesta
}catch(\Instapago\Exceptions\InstapagoException $e){
echo "Ocurrió un problema procesando el pago.";
// manejar el error
}
Este método permite cobrar fondos previamente retenidos.
try {
$api = new Api('<keyId>', '<publicKeyId>');
$respuesta = $api->continuePayment([
'id' => 'af614bca-0e2b-4232-bc8c-dbedbdf73b48',
'amount' => 200.00
]);
echo "Pago completado: " . $respuesta['id_pago'];
} catch (InstapagoException $e) {
echo "Error completando el pago: " . $e->getMessage();
}
use Instapago\Instapago\DTOs\CompletePaymentRequest;
$completeRequest = new CompletePaymentRequest(
id: 'af614bca-0e2b-4232-bc8c-dbedbdf73b48',
amount: 200.00
);
$respuesta = $api->continuePayment($completeRequest->toArray());
Consulta información sobre un pago previamente generado.
try{
$api = new Api('<keyId>','<publicKeyId>');
$idPago = 'af614bca-0e2b-4232-bc8c-dbedbdf73b48';
$respuesta = $api->query($idPago);
}catch(\Instapago\Exceptions\InstapagoException $e){
// manejar errores
}
Devuelve la misma respuesta que los métodos de crear pagos.
Este método permite cancelar un pago, haya sido directo o retenido.
try {
$api = new Api('<keyId>', '<publicKeyId>');
$idPago = 'af614bca-0e2b-4232-bc8c-dbedbdf73b48';
$info = $api->cancel($idPago);
echo "Pago cancelado: " . $info['id_pago'];
} catch (InstapagoException $e) {
echo "Error cancelando el pago: " . $e->getMessage();
}
Devuelve la misma respuesta que los métodos de crear pagos.
La librería incluye DTOs tipados para mejorar la seguridad de tipos y facilitar el desarrollo:
use Instapago\Instapago\DTOs\PaymentRequest;
// Crear desde array
$paymentRequest = PaymentRequest::fromArray($paymentData);
// Crear directamente
$paymentRequest = new PaymentRequest(
amount: 200.00,
description: 'Compra en línea',
cardHolder: 'Juan Pérez',
cardHolderId: '12345678',
cardNumber: '4111111111111111',
cvc: '123',
expiration: '12/2026',
ip: '192.168.1.1'
);
// Convertir a array para la API
$requestData = $paymentRequest->toArray();
use Instapago\Instapago\DTOs\PaymentResponse;
// Crear desde respuesta de API
$response = PaymentResponse::fromArray($apiResponse);
// Acceder a propiedades tipadas
echo $response->code;
echo $response->msgBanco;
echo $response->voucher;
echo $response->idPago;
echo $response->reference;
use Instapago\Instapago\DTOs\CompletePaymentRequest;
$completeRequest = new CompletePaymentRequest(
id: 'payment-id-here',
amount: 150.00
);
$api->continuePayment($completeRequest->toArray());
La librería utiliza un sistema de validación basado en estrategias que es extensible:
use Instapago\Instapago\Validation\PaymentValidationStrategy;
use Instapago\Instapago\Validation\QueryValidationStrategy;
use Instapago\Instapago\Validation\CompletePaymentValidationStrategy;
// Las validaciones se aplican automáticamente según el método:
// - directPayment() y reservePayment() usan PaymentValidationStrategy
// - query() usa QueryValidationStrategy
// - continuePayment() usa CompletePaymentValidationStrategy
use Instapago\Instapago\Validation\ValidationStrategyInterface;
use Instapago\Instapago\Validation\ValidationRuleBuilder;
class CustomValidationStrategy implements ValidationStrategyInterface
{
public function validate(array $data): void
{
$builder = new ValidationRuleBuilder();
$builder->required('custom_field')
->string()
->minLength(5);
$builder->optional('optional_field')
->numeric()
->min(0);
$builder->validate($data);
}
}
La librería incluye soporte para logging personalizable:
use Instapago\Instapago\Logging\NullLogger;
// Logger que no hace nada (por defecto)
$logger = new NullLogger();
use Instapago\Instapago\Logging\LoggerInterface;
class CustomLogger implements LoggerInterface
{
public function log(string $level, string $message, array $context = []): void
{
// Tu implementación de logging
error_log("[$level] $message " . json_encode($context));
}
public function info(string $message, array $context = []): void
{
$this->log('info', $message, $context);
}
public function error(string $message, array $context = []): void
{
$this->log('error', $message, $context);
}
public function debug(string $message, array $context = []): void
{
$this->log('debug', $message, $context);
}
}
// Usar logger personalizado
$api = new Api('<keyId>', '<publicKeyId>', null, new CustomLogger());
La librería incluye tests comprehensivos usando Pest PHP:
# Todos los tests
composer test
# Tests específicos
./vendor/bin/pest tests/ApiInstapagoTest.php
./vendor/bin/pest tests/ValidationTest.php
./vendor/bin/pest tests/RefactoredFeaturesTest.php
# Con coverage
composer test:coverage
use Instapago\Instapago\Api;
use Instapago\Instapago\Http\HttpClientInterface;
test('puede mockear cliente HTTP para testing', function () {
$mockClient = Mockery::mock(HttpClientInterface::class);
$mockClient->shouldReceive('post')
->once()
->andReturn([
'code' => 201,
'msg_banco' => 'Aprobada',
'voucher' => '<html>voucher</html>',
'id_pago' => 'test-payment-id',
'reference' => 123456
]);
$api = new Api('test-key', 'test-public-key', $mockClient);
$response = $api->directPayment($paymentData);
expect($response['code'])->toBe(201);
expect($response['id_pago'])->toBe('test-payment-id');
});
La nueva arquitectura facilita el testing mediante:
<p align="center"> <img src="help/hYNsH6B.png">
</p> <p align="center">
Librería Instapago para PHP
</p> <p align="center">
<sup style="color: #d0d0d0;"><b>NOTA</b> Los logos son propiedad de Instapago y Banesco, respectivamente.</sup>
</p>
Primero, composer
Luego:
$ composer require instapago/instapago
$ composer dumpautoload -o // opcional
> NOTA: Esta versión requiere PHP 8.2 o superior y utiliza las características más modernas del lenguaje para ofrecer mejor rendimiento, seguridad y mantenibilidad.
Ver DOCUMENTACIÓN
Esta versión ha sido completamente refactorizada siguiendo principios SOLID y patrones de diseño modernos:
La librería incluye tests comprehensivos usando Pest PHP:
# Ejecutar todos los tests
composer test
# Ejecutar tests con coverage
composer test:coverage
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.
![]() |
File | Role | Description | ||
---|---|---|---|---|
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Example | Example script | ||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Lic. | License text | ||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Doc. | Example script |
![]() |
/ | .github |
File | Role | Description | ||
---|---|---|---|---|
![]() |
||||
![]() |
||||
![]() ![]() |
Data | Auxiliary data | ||
![]() ![]() |
Data | Auxiliary data |
![]() |
/ | .github | / | ISSUE_TEMPLATE |
File | Role | Description |
---|---|---|
![]() ![]() |
Data | Auxiliary data |
![]() ![]() |
Data | Auxiliary data |
![]() |
/ | .github | / | workflows |
File | Role | Description |
---|---|---|
![]() ![]() |
Data | Auxiliary data |
![]() ![]() |
Data | Auxiliary data |
![]() ![]() |
Data | Auxiliary data |
![]() ![]() |
Data | Auxiliary data |
![]() |
/ | help |
File | Role | Description |
---|---|---|
![]() ![]() |
Doc. | Documentation |
![]() ![]() |
Icon | Icon image |
![]() |
/ | src |
File | Role | Description | ||
---|---|---|---|---|
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
||||
![]() |
Class | Class source | ||
![]() |
Class | Class source | ||
![]() |
Class | Class source |
![]() |
/ | src | / | DTOs |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
/ | src | / | Exceptions |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
/ | src | / | Http |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
/ | src | / | Logging |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
/ | src | / | Validation |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
/ | tests |
File | Role | Description |
---|---|---|
![]() |
Class | Class source |
![]() ![]() |
Example | Example script |
![]() ![]() |
Example | Example script |
![]() ![]() |
Example | Example script |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() ![]() |
Aux. | Auxiliary script |
![]() |
Class | Class source |
![]() |
Class | Class source |
![]() |
Class | Class source |
The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page. |
![]() |
Version Control | Unique User Downloads | Download Rankings | |||||||||||||||
100% |
|
|
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.