Skip to content

merkuriospam/SDK-PHP-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

todopago-sdk-php

Modulo para conexión con gateway de pago Todo Pago

######Instalación ######Versiones de php soportadas ######Generalidades ######Uso ######Datos adicionales para prevención de fraude ######Ejemplo ######Modo test ######Status de la operación ######Diagrama de secuencia ######Tablas de referencia

Instalación

Se debe descargar la última versión del SDK desde el botón Download ZIP, 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.
Volver a inicio

Versiones de php soportadas

La versión implementada de la SDK, esta testeada para versiones desde PHP5.3 en adelante.
Volver a inicio

Generalidades

Esta versión soporta únicamente pago en moneda nacional argentina (CURRENCYCODE = 32). Volver a inicio

Uso

####1.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

####2.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
	'CURRENCYCODE'=> 32, //por el momento es el único tipo de moneda aceptada
	'AMOUNT'=>54.00,
	'EMAILCLIENTE'=>'email_cliente@dominio.com',
	);		

Ejemplo de Respuesta

    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, en caso de éxito o URL_ERROR, en caso de que por algún motivo el formulario rechace el pago)

Códigos de rechazo

CódigoDescripción
-1Aprobada
403Error de Autenticación
404Transacción Inexistente
702Cuenta Inexistente
720Error de Parametrización Interno
999Error de Sistema

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)

####3.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'), 		
      '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)

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. CONDICIONAL. 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. CONDICIONAL.		
	'CSITPRODUCTNAME'=>'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. CONDICIONAL.		
	'CSITPRODUCTSKU'=>'LEVJNSL36GN', //Código identificador del producto. CONDICIONAL.		
	'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. CONDICIONAL.		
	'CSITQUANTITY'=>'1', //Cantidad del producto. CONDICIONAL.		
	'CSITUNITPRICE'=>'1254.40', //Formato Idem CSITTOTALAMOUNT. CONDICIONAL.		
	...........................................................		

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.

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.

Volver a inicio

##Diagrama de secuencia imagen de configuracion

Tablas de Referencia

######Códigos de Estado ######Provincias

Codigos de Estado

IdEstadoDescripción
1Ingresada
2A procesar
3Procesada
4Autorizada
5Rechazada
6Acreditada
7Anulada
8Anulación Confirmada
9Devuelta
10Devolución Confirmada
11Pre autorizada
12Vencida
13Acreditación no cerrada
14Autorizada *
15A reversar
16A registar en Visa
17Validación iniciada en Visa
18Enviada a validar en Visa
19Validada OK en Visa
20Recibido desde Visa
21Validada no OK en Visa
22Factura generada
23Factura no generada
24Rechazada no autenticada
25Rechazada datos inválidos
28A registrar en IdValidador
29Enviada a IdValidador
32Rechazada no validada
38Timeout de compra
50Ingresada Distribuida
51Rechazada por grupo
52Anulada por grupo

Provincias

Solo utilizado para incluir los datos de control de fraude

ProvinciaCódigo
CABAC
Buenos AiresB
CatamarcaK
ChacoH
ChubutU
CórdobaX
CorrientesW
Entre RíosR
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](#inicio)