JRHuasi / SDK-PHP

Home Page:http://www.todopago.com.ar/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Todo Pago - módulo SDK-PHP para conexión con gateway de pago

Instalación

Se debe descargar la última versión del SDK desde el botón Download ZIP del branch master. Una vez descargado y descomprimido, debe incluirse el archivo Sdk.php que se encuentra en la carpeta /TodoPago/lib como librería dentro del proyecto.

También se puede realizar la instalación a través de Composer (opcion recomendada).

composer require todopago/php-sdk

Luego de la instalacion se debe incluir el archivo vendor/autoload.php en el proyecto.

Observación: Descomentar: extension=php_soap.dll, extension=php_openssl.dll y extension=php_curl.dll del php.ini, ya que para la conexión al gateway se utiliza la clase SoapClient del API de PHP.


####1. Versiones de php soportadas
La versión implementada de la SDK, esta testeada para la version PHP 5.3 en adelante.

####2. Generalidades Esta versión soporta únicamente pago en moneda nacional argentina (CURRENCYCODE = 32).

Volver a inicio

Uso

####Inicializar la clase correspondiente al conector (TodoPago\Sdk).

  • Crear un array con los http header suministrados por Todo Pago
$http_header = array('Authorization'=>'PRISMA 912EC803B2CE49E4A541068D495AB570');
  • Crear una instancia de la clase TodoPago\Sdk
$connector = new TodoPago\Sdk($http_header, $mode); // $mode: "test" para testing, "prod" para producción

####Solicitud de autorización En este caso hay que llamar a sendAuthorizeRequest().

$values = $connector->sendAuthorizeRequest($optionsSAR_comercio, $optionsSAR_operacion);		

datos propios del comercio $optionsSAR_comercio debe ser un array con la siguiente estructura:

$optionsSAR_comercio = array (
	'Security'=> '1234567890ABCDEF1234567890ABCDEF',
	'EncodingMethod'=>'XML',
	'Merchant'=>305,
	'URL_OK'=>'localhost:8888/sdk-php/ejemplo/exito.php?Order=27398173292187',
	'URL_ERROR'=>'localhost:8888/sdk-php/ejemplo/error.php?Order=27398173292187'
);		

*En el ejemplo se envían parámetros en la url (en nuestro ejemplo: ?Order=27398173292187), para ser recibidos por la tienda vía get y de este modo recuperar el valor en un próximo paso.

datos propios de la operación $optionsSAR_operacion debe ser un array con la siguiente estructura:

$optionsSAR_operacion = array (
	'MERCHANT'=> 305, //dato fijo (número identificador del comercio)
	'OPERATIONID'=>'27398173292187', //número único que identifica la operación, generado por el comercio.
	'CURRENCYCODE'=> 32, //por el momento es el único tipo de moneda aceptada
	'AMOUNT'=>54.00,
	'EMAILCLIENTE'=>'email_cliente@dominio.com',
	);		

Códigos de rechazo

```php array (size=5) 'StatusCode' => int -1 'StatusMessage' => string 'Solicitud de Autorizacion Registrada' (length=36) 'URL_Request' => string 'https://developers.todopago.com.ar/formulario/commands?command=formulario&m=6d2589f2-37e6-1334-7565-3dc19404480c' (length=102) 'RequestKey' => string '6d2589f2-37e6-1334-7565-3dc19404480c' (length=36) 'PublicRequestKey' => string '6d2589f2-37e6-1334-7565-3dc19404480c' (length=36) ``` La **url_request** es donde está hosteado el formulario de pago y donde hay que redireccionar al usuario, una vez realizado el pago según el éxito o fracaso del mismo, el formulario redireccionará a una de las 2 URLs seteadas en **$optionsSAR_comercio** ([URL_OK](#url_ok), en caso de éxito o [URL_ERROR](#url_error), en caso de que por algún motivo el formulario rechace el pago)

Si, por ejemplo, se pasa mal el MerchantID se obtendrá la siguiente respuesta:

array (size=2)
  'StatusCode' => int 702
  'StatusMessage' => string 'ERROR: Cuenta Inexistente' (length=25)
(length=30)

####Confirmación de transacción. En este caso hay que llamar a getAuthorizeAnswer(), enviando como parámetro un array como se describe a continuación.

$optionsQuery = array (		
		'Security'   => '1234567890ABCDEF1234567890ABCDEF', // Token de seguridad, provisto por TODO PAGO. MANDATORIO
		'Merchant'   => '12345678',		
		'RequestKey' => '0123-1234-2345-3456-4567-5678-6789',		
		'AnswerKey'  => '1111-2222-3333-4444-5555-6666-7777' // *Importante		
);		

Se deben guardar y recuperar los valores de los campos RequestKey y AnswerKey.

El parámetro RequestKey es siempre distinto y debe ser persistido de alguna forma cuando el comprador es redirigido al formulario de pagos.

Importante El campo AnswerKey se adiciona en la redirección que se realiza a alguna de las direcciones ( URL ) epecificadas en el servicio SendAurhorizationRequest, esto sucede cuando la transacción ya fue resuelta y es necesario regresar al site para finalizar la transacción de pago, también se adiciona el campo Order, el cual tendrá el contenido enviado en el campo OPERATIONID. Para nuestro ejemplo: http://susitio.com/paydtodopago/ok?Order=27398173292187&Answer=1111-2222-3333-4444-5555-6666-7777

array(		
  'StatusCode'       => -1, 		
  'StatusMessage'    => 'APROBADA',		
  'AuthorizationKey' => '1294-329E-F2FD-1AD8-3614-1218-2693-1378',		
  'EncodingMethod'   => 'XML',		
  'Payload'          => 		
    array (		
      'Answer' => 		
        array (		
          'DATETIME'               => '2014/08/11 15:24:38',		
          'RESULTCODE'             => '-1',		
          'RESULTMESSAGE'          => 'APROBADA',		
          'CURRENCYNAME'           => 'Pesos',		
          'PAYMENTMETHODNAME'      => 'VISA',		
          'TICKETNUMBER'           => '12',		
          'CARDNUMBERVISIBLE'      => '450799******4905',		
          'AUTHORIZATIONCODE'      => 'TEST38',
          'INSTALLMENTPAYMENTS'    => '5'
        ), 		
      'Request' => 		
        array (		
          'MERCHANT'               => '12345678',		
          'OPERATIONID'            => 'ABCDEF-1234-12221-FDE1-00000012',		
          'AMOUNT'                 => '1.00',		
          'CURRENCYCODE'           => '032', 		
          );		

Este método devuelve el resumen de los datos de la transacción.

Si se pasa mal el AnswerKey o el RequestKey se verá el siguiente rechazo:

array (size=2)
  'StatusCode' => int 404
  'StatusMessage' => string 'ERROR: Transaccion Inexistente' (length=30)


####Ejemplo Existe un ejemplo en https://github.com/TodoPago/sdk-php/tree/master/resources/ejemplo.php que muestra los resultados de los métodos principales del SDK.


####Modo Test

El SDK-PHP permite trabajar con los ambiente de desarrollo y de produccion de Todo Pago.
El ambiente se debe instanciar como se indica a continuacion.

$mode = "test";//identificador de entorno obligatorio, la otra opcion es prod
$http_header = array('Authorization'=>'TODOPAGO 912EC803B2CE40E4A541068D495AB570');//authorization key del ambiente requerido

$connector = new TodoPago\Sdk($http_header, $mode);

Volver a inicio

Datos adicionales para control de fraude

Los datos adicionales para control de fraude son obligatorios, de lo contrario baja el score de la transacción.

Los campos marcados como condicionales afectan al score negativamente si no son enviados, pero no son mandatorios o bloqueantes.

$optionsSAR_operacion = array(		
	...........................................................................		
	'CSBTCITY'=>'Villa General Belgrano', //Ciudad de facturación, MANDATORIO.		
	'CSBTCOUNTRY'=>'AR', //País de facturación. MANDATORIO. Código ISO. (http://apps.cybersource.com/library/documentation/sbc/quickref/countries_alpha_list.pdf)		
	'CSBTCUSTOMERID'=>'453458', //Identificador del usuario al que se le emite la factura. MANDATORIO. No puede contener un correo electrónico.		
	'CSBTIPADDRESS'=>'192.0.0.4', //IP de la PC del comprador. MANDATORIO.		
	'CSBTEMAIL'=>'decidir@hotmail.com', //Mail del usuario al que se le emite la factura. MANDATORIO.		
	'CSBTFIRSTNAME'=>'Juan' ,//Nombre del usuario al que se le emite la factura. MANDATORIO.		
	'CSBTLASTNAME'=>'Perez', //Apellido del usuario al que se le emite la factura. MANDATORIO.		
	'CSBTPHONENUMBER'=>'541160913988', //Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. MANDATORIO.		
	'CSBTPOSTALCODE'=>' C1010AAP', //Código Postal de la dirección de facturación. MANDATORIO.		
	'CSBTSTATE'=>'B', //Provincia de la dirección de facturación. MANDATORIO. Ver tabla anexa de provincias.		
	'CSBTSTREET1'=>'Cerrito 740', //Domicilio de facturación (calle y nro). MANDATORIO.		
	'CSBTSTREET2'=>'Piso 8', //Complemento del domicilio. (piso, departamento). NO MANDATORIO.		
	'CSPTCURRENCY'=>'ARS', //Moneda. MANDATORIO.		
	'CSPTGRANDTOTALAMOUNT'=>'125.38', //Con decimales opcional usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO. (Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00)				
	'CSMDD7'=>'', // Fecha registro comprador(num Dias). NO MANDATORIO.		
	'CSMDD8'=>'Y', //Usuario Guest? (Y/N). En caso de ser Y, el campo CSMDD9 no deberá enviarse. NO MANDATORIO.		
	'CSMDD9'=>'', //Customer password Hash: criptograma asociado al password del comprador final. NO MANDATORIO.		
	'CSMDD10'=>'', //Histórica de compras del comprador (Num transacciones). NO MANDATORIO.		
	'CSMDD11'=>'', //Customer Cell Phone. NO MANDATORIO.		
	'CSSTCITY'=>'rosario', //Ciudad de enví­o de la orden. MANDATORIO.		
	'CSSTCOUNTRY'=>'', //País de envío de la orden. MANDATORIO.		
	'CSSTEMAIL'=>'jose@gmail.com', //Mail del destinatario, MANDATORIO.		
	'CSSTFIRSTNAME'=>'Jose', //Nombre del destinatario. MANDATORIO.		
	'CSSTLASTNAME'=>'Perez', //Apellido del destinatario. MANDATORIO.		
	'CSSTPHONENUMBER'=>'541155893737', //Número de teléfono del destinatario. MANDATORIO.
	'CSSTPOSTALCODE'=>'1414', //Código postal del domicilio de envío. MANDATORIO.		
	'CSSTSTATE'=>'D', //Provincia de envío. MANDATORIO. Son de 1 caracter		
	'CSSTSTREET1'=>'San Martín 123', //Domicilio de envío. MANDATORIO.		
	'CSMDD12'=>'',//Shipping DeadLine (Num Dias). NO MADATORIO.		
	'CSMDD13'=>'',//Método de Despacho. NO MANDATORIO.		
	'CSMDD14'=>'',//Customer requires Tax Bill ? (Y/N). NO MANDATORIO.		
	'CSMDD15'=>'',//Customer Loyality Number. NO MANDATORIO. 		
	'CSMDD16'=>'',//Promotional / Coupon Code. NO MANDATORIO. 		
	//Retail: datos a enviar por cada producto, los valores deben estar separados con #:		
	'CSITPRODUCTCODE'=>'electronic_good', //Código de producto. MANDATORIO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription)		
	'CSITPRODUCTDESCRIPTION'=>'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Descripción del producto. MANDATORIO.		
	'CSITPRODUCTNAME'=>'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. MANDATORIO.		
	'CSITPRODUCTSKU'=>'LEVJNSL36GN', //Código identificador del producto. MANDATORIO.		
	'CSITTOTALAMOUNT'=>'1254.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. MANDATORIO.		
	'CSITQUANTITY'=>'1', //Cantidad del producto. MANDATORIO.		
	'CSITUNITPRICE'=>'1254.40', //Formato Idem CSITTOTALAMOUNT. MANDATORIO.		
	...........................................................		

Datos de referencia

Nombre del campoRequired/OptionalData TypeMínimoComentarios
CSBTCITYRequiredString (50)1Ciudad / Debe comenzar con una letra
CSBTCOUNTRYRequiredString (2)1Código ISO
CSBTCUSTOMERIDRequiredString (50)1Identificador del usuario unico logueado al portal (No puede ser una direccion de email)
CSBTEMAILRequiredString (100)1Correo electrónico del comprador con formato válido (solo letras (a-z), números, puntos y sin espacios)
CSBTFIRSTNAMERequiredString (60)1Nombre del tarjeta habiente / Sin caracteres especiales como acentos invertidos, sólo letras, números y espacios
CSBTIPADDRESSRequiredString (15)1"End Customer´s IP address, such as 10.1.27.63, reported by your Web server via socket information."
CSBTLASTNAMERequiredString (60)1Apellido del tarjetahabiente / Sin caracteres especiales como acentos invertidos, sólo letras, números y espacios
CSBTPHONENUMBERRequiredString (15)6Número de telefono
CSBTPOSTALCODERequiredString (10)1Codigo Postal
CSBTSTATERequiredString (2)1Estado (Si el country = US, el campo se valida para un estado valido en USA)
CSBTSTREET1RequiredString (60)1Calle Numero interior Numero Exterior
CSBTSTREET2OptionalString (60)Barrio
CSITPRODUCTCODEConditionalString (255)
CSITPRODUCTDESCRIPTIONConditionalString (255)Descripción general del producto
CSITPRODUCTNAMEConditionalString (255)Nombre en catalogo del producto
CSITPRODUCTSKUConditionalString (255)SKU en catalogo
CSITQUANTITYConditionalInteger (10)Cantidad productos del mismo tipo agregados al carrito
CSITTOTALAMOUNTConditional"Precio total = Precio unitario * quantity / CSITTOTALAMOUNT = CSITUNITPRICE * CSITQUANTITY ""999999.CC"" Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSITUNITPRICEConditionalString (15)"Precio Unitaro del producto / ""999999.CC"" Es mandatorio informar los decimales, usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSPTCURRENCYRequiredString (5)1Currencies=>'032'(Peso Argentino)
CSPTGRANDTOTALAMOUNTRequiredDecimal (15)1"Cantidad total de la transaccion./""999999.CC"" Con decimales obligatorios, usando el puntos como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales."
CSSTCITYRequiredString (50)1Ciudad / Debe comenzar con una letra
CSSTCOUNTRYRequiredString (2)1Código ISO
CSSTEMAILRequiredString (100)1Correo electrónico del comprador con formato válido (solo letras (a-z), números, puntos y sin espacios)
CSSTFIRSTNAMERequiredString (60)1Nombre del tarjeta habiente / Sin caracteres especiales como acentos invertidos, sólo letras, números y espacios
CSSTLASTNAMERequiredString (60)1Apellido del tarjetahabiente / Sin caracteres especiales como acentos invertidos, sólo letras, números y espacios
CSSTPHONENUMBERRequiredString (15)6"Número de telefono. Cuidar el hecho que por default algunos comercios envían ""54"", contando entonces con 2 de los 6 caracteres requeridos."
CSSTPOSTALCODERequiredString (10)1Código Postal
CSSTSTATERequiredString (2)1Estado (Si el country = US, el campo se valida para un estado v lido en USA)
CSSTSTREET1RequiredString (60)1Calle Numero interior Numero Exterior / Para los casos que no son de envío a domicilio, jam s enviar la dirección propia del comercio o correo donde se retire la mercadería, en ese caso replicar los datos de facturación.
CSSTSTREET2OptionalString (60)Barrio
CSMDD1 RequiredString (255)1Incluir numero de comercio proveniente del campo NROCOMERCIO del API DECIDIR
CSMDD2RequiredString (255)1Incluir el nombre del comercio, Decidir puede obtener este dato del portal de configuracion de comercios
CSMDD3Required (Catalogo)String (255)1"Valores ejemplo: (retail, digital goods, services, travel, ticketing) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio"
CSMDD4Optional (Catalogo)String (255)"Valores ejemplo: (Visa, Master Card, Tarjeta Shopping, Banelco...) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio. Se tienen que incluir todos los medios de pago aceptados"
CSMDD5OptionalString (255)Valor numerico que detalle el numero de cuotas
CSMDD6Optional (Catalogo)String (255)"Valores ejemplo: (Web, Call Center, Mobile, Kiosko) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio."
CSMDD7OptionalString (255)Numero de dias que tiene registrado un cliente en el portal del comercio.
CSMDD8OptionalString (255)Valor Boleano para indicar si el usuario esta comprando como invitado en la pagina del comercio. Valores posibles (S/N)
CSMDD9OptionalString (255)Valor del password del usuario registrado en el portal del comercio. Incluir el valor en hash
CSMDD10OptionalString (255)Conteo de transacciones realizadas por el mismo usuario registrado en el portal del comercio
CSMDD11OptionalString (255)Incluir numero de telefono adicional del comprador
CSMDD12OptionalString (255)Numero de dias que tiene el comercio para hacer la entrega
CSMDD13Optional (Catalogo)String (255)"Valores ejemplo: (domicilio, click and collect, carrier) Es recomendable que el API de decidir fije opciones seleccionables y no sean de captura libre para el comercio."
CSMDD14OptionalString (255)Valor booleano para identificar si el cliente requiere un comprobante fiscal o no S / N
CSMDD15OptionalString (255)Incluir numero de cliente frecuente
CSMDD16OptionalString (255)Incluir numero de cupon de descuento
CSMDD35Conditional (Transaccion con Visa)String (255)Tipo de documento solicitado por el comercio al cliente
CSMDD36Conditional (Transaccion con Visa)String (255)Numero de documento solicitado por el comercio al cliente
CSMDD37Conditional (Transaccion con Visa)String (255)Numero de puerta
CSMDD38onditional (Transaccion con Visa)String (255)Fecha de nacimiento del comprador, dato solicitado por el comercio. DECIDIR tiene el formato exacto de como se debe de capturar
CSMDD39Conditional (Transaccion con Visa)String (255)Valor numero correspondiente a la validacion de cada uno de los datos anteriores ejemplo: 1012
CSMDD40OptionalString(1)"Valor para identificar si la transaccion ha sido reportada como fraude por parte del emisor. Incluir el parametro con valor = S Este parametro lo genera decidir a partir de la respuesta del emisor. En caso de una transaccion aceptada por el emisor o con rechazo diferente a fraude, NO INCLUIR"
CSMDD41OptionalString(1)Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N
CSMDD42OptionalString(1)Datos proporcionado por DECIDIR en el form. De pago. Valores posibles S/N
CSMDD80Required Integer (20)Número de cuenta del vendedor
CSMDD81Required String(255)Mail del vendedor en TP
CSMDD82Required Integer (6)Rubro asignado por el analista de riesgos de Back Office
CSMDD83Required Integer (2)Antigüedad de la cuenta vendedor
CSMDD84Required String (15)Consumidor Final / Profesional / Empresa
CSMDD85Required Integer(1)0 (No se le pidió) / 1 (Se le pidió y se validó) / 2 (Uso Futuro)
CSMDD86Requerido (para Billetera)Integer(20)Número de cuenta del comprador
CSMDD87Requerido (para Billetera)Integer (3)Antigüedad de la cuenta comprador (Meses)
CSMDD88Requerido (para Billetera)Integer (3)Cantidad de tarjetas Habilitadas de la Billetera
CSMDD89Requerido (para Billetera)Integer (2)Nivel de Riesgo asignado al Medio de Pago que Utiliza

Volver a inicio

Características

####Status de la Operación La SDK cuenta con un método para consultar el status de la transacción desde la misma SDK. El método se utiliza de la siguiente manera:

$client = new TodoPago\Sdk($http_header, $mode);
$client->getStatus(array('MERCHANT'=>'305', 'OPERATIONID'=>'01'));// Merchant es el id site y $operation_id es el id operación que se envió en el array a través del método sendAuthorizeRequest() 

El siguiente método retornará el status actual de la transacción en Todopago.

Ejemplo de Respuesta

array (size=1)
  'Operations' => 
    array (size=19)
      'RESULTCODE' => string '999' (length=3)
      'RESULTMESSAGE' => string 'RECHAZADA' (length=9)
      'DATETIME' => string '2015-05-13T14:11:38.287+00:00' (length=29)
      'OPERATIONID' => string '01' (length=2)
      'CURRENCYCODE' => string '32' (length=2)
      'AMOUNT' => int 54
      'TYPE' => string 'compra_online' (length=13)
      'INSTALLMENTPAYMENTS' => string '4' (length=1)
      'CUSTOMEREMAIL' => string 'cosme@fulanito.com' (length=18)
      'IDENTIFICATIONTYPE' => string 'DNI' (length=3)
      'IDENTIFICATION' => string '1212121212' (length=10)
      'CARDNUMBER' => string '12121212XXXXXX1212' (length=18)
      'CARDHOLDERNAME' => string 'Cosme Fulanito' (length=14)
      'TICKETNUMBER' => int 0
      'AUTHORIZATIONCODE' => null
      'BARCODE' => null
      'COUPONEXPDATE' => null
      'COUPONSECEXPDATE' => null
      'COUPONSUBSCRIBER' => null

Además, se puede conocer el estado de las transacciones a través del portal www.todopago.com.ar. Desde el portal se verán los estados "Aprobada" y "Rechazada". Si el método de pago elegido por el comprador fue Pago Fácil o RapiPago, se podrán ver en estado "Pendiente" hasta que el mismo sea pagado.

####Consulta de operaciones por rango de tiempo En este caso hay que llamar a getByRangeDateTime() y devolvera todas las operaciones realizadas en el rango de fechas dado

$client = new TodoPago\Sdk($http_header, $mode);

//Fecha en formato "Y-m-d"
$date1 = date("Y-m-d", time()-60*60*24*30);
$date2 = date("Y-m-d", time());

$client->getByRangeDateTime(array('MERCHANT'=>'305', "STARTDATE" => $date1, "ENDDATE" => $date2, "PAGENUMBER" => 1));

####Devolución

La SDK dispone de métodos para realizar la devolución, de una transacción realizada a traves de TodoPago.

Se debe llamar al método voidRequest de la siguiente manera:

$options = array(
	"Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago 
	"Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago
	"RequestKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // RequestKey devuelto como respuesta del servicio SendAutorizeRequest
);
$resp = $todopago->voidRequest($options);	

También se puede llamar al método voidRequest de la esta otra manera:

$options = array(
	"Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago 
	"Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago
	"AuthorizationKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
);
$resp = $todopago->voidRequest($options);	

Respuesta del servicio: Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.

array(
	"StatusCode" => 2011,
	"StatusMessage" => "Operación realizada correctamente",
);

####Devolución parcial

La SDK dispone de métodos para realizar la devolución parcial, de una transacción realizada a traves de TodoPago.

Se debe llamar al método returnRequest de la siguiente manera:

$options = array(
	"Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago 
	"Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago
	"RequestKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // RequestKey devuelto como respuesta del servicio SendAutorizeRequest
	"AMOUNT" => "23.50" // Opcional. Monto a devolver, si no se envía, se trata de una devolución total
);
$resp = $todopago->returnRequest($options);

También se puede llamar al método returnRequest de la esta otra manera:

$options = array(
	"Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago 
	"Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago
	"AuthorizationKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer
	"AMOUNT" => "23.50" // Opcional. Monto a devolver, si no se envía, se trata de una devolución total
);
$resp = $todopago->returnRequest($options);	

Respuesta de servicio: Si la operación fue realizada correctamente se informará con un código 2011 y un mensaje indicando el éxito de la operación.

array(
	"StatusCode" => 2011,
	"StatusMessage" => "Operación realizada correctamente",
);

####Formulario hibrido

Conceptos basicos
El formulario hibrido, es una alternativa al medio de pago actual por redirección al formulario externo de TodoPago.
Con el mismo, se busca que el comercio pueda adecuar el look and feel del formulario a su propio diseño.

Libreria
El formulario requiere incluir en la pagina una libreria Javascript de TodoPago.
El endpoint depende del entorno:

También se provee un método en la SDK para obtener el endpoint de la libreria Javascript:

$sdk = new \TodoPago\Sdk($http_header, $mode);

$js = $sdk->getEndpointForm();

Restricciones y libertades en la implementación

  • Ninguno de los campos del formulario podrá contar con el atributo name.
  • Se deberá proveer de manera obligatoria un botón para gestionar el pago con Billetera Todo Pago.
  • Todos los elementos de tipo son completados por la API de Todo Pago.
  • Los campos tienen un id por defecto. Si se prefiere utilizar otros ids se deberán especificar los mismos cuando se inicialice el script de Todo Pago.
  • Pueden aplicarse todos los detalles visuales que se crean necesarios, la API de Todo Pago no altera los atributos class y style.
  • Puede utilizarse la API para setear los atributos placeholder del formulario, para ello deberá especificar dichos placeholders en la inicialización del formulario "window.TPFORMAPI.hybridForm.setItem". En caso de que no se especifiquen los placeholders se usarán los valores por defecto de la API.

HTML del formulario

El formulario implementado debe contar al menos con los siguientes campos.

<body>
	<select id="formaDePagoCbx"></select>
	<select id="bancoCbx"></select>
	<select id="promosCbx"></select>
	<label id="labelPromotionTextId"></label>
	<input id="numeroTarjetaTxt"/>
	<input id="mesTxt"/>
	<input id="anioTxt"/>
	<input id="codigoSeguridadTxt"/>
	<label id="labelCodSegTextId"></label>
	<input id="apynTxt"/>
	<select id="tipoDocCbx"></select>
	<input id="nroDocTxt"/>
	<input id="emailTxt"/><br/>
	<button id="MY_btnPagarConBilletera"/>
	<button id="MY_btnConfirmarPago"/>
</body>

Inizialización y parametros requeridos
Para inicializar el formulario se usa window.TPFORMAPI.hybridForm.initForm. El cual permite setear los elementos y ids requeridos.

Para inicializar un ítem de pago, es necesario llamar a window.TPFORMAPI.hybridForm.setItem. Este requiere obligatoriamente el parametro publicKey que corresponde al PublicRequestKey (entregado por el SAR). Se sugiere agregar los parametros usuario, e-mail, tipo de documento y numero.

Javascript

window.TPFORMAPI.hybridForm.initForm({
    callbackValidationErrorFunction: 'validationCollector',
	callbackCustomSuccessFunction: 'customPaymentSuccessResponse',
	callbackCustomErrorFunction: 'customPaymentErrorResponse',
        callbackBilleteraFunction: 'billeteraPaymentResponse',
	botonPagarId: 'MY_btnConfirmarPago',
	botonPagarConBilleteraId: 'MY_btnPagarConBilletera',
	modalCssClass: 'modal-class',
	modalContentCssClass: 'modal-content',
	beforeRequest: 'initLoading',
	afterRequest: 'stopLoading'
});

window.TPFORMAPI.hybridForm.setItem({
    publicKey: 'taf08222e-7b32-63d4-d0a6-5cabedrb5782', //obligatorio
    defaultNombreApellido: 'Usuario',
    defaultNumeroDoc: 20234211,
    defaultMail: 'todopago@mail.com',
    defaultTipoDoc: 'DNI'
});

//callbacks de respuesta del pago
function validationCollector(parametros) {
}
function billeteraPaymentResponse(response) {
}
function customPaymentSuccessResponse(response) {
}
function customPaymentErrorResponse(response) {
}
function initLoading() {
}
function stopLoading() {
}

Callbacks
El formulario define callbacks javascript, que son llamados según el estado y la informacion del pago realizado:

  • billeteraPaymentResponse: Devuelve response si el pago con billetera se realizó correctamente.
  • customPaymentSuccessResponse: Devuelve response si el pago se realizó correctamente.
  • customPaymentErrorResponse: Si hubo algun error durante el proceso de pago, este devuelve el response con el codigo y mensaje correspondiente.

Ejemplo de Implementación: Formulario hibrido

Volver a inicio

####Obtener credenciales El SDK permite obtener las credenciales "Authentification", "MerchandId" y "Security" de la cuenta de Todo Pago, ingresando el usuario y contraseña.
Esta funcionalidad es util para obtener los parametros de configuracion dentro de la implementacion.

  • Crear una instancia de la clase User:
$http_header = array();

$connector = new Sdk($http_header, "test");//instanciar SDK

$datosUsuario = array(
	"user" => "usuario@todopago.com.ar", 
	"password" => "contraseña"
);

$credenciales = new TodoPago\Data\User($datosUsuario);

Tambien se puede pasar los datos de usuario de la siguiente manera:

$credenciales = new TodoPago\Data\User("usuario@todopago.com.ar", "contraseña");
$credenciales = new TodoPago\Data\User();
$credenciales->setUser("usuario@todopago.com.ar");
$credenciales->setPassword("contraseña");
  • Obtener respuesta de servicio:
$rta = $connector->getCredentials($credenciales);
$rta->getMerchant();
$rta->getApikey();

Observación: El Security se obtiene a partir de apiKey, eliminando TODOPAGO de este ultimo.

Volver a inicio

####Límites de cuotas a mostrar en formulario Mediante esta funcionalidad, se permite setear el número mínimo y máximo de cuotas que se desplegará en el formulario de pago.

Para hacer uso de esta funcionalidad debe agregarse en el parámetro optionsSAR_operacion del método sendAuthorizeRequest el campo MININSTALLMENTS y MAXINSTALLMENTS con el valor mínimo y máximo de cuotas a ofrecer respectivamente. En caso que no se especifiquen estos valores se mostrarán cuotas de 1 a 12.

#####Ejemplo

$optionsSAR_operacion = array(		
	...........................................................................	
	'MININSTALLMENTS' => 3, 	
	'MAXINSTALLMENTS' => 8, //Nro maximo de cuotas a mostrar en el formulario, OPCIONAL.
	...........................................................	
);

Volver a inicio

##Diagrama de secuencia imagen de configuracion

Volver a inicio

Tablas de Referencia

######Provincias

Solo utilizado para incluir los datos de control de fraude

ProvinciaCódigo
CABAC
Buenos AiresB
CatamarcaK
ChacoH
ChubutU
CórdobaX
CorrientesW
Entre RíosE
FormosaP
JujuyY
La PampaL
La RiojaF
MendozaM
MisionesN
NeuquénQ
Río NegroR
SaltaA
San JuanJ
San LuisD
Santa CruzZ
Santa FeS
Santiago del EsteroG
Tierra del FuegoV
TucumánT

Volver a inicio

Tabla de errores

Id mensajeMensaje
-1Aprobada.
1081Tu saldo es insuficiente para realizar la transacción.
1100El monto ingresado es menor al mínimo permitido
1101El monto ingresado supera el máximo permitido.
1102La tarjeta ingresada no corresponde al Banco indicado. Revisalo.
1104El precio ingresado supera al máximo permitido.
1105El precio ingresado es menor al mínimo permitido.
2010En este momento la operación no pudo ser realizada. Por favor intentá más tarde. Volver a Resumen.
2031En este momento la validación no pudo ser realizada, por favor intentá más tarde.
2050Lo sentimos, el botón de pago ya no está disponible. Comunicate con tu vendedor.
2051La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.
2052La operación no pudo ser procesada. Por favor, comunicate con tu vendedor.
2053La operación no pudo ser procesada. Por favor, intentá más tarde. Si el problema persiste comunicate con tu vendedor
2054Lo sentimos, el producto que querés comprar se encuentra agotado por el momento. Por favor contactate con tu vendedor.
2056La operación no pudo ser procesada. Por favor intentá más tarde.
2057La operación no pudo ser procesada. Por favor intentá más tarde.
2059La operación no pudo ser procesada. Por favor intentá más tarde.
90000La cuenta destino de los fondos es inválida. Verificá la información ingresada en Mi Perfil.
90001La cuenta ingresada no pertenece al CUIT/ CUIL registrado.
90002No pudimos validar tu CUIT/CUIL. Comunicate con nosotros acá para más información.
99900El pago fue realizado exitosamente
99901No hemos encontrado tarjetas vinculadas a tu Billetera. Podés adherir medios de pago desde www.todopago.com.ar
99902No se encontro el medio de pago seleccionado
99903Lo sentimos, hubo un error al procesar la operación. Por favor reintentá más tarde.
99970Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99971Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99977Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99978Lo sentimos, no pudimos procesar la operación. Por favor reintentá más tarde.
99979Lo sentimos, el pago no pudo ser procesado.
99980Ya realizaste un pago en este sitio por el mismo importe. Si querés realizarlo nuevamente esperá 5 minutos.
99982En este momento la operación no puede ser realizada. Por favor intentá más tarde.
99983Lo sentimos, el medio de pago no permite la cantidad de cuotas ingresadas. Por favor intentá más tarde.
99984Lo sentimos, el medio de pago seleccionado no opera en cuotas.
99985Lo sentimos, el pago no pudo ser procesado.
99986Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99987Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99988Lo sentimos, momentaneamente el medio de pago no se encuentra disponible. Por favor intentá más tarde.
99989La tarjeta ingresada no está habilitada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente.
99990La tarjeta ingresada está vencida. Por favor seleccioná otra tarjeta o actualizá los datos.
99991Los datos informados son incorrectos. Por favor ingresalos nuevamente.
99992La fecha de vencimiento es incorrecta. Por favor seleccioná otro medio de pago o actualizá los datos.
99993La tarjeta ingresada no está vigente. Por favor seleccioná otra tarjeta o actualizá los datos.
99994El saldo de tu tarjeta no te permite realizar esta operacion.
99995La tarjeta ingresada es invalida. Seleccioná otra tarjeta para realizar el pago.
99996La operación fué rechazada por el medio de pago porque el monto ingresado es inválido.
99997Lo sentimos, en este momento la operación no puede ser realizada. Por favor intentá más tarde.
99998Lo sentimos, la operación fue rechazada. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.
99999Lo sentimos, la operación no pudo completarse. Comunicate con la entidad emisora de la tarjeta para verificar el incoveniente o seleccioná otro medio de pago.

Volver a inicio

About

http://www.todopago.com.ar/


Languages

Language:PHP 70.9%Language:HTML 27.9%Language:CSS 1.3%