Tarjeta de Crédito

Integración por webservices

La integración a través de webservices consiste en que desde el sitio web del comercio se realiza un llamado directo a los webservices de procesamiento de Place to Pay sin tener que redireccionar a nuestra plataforma.

Esta integración implica que el sitio web del comercio debe tener altas medidas de seguridad, pues desde allí se hará la captura de los datos sensibles de la transacción.

¿Cómo empezar?

El método de integración avanzado o AIM contempla las operaciones básicas para el procesamiento de tarjetas no presenciales: autorización, captura, reverso, asiento y anulación. A continuación, describimos cada uno de los usos y los datos requeridos en la trama para para cada operación. La respuesta para cada una está unificada en un solo tipo de trama resultante. 

Esta integración permite minimizar el ancho de banda requerido para la comunicación, así como facilitar su implementación en cualquier lenguaje de programación capaz de establecer una comunicación por sockets a través del protocolo HTTPS.

¿Cómo funciona la implementación?

  1. Se compilan los datos enviados a la plataforma, incluyendo los datos sensibles de la tarjeta (número, fecha de expiración, CVV2).
  1. Se prepara la petición POST a nivel de servidor, ten en cuenta que el servicio espera los datos en codificación ISO-8859-1. Los datos a ser remitidos a Place to Pay dependerán de la operación que desea realizar.
  1. Se hace el POST a Place to Pay y se espera por la respuesta. Normalmente, los tiempos de respuesta son de 2 a 3 segundos, sin embargo, dependiendo de congestión de la red u otros factores, el tiempo puede incrementarse. Verifica que el script de tu implementación espera al menos 15 o 20 segundos antes de dar un timeout.
  1. Si obtuviste una respuesta de la plataforma, entonces desglósala (la respuesta se entrega como una cadena de caracteres separados por coma e identifica los datos relevantes para tu sistema, como: estado de la transacción, motivo asociado al estado, franquicia, banco emisor, autorización, recibo e identificación de la transacción en Place to Pay.
  1. Si no obtuviste una respuesta válida o un timeout, consulta de la transacción para determinar el estado de la misma.
  1. Presenta el resultado de la transacción y activa las otras rutas de flujo en tu sistema.

¿En qué casos es mejor usar este tipo de integración?

La integración AIM se recomienda únicamente en los casos que no sea factible que el usuario realice la transacción ingresando los datos sensibles en Place to Pay o en donde se requiere un control particular de la operación. Algunos ejemplos son:

  • Cobros recurrentes desde una base de datos propietaria.
  • Integración con un sistema de audiorespuesta.
  • Múltiples transacciones a diferentes recaudadores con la misma información del tarjetahabiente.
  • Interfaz móvil propietaria, no basada en HTML. 
  • Integración con sistemas cuya entrada de los datos sensibles no la realice directamente el tarjetahabiente.

¿Qué obligaciones tengo al usar esta integración?

Ten en cuenta que al usar este tipo de integración, estás suministrando todos los datos del comprador incluyendo los datos sensibles de la tarjeta, este hecho requiere que la captura de la información sea por un mecanismo seguro que no ponga en peligro los datos del tarjeta habiente. Si la información se captura por una página web, el punto debe estar sobre protocolo seguro HTTPS, usando certificados de seguridad expedidos por una entidad acreditada

Si la captura la realiza por un Call Center, quien obtiene los datos sensibles debe ser un mecanismo de IVR (Interactive Voice Response) o audiorespuesta; esto implicaría un rompimiento en el proceso entre el proceso que realiza el operador con su CRM y el IVR quien captura los datos sensibles. Finalmente el CRM consolida los dos conjuntos de datos y los remite a Place to Pay.

Si la captura proviene de una base de datos de tarjetas previamente inscritas, asegúrate que esta información está encriptada por un mecanismo seguro de encriptación como AES o 3DES, desencripta solo en el momento en que construye la trama a ser enviada a Place to Pay. Nuestra pasarela ofrece servicios de tokenización que pueden ser usados.

Ten en cuenta que como regla general no debe almacenar el número de tarjeta, fecha de vencimiento y CVV2. Estos solo pueden tener persistencia durante la solicitud de la autorización, una vez procesada no deben ser almacenados.

Como cualquier proceso de integración, este requerirá una certificación del personal de soporte de Place to Pay para revisar temas de funcionamiento, mejores prácticas y usabilidad.

Datos para la operación

Describimos las tramas que deben ser enviadas a Place to Pay para procesar una operación, de igual forma la trama de respuesta entregada por la plataforma.

Solicitud de autorización

Este tipo de solicitud permite realizar un cobro en línea y se logra remitiendo el valor AUTH_ONLY en la variable x_type. En la tabla que aparece más abajo se determinan los campos para este tipo de operación.

Solicitud de captura

Este tipo de operación preprocesa la transacción y la deja en estado pendiente. Posteriormente, se deberá realizar una operación de asiento o de anulación y se logra remitiendo el valor CAPTURE_ONLY en la variable x_type.

Solicitud de reverso

Una reverso tiene sentido sobre una transacción previamente aprobada y tiene una restricción: sólo puede solicitarse el mismo día de la transacción aprobada con un límite a las 8:00 p.m hora colombiana (GMT -05:00). En caso de realizar el proceso por medio del webservice después de esta hora, también se debe enviar el correo a la respectiva red financiera solicitando la confirmación del reverso exitoso.

Ten en cuenta que un reverso puede declinar y que dependerá del banco emisor dar o no la autorización.

Descripción de los campos

A continuación, describimos cada uno de los campos que son usados en las diferentes tramas. Se han categorizado acorde al tipo de información que representan; la columna valor posible determina, en algunos casos, el único valor permitido para el campo:

Datos de la especificación

Campo Tipo Valor posible Observaciones
x_version String[3] 2.0 Versión de la trama para comunicarse con Place to Pay.
x_delim_data String[5] TRUE Indicador de que los datos de respuesta van delimitados por una coma
x_relay_response String[5] FALSE Indicador de si no espera la

respuesta.

x_language String[2] Código del idioma acorde a ISO 631-1 en que se dan las notificaciones en la plataforma. Por defecto es ES (español).

Datos del comercio y operación

Campo Tipo Valor posible Observaciones
x_login String[32] Identificador del sitio del comercio en la plataforma.
x_tran_key String[16] Clave para enviar una transacción.
x_test_request String[5] TRUE / FALSE Indicador de si la transacción va en modo de prueba o no. Por defecto es FALSE (producción).
x_type String[12] AUTH_ONLY / CAPTURE_ONLY / CREDIT / SETTLE / VOID Tipo de operación a realizar.
x_method String[2] CC Método usado para el procesamiento.
x_email_merchant String[5] TRUE / FALSE Indicador de si debe enviarse un correo electrónico al comercio cuando haya una transacción exitosa.
x_email_customer String[5] TRUE / FALSE Indicador de si debe enviarse un correo electrónico al pagador cuando haya una transacción exitosa.
x_customer_ip String[15] Dirección IP desde la cual está realizando el pago el usuario.

Datos del cobro

Campo Tipo Valor posible Observaciones
x_invoice_num String[32] Número de referencia, orden de pedido o factura relacionada.
x_description String[255] Descripción de la compra.
x_currency_code String[3] Código de la moneda acorde a ISO 4217 en la cual está expresado el cobro.
x_amount Decimal [9.2], Valor total de la compra incluyendo impuestos.
x_tax Decimal [9.2], Valor total de los impuestos.
x_amount_base Decimal [9.2], Valor base de devolución de impuestos (solo aplica para Colombia en los casos en que el impuesto sea del 16% o 10%). Se define como el valor sobre el cual fue calculado el impuesto. Por lo tanto si no hay impuesto, no hay base de devolución.
x_token String[64] Token a usarse, en el caso de que haya tokenizado los datos de la tarjeta.
x_card_num String[16] Número de la tarjeta, no requerido si usa token.
x_card_type String[1] C / A / R Tipo de la tarjeta, no requerido si usa token.

C = crédito

A = débito ahorros

R = débito corriente

x_exp_date String[12] Fecha de vencimiento de la tarjeta, no requerido si usa token, se aceptan los siguientes formatos: MMAA, MMAAAA, AAAAMMDD, AAAA/MM/DD, AAAA-MMDD.
x_card_code String[4] Dígitos de verificación de la tarjeta (CVV2).
x_differed Integer 1 – 36 Número de cuotas a las cuales difiere el pago. En su ausencia, se supone a 1 cuota.

Datos para cobros recurrentes

Ten en cuenta que los valores de recurrencia son todos requeridos si el valor del campo x_recurring_bill es TRUE, estos datos no tienen sentido en otro caso.

Campo Tipo Valor posible Observaciones
x_recurring_bill String[5] TRUE / FALSE Indicador de si la transacción es recurrente. En su ausencia se supone FALSE.
x_recurring_periodicity String [1] Y / M / D Periodicidad para volver a

enviar la transacción.

Y = anual

M = mensual

D = diaria

x_recurring_interval Integer Intervalo aplicado a la periodicidad, por ejemplo si el intervalo es 3 y la

periodicidad es M, entonces se estará haciendo el cobro trimestralmente. En su ausencia, se supone 1.

x_recurring_max_periods Integer Parte del control de número de veces que se realiza el cobro, corresponde al máximo de veces que sucederá la recurrencia.

Si no se desea establecer un máximo debe indicarse -1. Debe especificarse este parámetro o en su defecto x_recurring_due_date.

x_recurring_due_date String[10] Parte del control de número de veces que se realiza el cobro, corresponde a la fecha hasta la cual se sucederá la recurrencia.

Debe establecerse como una fecha

en formato AAAA-MM-DD.

Si no se desea establecer un máximo debe indicarse UNLIMITED. Debe

especificarse este parámetro o en su defecto x_recurring_max_periods.

Datos para cobros con Split

Ten en cuenta que para un pago con dispersión de fondos, el comercio debe estar marcado en Place to Pay para soportar este tipo de operaciones. De igual forma, el x_airline debe llegar en la trama con un código de convenio válido, de lo contrario no hay dispersión y sólo realizamos el cobro del valor especificado en x_amount.

Campo Tipo Valor posible Observaciones
x_airline Int Código del convenio, cuando se especifican; los valores dados en x_amount serán cobrados a favor de la entidad del convenio. Así mismo, se habilita el cobro del valor dado en el x_service_fee.
x_airport_tax Decimal [8,2] Valor de la tasa aeroportuaria, solo aplica cuando el convenio es una aerolínea.
x_service_fee_code Int 99 Código de compensación para cuando hay dispersión de fondos. Identifica que el valor del x_service_fee será a favor del establecimiento que solicitó la transacción.
x_service_fee Decimal [8,2] Valor total de la tasa administrativa incluyendo impuestos, este será el valor recaudado a nombre del establecimiento.
x_service_fee_tax Decimal [8,2] Valor de la tasa administrativa.
x_service_fee_base Decimal [8,2] Valor base de devolución de impuestos para la TA (sólo aplica para Colombia en los casos en que el impuesto sea del 16% o 10%).

Datos del pagador

Campo Tipo Valor posible Observaciones
x_cust_id String [20] La identificación del pagador está conformado por el tipo y número de documento, separados por un espacio. Los tipos de documento válidos son:

CC: Cédula de ciudadanía colombiana

CE: Cédula de extranjería

TI: Tarjeta de identidad
NIT: Número de identificación tributaria

PPN: Pasaporte

SSN: Social security number

x_first_name String[30] Nombres completos
x_last_name String[30] Apellidos completos
x_company String[50] Compañía para la cual labora
x_address String[80] Dirección de correspondencia
x_city String[30] Ciudad.
x_state String[30] Estado, departamento o provincia.
x_zip String[10] Código postal.
x_country String[2] Código del país acorde a ISO 3166-1. http://www.iso.org/iso/english_country_names_and_code_elements.
x_phone String[30] Número de telefonía fija, preferiblemente con indicativo
x_fax String[30] Número de fax, preferiblemente con indicativo
x_mobile String[30] Número de fax o móvil, preferiblemente con indicativo
x_email String[50] Dirección de correo electrónico.

Datos del comprador o beneficiario receptor del bien o servicio

Campo Tipo Valor posible Observaciones
x_ship_to_id String [20] La identificación del pagador está conformado por el tipo y número de documento, separados por un espacio. Los tipos de documento válidos son:

CC: Cédula de ciudadanía colombiana

CE: Cédula de extranjería

TI: Tarjeta de identidad
NIT: Número de identificación tributaria

PPN: Pasaporte

SSN: Social security number

x_ship_to_first_name String[30] Nombres completos.
x_ship_to_last_name String[30] Apellidos completos.
x_ship_to_company String[50] Compañía para la cual labora.
x_ship_to_address String[80] Dirección de correspondencia.
x_ship_to_city String[30] Ciudad.
x_ship_to_state String[30] Estado, departamento o provincia.
x_ship_to_zip String[10] Código postal.
x_ship_to_country String[2] Código del país acorde a ISO 3166-1. http://www.iso.org/iso/english_country_names_and_code_elements.
x_ship_to_phone String[30] Número de telefonía fija, preferiblemente con indicativo
x_ship_to_mobile String[30] Número de móvil, preferiblemente con indicativo
x_ship_to_email String[50] Dirección de correo electrónico.

Datos para operaciones sobre transacciones

Campo Tipo Valor posible Observaciones
x_franchise String[5] Código de la franquicia con la cual se hizo el pago.
x_approval_code String[10] Código de aprobación entregado por la entidad financiera en la transacción

original.

x_transaction_id String[10] Número único de la transacción proveniente de la transacción original.
x_parent_session String[32] Identificador interno de la transacción que se desea asentar o anular, corresponde al x_placetopay_id.

Datos adicionales para almacenar con la transacción

Campo Tipo Valor posible Observaciones
x_additional_data Array Utiliza esta estructura para enviar datos adicionales a Place to Pay que desees almacenar con la transacción. Básicamente, este campo actúa como un diccionario de datos tipo clave => valor.

La clave tiene restricciones de forma, no puede iniciar con un número y solo debe contener letras no acentuadas, números, guiones medios o guiones de piso.  Tiene una longitud máxima de 30 caracteres. El valor tiene una longitud máxima de 255 caracteres.

Ej:

x_additional_data[dato1] = “Hola”

x_additional_data[otroDato] = “Mundo”

Datos adicionales para la transacción

Estos son datos que se remiten a la plataforma, y no son tomados en cuenta en la transacción.  Pero se retornan en la respuesta.

Matriz de campos por tipo de operación

A continuación, se muestra una matriz de los campos que van en la trama por tipo de operación. Las convenciones son R (requerido), O (opcional), C (condicionado a otro campo), – (no aplica).  Cuando se especifica condicionado a otro campo, por favor ve el detalle de la descripción de campos para entender de cual depende.

AUTH_ONLY CAPTURE_ONLY CREDIT SETTLE VOID
x_version R R R R R
x_delim_data R R R R R
x_relay_response R R R R R
x_language O O
x_login R R R R R
x_tran_key R R R R R
x_test_request O O
x_type R R R R R
x_method O O
x_email_merchant O O
x_email_customer R O
x_customer_ip R R R R
x_invoice_num R R
x_description O O
x_currency_code O O
x_amount R R
x_tax R R
x_amount_base R R
x_token C C
x_card_num C C
x_card_type C C
x_exp_date C C
x_card_code C C
x_differed R R
x_recurring_bill O O
x_recurring_periodicity C C
x_recurring_interval C C
x_recurring_max_periods C C
x_recurring_due_date C C
x_airline O O
x_airport_tax C C
x_service_fee_code O O
x_service_fee C C
x_service_fee_tax C C
x_service_fee_base C C
x_cust_id R R
x_first_name R R
x_last_name O O
x_company O O
x_address O O
x_city O O
x_state O O
x_zip O O
x_country O O
x_phone

Recomendamos enviarlo para controlar el fraude

O O
x_fax O O
x_mobile O O
x_email O O
x_ship_to_id O O
x_ship_to_first_name O O
x_ship_to_last_name O O
x_ship_to_company O O
x_ship_to_address O O
x_ship_to_city O O
x_ship_to_state O O
x_ship_to_zip O O
x_ship_to_country O O
x_ship_to_phone O O
x_ship_to_mobile O O
x_ship_to_email O O
x_additional_data O O
x_franchise R R R
x_approval_code R
x_transaction_id R
x_parent_session R R

Trama de respuesta

A continuación se detalla la trama de respuesta para cualquiera de las operaciones definidas por el servicio AIM. La trama de respuesta consiste en una cadena de caracteres separados por coma en el siguiente orden posicional.

# Campo Tipo Observaciones
1 x_response_code Integer Respuesta a la transacción solicitada.

0: Error

1: Aprobada

2: Declinada

3: Pendiente

2 x_response_subcode String[5] Código interno que acompaña la

respuesta.

3 x_response_reason_code String[3] Código de la razón que por la cual se dió la respuesta.
4 x_response_reason_text String[255] Motivo de la respuesta.
5 x_approval_code String[10] Código de aprobación entregado por la entidad financiera.
6 x_avs_result_code String[1] Resultado de la validación de los datos de dirección del comprador.

Actualmente se retorna
S: Servicio no soportado

7 x_transaction_id String[10] Identificador de la transacción establecido por la red.
8 x_invoice_num Copia del dato recibido
9 x_description Copia del dato recibido
10 x_amount Copia del dato recibido
11 x_method Copia del dato recibido
12 x_type Copia del dato recibido
13 x_cust_id Copia del dato recibido
14 x_first_name Copia del dato recibido
15 x_last_name Copia del dato recibido
16 x_company Copia del dato recibido
17 x_address Copia del dato recibido
18 x_city Copia del dato recibido
19 x_state Copia del dato recibido
20 x_zip Copia del dato recibido
21 x_country Copia del dato recibido
22 x_phone Copia del dato recibido
23 x_fax Copia del dato recibido
24 x_email Copia del dato recibido
25 x_ship_to_first_name Copia del dato recibido
26 x_ship_to_last_name Copia del dato recibido
27 x_ship_to_company Copia del dato recibido
28 x_ship_to_address Copia del dato recibido
29 x_ship_to_city Copia del dato recibido
30 x_ship_to_state Copia del dato recibido
31 x_ship_to_zip Copia del dato recibido
32 x_ship_to_country Copia del dato recibido
33 x_tax Copia del dato recibido
34 x_duty Mantenido por compatibilidad
35 x_freight Mantenido por compatibilidad
36 x_tax_exempt Mantenido por compatibilidad
37 x_po_num Mantenido por compatibilidad
38 x_md5_hash String[32] MD5 del valor de md5HashKey + x_login + x_transaction_id + x_amount; el amount va formateado con dos decimales. El hash es un valor establecido en la plataforma.  Sirve para comprobar la estabilidad de la trama.
39 x_CVV2_response String[1] Indicador de comprobación del

CVV2.

P: No procesado

40 x_CAVV_response String[1] Indicador de comprobación del

CAVV.

41 x_bank_currency String[3] Código de la moneda con la cual se hizo el recaudo.
42 x_bank_factor Decimal Tasa de conversión de la moneda original vs la moneda de recaudo.
43 x_bank_amount Decimal Valor recaudado convertido a la moneda esperada por la entidad financiera.
44 x_franchise String[5] Código de la franquicia con la cual

se hizo el pago.

CR_CR => Credencial

CR_DN => Diners

CR_AM => AMEX

CR_VS => Visa

CR_MC => Mastercard

45 x_bank_name String[30] Nombre del banco que autorizó la

transacción (no siempre disponible)

46 x_placetopay_id String[32] Identificador único de la transacción retornado por Place to Pay
47 x_ta_response_code
48 x_ta_response_reason_code
49 x_ta_approval_code
50 x_ta_transaction_id
51 x_placetopay_internal_reference Int Referencia interna en Place to Pay enviada a la red como referencia de la transacción
52 x_response_reason_code_b24 String[3] Codigo BASE24 equivalente al código ISO que llega en x_response_reason_code
53 x_truncated_pan String[16] Número de tarjeta de crédito truncado admisible para ser visualizado
54 De la posición 54 a 68 se reserva para usos futuros.
55 Se retransmiten los datos adicionales recibidos del comercio.

Consumo del webservice de sonda

Para aquellas transacciones que presentan una falla en los tiempos de respuesta, o que no puede ser verificado el x_md5_hash, deberá consumirse un Webservice para obtener de primera mano la información de la transacción.

En los casos que la transacción tiene respuesta pendiente, la regla general es que debe consumirse el servicio cada 12 minutos para las operaciones que tengan al menos 7 minutos de antigüedad. Esto implica que debe existir un proceso automático solicitando al webservice las operaciones que llevan más de 7 minutos pendientes y que el barrido debe hacerse cada 12 minutos.

Ten presente que en el proceso de certificación revisaremos de los consumos de sonda para que concuerden con los tiempos definidos.

queryTransaction

Consulta el estado de una transacción acorde a los parámetros usados, ten en cuenta que la respuesta es un arreglo de transacciones.

Parámetros

Nombre Tipo Descripción
auth Authentication Datos de autenticación
request QueryRequest Parámetros para búscar la transacción

Retorno:

Transaction[]. Transacciones que concuerdan con la solicitud.

Authentication: estructura para autenticarse con el webservice.

El login y el tranKey son dados por Place to Pay para realizar transacciones en nombre de un sitio de recaudo.

La semilla usada en el consumo debe ser una fecha en formato ISO 8601 (AAAA-MM-DDTHH:NN:SSZZZ, ej: 2013-04-11T08:47:21-05:00), el sistema verificará que la petición no haya expirado, por ello es fundamental una sincronización del reloj del servidor. Más adelante encontrarás un apartado sobre la obtención de la semilla en el formato solicitado y la generación del Hash.

El tranKey enviado en el consumo corresponde a un hash generado con SHA1 de la concatenación de la semilla y del tranKey originalmente enviado por Place to Pay.

Propiedades

Nombre Tipo Descripción
login string[32] Identificador habilitado para el consumo del API, entregado por Place to Pay.
tranKey string[40] Llave transaccional para el consumo del API SHA1(seed + tranKey)
seed string Semilla usada para el consumo del API en el proceso del hash por SHA1 del tranKey, ISO 8601.
additional Attribute[] Datos adicionales a la estructura de autenticación

QueryRequest

Estructura para solicitar la búsqueda de una transacción

Propiedades

Nombre Tipo Descripción
reference String[32] Número de referencia, orden de compra o factura relacionada. (x_invoice_num usado).
currency String[3] Moneda utilizada en la solicitud acorde a ISO 4217.
totalAmount double Valor total de la operación, si es de aerolínea con TA debe ser la suma del valor del tiquete, la tasa aeroportuaria y la tarifa administrativa.

x_amount + x_airport_tax + x_service_fee.

requestDate String Fecha de solicitud o creación de la transacción acorde a ISO 8601, se obvia la hora de la solicitud

Transaction

Estructura con la información de una transacción

Propiedades

Nombre Tipo Descripción
transactionID int El ID de referencia pasado al procesador.
sessionID string Identificador único de la sesión en Place to Pay.
reference string Referencia de la transacción.
requestDate string Fecha de solicitud o creación de la transacción acorde a ISO 8601.
bankProcessDate string Fecha de procesamiento de la transacción acorde a ISO 8601.
onTest boolean Indicador de si la transacción es en modo de pruebas o no.
description string El dato pasado como x_description.
currency string El dato pasado como x_currency.
totalAmount double Valor total de la compra.
taxAmount double Impuesto asociado a la compra.
devolutionBase double Base de devolución del IVA.
tipAmount double El valor de la tasa aeroportuaria: x_airport_tax.
airline int Código de la aerolínea.
serviceFee double Valor total de la tasa administrativa.
serviceFeeTax double Impuesto asociado a la tasa administrativa.
serviceFeeBase double Base de devolución del IVA asociado a la tasa administrativa.
payer Person Información del pagador.
buyer Person Información del comprador (x_shipping_ fields)
shipping Person Información del receptor, no usado actualmente.
ipAddress string Dirección IP desde la cual realiza la transacción el pagador.
userAgent string Navegador utilizado por el pagador.
franchise string El código de la franquicia usada.
franchiseName string Nombre de la franquicia.
bankName string Nombre del banco del tarjeta o cuenta habiente.
bankCurrency string Moneda aceptada por el banco.
bankFactor float Factor de conversión de la moneda.
authorization string Número de autorización.
receipt string Número de recibo.
refunded boolean Indicador de si la transacción fue reversada.
transactionState string Información del estado de la transacción [OK, NOT_AUTHORIZED, PENDING, FAILED]
responseCode int Estado de la operación:

0 = Fallida

1 = Aprobada

2 = Rechazada

3 = Pendiente

responseReasonCode string Código interno de respuesta en Place to Pay.
responseReasonText string Motivo de la respuesta en PlacetoPay.
serviceFeeTransactionState string Estado de la transacción de la tasa administrativa [OK, NOT_AUTHORIZED, PENDING, FAILED]
serviceFeeResponseCode int Estado de la operación de tasa administrativa:

0 = Fallida

1 = Aprobada

2 = Rechazada

3 = Pendiente

serviceFeeResponseReasonCode string Código interno de respuesta en Place to Pay para la tasa administrativa.
serviceFeeResponseReasonText string Motivo de la respuesta en Place to Pay para la tasa administrativa.
serviceFeeAuthorization string Número de autorización de la tasa administrativa.
serviceFeeReceipt string Número de recibo de la tasa administrativa.
additional Attribute[] Datos adicionales proporcionados con la transacción.

Envío de transacciones de prueba

En la plataforma, los comercios pueden estar en pruebas o producción. Dependiendo de este modo preconfigurado tiene sentido el parámetro x_test_request; así mismo como las respuestas obtenidas.

Configuración del comercio Configuración del x_test_request Modo de transacción
pruebas TRUE pruebas
pruebas FALSE pruebas
producción TRUE pruebas
producción FALSE producción

En modo de pruebas únicamente serán aceptados los siguientes números de tarjetas:

Franquicia Tarjeta Comportamiento
Visa 4005580000000040 Rechaza
Visa 4007000000027 Autoriza
Visa 4111111111111111 Autoriza
Visa 4212121212121214 Deja la operación pendiente como si fuera modo captura, la operación se debe asentar o anular por el panel de Place to Pay o en su defecto mediante una operación SETTLE o VOID.
Visa 4666666666666669 Toma 3 minutos para simular un timeout en su autorización. Así que el consumo del servicio fallará por tiempo, lo cual obligará al consumo de la sonda para verificar cuando la operación culmina su procesamiento. Ten en cuenta los tiempos de consumo del webservice.
MasterCard 5424000000000015 Autoriza
MasterCard 5406251000000008 Autoriza
AmericanExpress 370000000000002 Autoriza
Diners 36018623456787 Autoriza
BBVA Club Campestre 8130010000000000 Autoriza

Ejemplo de generación del Hash

A continuación se presenta como se puede generar el Hash en diferentes lenguajes de programación.  Tenga en cuenta que para todos los ejemplos el valor TotalAmount se supone un string formateado como ####.##.


// generation of MD5Hash to validate the response of Place to Pay

// when use AIM to request the transaction

$hashString = md5(PLACETOPAY_MD5HASH
   . PLACETOPAY_LOGIN
   . $x_transaction_id
   . $x_amount, false);

// creation of the Authentication object

// when consume the Webservice

$auth = new stdClass();

$auth->login = PLACETOPAY_LOGIN;

$auth->seed = date('c');

$auth->tranKey = sha1($auth->seed . PLACETOPAY_TRANKEY);

using System.Text;
using System.Security.Cryptography;
using System.Globalization;

private string GetMD5(string text)
{

	MD5 md5 = System.Security.Cryptography.MD5.Create();

	byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(text);

	byte[] hash = md5.ComputeHash(inputBytes);

	StringBuilder sb = new StringBuilder();

	for (int i = 0; i < hash.Length; i++)
	{
		sb.Append(hash[i].ToString("x2"));
	}

	return sb.ToString();
}

private string GetSHA1(string text)
{

	ASCIIEncoding UE = new ASCIIEncoding();

	byte[] hashValue;

	byte[] message = UE.GetBytes(text);

	SHA1 hashString = new SHA1CryptoServiceProvider();

	string hex = "";

	hashValue = hashString.ComputeHash(message);

	foreach (byte x in hashValue)
	{
		hex += String.Format("{0:x2}", x);
	}

	return hex;
}

// generation of MD5Hash to validate the response of Place to Pay
// when use AIM to request the transaction
string hashString = GetMD5(PLACETOPAY_MD5HASH 
						+ PLACETOPAY_LOGIN 	
						+ x_transaction_id
						+ x_amount);

// creation of the Authentication object
// when consume the Webservice
PlacetoPayWS.Authentication auth = new PlacetoPayWS.Authentication();

auth.login = PLACETOPAY_LOGIN;
auth.seed = DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture);

auth.tranKey = GetSHA1(auth.seed + PLACETOPAY_TRANKEY);

import java.security.MessageDigest;
import java.util.Formatter;
import java.util.Date;
import java.text.SimpleDateFormat;

private static String byteToHex(final byte[] hash)
{

	Formatter formatter = new Formatter();

	for (byte b : hash)
	{
		formatter.format("%02x", b);
	}

	String result = formatter.toString();

	formatter.close();

	return result;
}

private static String GetHash(String algo, String text)
{

	String hash = "";

	try
	{
		MessageDigest crypt = MessageDigest.getInstance(algo);

		crypt.reset();

		crypt.update(text.getBytes("UTF-8"));

		hash = byteToHex(crypt.digest());
	}
	catch(UnsupportedEncodingException e)
	{
		e.printStackTrace();
	}

	return hash;
}

// generation of MD5Hash to validate the response of Place to Pay
// when use AIM to request the transaction
string hashString = GetHash("MD5", PLACETOPAY_MD5HASH
								+ PLACETOPAY_LOGIN
								+ x_transaction_id
								+ x_amount);

// creation of the Authentication object
// when consume the Webservice
Date now = new Date();

SimpleDateFormat isoDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

PlacetoPayWS.Authentication auth = new PlacetoPayWS.Authentication();

auth.setLogin(PLACETOPAY_LOGIN);

auth.setSeed(isoDate.format(now));

auth.setTranKey(GetHash("SHA-1", auth.getSeed() + PLACETOPAY_TRANKEY));