Redirección

Descripción de la interfaz

La siguiente información describe los métodos que provee el web service, las operaciones son de tipo solicitud – respuesta y también se describen los parámetros de ingreso para cada operación y los vínculos a las estructuras de datos utilizadas.

createRequest

Solicita la creación de la sesión (petición de cobro o suscripción) y retorna el identificador y la URL de procesamiento.

Parámetros:

Name Type Description
payload RedirectRequest Información sobre el pago requerido

Return
RedirectResponse. Es un objeto con la información de redirección

getRequestInformation

Obtiene la información de la sesión y transacciones realizadas.

 

Parameters

Name Type Description
requestId int Identificador de la sesión a consultar.

Return
RedirectInformation. Información del estado de la transacción

ReversePayment

Permite reversar un pago aprobado con el código de referencia interna.

 

Parameters

Name Type Description
internalReference int Referencia interna de la transacción a reversar que se encuentra en el listado de transacciones del getRequestInformation (payment).

Return
ReverseResponse. Información de estado de la operación.

collect

Permite realizar cobros sin la intervención del usuario usando medios de pago previamente suscritos.

 

Parameters

Name Type Description
payload CollectRequest Datos del pago, pagador y medio de pago a implementar como se describe en la estructura para realizar el cobro.

Return
RedirectInformation Información de estado de la operación.

Notificación de resolución de pago

Configura en tu servidor una URL de notificación que, en caso de que el pago se cancele o apruebe, reciba una notificación mediante POST con una estructura similar a la siguiente:

{
    "status": {
       "status": "APPROVED",
       "message": "",
       "reason": "",
       "date": "2016-09-15T13:49:01-05:00"
     },
    "requestId": 58,
    "reference": “ORDER-1000”,
    "signature": “feb3e7cc76939c346f9640573a208662f30704ab”
}

 

En ella se proporciona el mismo requestId que se proporcionó cuando se hizo el createRequest, la referencia proporcionada por el comercio y el estado de la petición que puede ser (APPROVED, REJECTED) para esta notificación.

Puedes validar que se trate de una respuesta de Place to Pay haciendo un SHA-1 con los datos requestId + status + date + tranKey, para el caso del ejemplo y si el tranKey del comercio fuera ABCD1234 sería:

Bajo ninguna circunstancia reveles tu tranKey en ninguna parte accesible a los clientes o usuarios de su aplicación

sha1(“58APPROVED2016-09-15T13:49:01-05:00ABCD1234”)

Si este valor coincide con el valor proporcionado por el signature, puedes autenticar la respuesta y proceder a asentar en la base de datos.

Estructuras de información

Esta sección describe cada una de las estructuras de datos usada por los métodos de web service.

RedirectRequest

Estructura que contiene toda la información acerca de la transacción para ser procesada.

Propiedades

Name Type Description
locale string Definido con los códigos ISO 639 (language) y ISO 3166-1 alpha-2 (2-letras del país). ej. en_US, es_CO
payer Person Información del ordenante, si establece este objeto, los datos del pagador utilizarán esta información.
buyer Person Información del comprador en la transacción
payment PaymentRequest Objeto de pago cuando necesite solicitar un cobro
subscription SubscriptionRequest Objeto de suscripción utilizado cuando se necesita un tóken
fields NameValuePairs Información adicional relacionada con la solicitud que el comercio requiere para guardar con la transacción.
paymentMethod string Forzar el medio de pago en la interfaz de redirección, los códigos aceptados son los de la lista. Si necesita más de uno separarlos con coma. I.e. _ATH_,_PSE_,CR_VS
expiration dateTime Expiración de esta solicitud, el cliente debe terminar el proceso antes de esta fecha.
i.e. 2016-07-22T15:43:25-05:00
returnUrl string URL para retornar cuando el cliente termine la operación
cancelUrl string URL para retornar cuando el cliente aborte la operación
ipAddress string Dirección IP del cliente.
userAgent string Agente de usuario informado por el cliente

RedirectResponse

Estructura que contiene la respuesta inicial desde el método createRequest

Propiedades

Name Tipo Description
Status Status Estado de esta solicitud
requestId int Referencia única de esta sesión
processUrl string URL para redireccionar el cliente para completar el proceso

RedirectInformation

Información de estado de la operación.

Propiedades

Name Type Description
status Status Estado de esta solicitud, debe observar el estado interno de cada objeto.
request RedirectRequest Información con la solicitud original.
payment Transaction [ ] Información relacionada con el pago si este fue solicitado.
subscription SubscriptionResponse Información relacionado con la suscripción si esta fue solicitada.

ReverseResponse

Estructura de respuesta a una solicitud de pago reversado.

Propiedades

Name Type Description
status Status Estado de la solicitud será APROBADO si se ha realizado el reverso de lo contrario puede ser RECHAZADA.
payment Transaction Si el reverso fue exitoso, se almacena como una nueva transacción.

Person

Estructura que refleja la información de una persona involucrada en una transacción.

Propiedades

Name Type Description
documentType DocumentType Tipo de identificación [CC, CE, TI, SSN, NIT, PPN]
document string Identificación
name string Nombres de la persona
surname string Apellidos de la persona
company string Nombre de la empresa en la que trabaja o representa
email string Correo electrónico de la persona.
address Address Información completa de la dirección
mobile PhoneNumberType Número celular.

PaymentRequest

Estructura que contiene la información acerca del pago de la transacción requerida al servicio web.

Propiedades

Name Type Description
reference string Única referencia para la solicitud de pago.
description string Descripción de la cuenta.
amount Amount Monto a ser cobrado
allowPartial bool Define si el monto a ser cobrado puede ser parcial.
shipping Person Información de la persona quien recibe el producto o servicio en la transacción.
items Items Productos relacionados con esta solicitud de pago.
fields NameValuePairs Información adicional relacionada con la solicitud de pago que el comercio requiere guardar con la transacción.
recurring Recurring Información recurrente cuando Place to Pay procesa un pago recurrente.

SubscriptionRequest

Estructura que contiene la información relacionada con una solicitud de suscripción para obtener un Token.

Propiedades

Name Type Description
reference string Referencia única para la solicitud de suscripción
description string Descripción de la suscripción.
fields NameValuePairs Información adicional relacionada con la suscripción.

NameValuePairs

Posee una matriz de NameValuePair con información

Propiedades

Name Type Description
item NameValuePair [ ] Referencia única para la solicitud de pago

SubscriptionResponse

Estructura que contiene información para el método de pago suscripción.

Propiedades

Name Type Description
status Status Estado de la suscripción.
type string Esta cadena dicta el tipo de suscripción que se devuelve, puede ser [token, cuenta]
instrument NameValuePairs Acorde con el tipo de suscripción los valore retornados puede cambiar y serán devueltos en la estructura de NameValuePair.
token: [token, subtoken, franchise, franchiseName, lastDigits, validUntil]account: [bankCode, bankName, accountType, accountNumber]

NameValuePair

Se utiliza para definir un tipo de par clave-valor.

Propiedades

Name Type Description
keyword string Clave para el par de valores del dato
value string Valor para el par de datos
displayOn string Bajo qué circunstancias el campo debe ser mostrado en la interfaz de redirección [none, payment, receipt, both]

Status

Estructura que contiene la información sobre una solicitud o pago, informa al estado actual de la misma.

Propiedades

Name Type Description
status string Estado proporcionado, podría ser uno de esos: [OK, FAILED, APPROVED, APPROVED_PARTIAL, REJECTED, PENDING, PENDING_VALIDATION, REFUNDED]
reason string Código de motivo proporcionado
message string Descripción del código de razón
date dateTime Fecha y hora de este estado

Transaction

Estructura que contiene información sobre el proceso de pago de la transacción en Place to Pay.

Propiedades

Name Type Description
status Status Estado de la transacción.
internalReference int Referencia interna en Place to Pay
paymentMethod string Código del método de pago utilizado
paymentMethodName string Nombre del método de pago utilizado
issuerName string Nombre del emisor o del procesador
amount AmountConversion Valor procesado
authorization string Código de autorización
processorFields NameValuePairs Campos adicionales del procesador

Token

Estructura que contiene información acerca de un token usado para cobros de un cliente suscrito.

Propiedades

Name Type Description
status Status Estado del proceso de tokenización.
token string Token completo para tarjeta de crédito, debe ser usada para solicitar cualquier transacción a Place to Pay.
subtoken string Representación numérica del token para casos donde es requerido un número adicional que parece como una tarjeta de crédito, los últimos 4 dígitos son iguales a los últimos 4 dígitos de la tarjeta de crédito.
franchiseName string Franquicia de la tarjeta tokenizada
issuerName string Nombre del banco emisor
lastDigits string Últimos 4 dígitos de la tarjeta de crédito.
validUntil date Fecha hasta la cual el token es válido, puede  ser determinada por la  fecha de expiración.

DocumentType

Contiene los diferentes tipos de documento, cadena (string) con los siguientes valores CC, CE, TI, RC, NIT, PPN, SSN, LIC, TAX, CIP, DNI, DUI, DPI, INE, CI

Address

Estructura que contiene la información sobre una dirección física

Propiedades

Name Type Description
street string Dirección física completa.
city string Nombre de la ciudad.
state string Nombre del estado coincidente con la dirección
postalCode string Código postal o equivalente se requiere generalmente para los países que tienen.
country string Código internacional del país que se aplica a la dirección física según  ISO 3166-1 ALPHA-2
phone PhoneNumberType Número telefónico

PhoneNumberType

Restringe la longitud del número de teléfono de la cadena a 30 caracteres.

Amount

Extiende de AmountBase y describe el contenido de la cantidad completa, incluyendo impuestos y detalles.

Propiedades

Name Type Description
currency string DeAmountBase
total decimal DeAmountBase
taxes TaxDetail [ ] Descripción de los impuestos
details AmountDetail [ ] Descripción del importe total

TaxDetail

Estructura para almacenar información sobre un impuesto.

Propiedades

Name Type Description
kind string Valor de clasificación, puede ser [valueAddedTax, exciseDuty]
amount AmountType Valor discriminado
base AmountType Valor base

AmountDetail

Estructura para almacenar información sobre el valor.

Propiedades

Name Type Description
kind string Valor de clasificación, puede ser [discount, additional, vatDevolutionBase, shipping, handlingFee, insurance, giftWrap, subtotal, fee, tip]
amount AmountType Valor discriminado.

AmountType

Representación decimal del valor.

Recurring

Estructura que contiene la información requerida para una solicitud de pago recurrente.

Propiedades

Name Type Description
periodicity string Periodicidad de la factura [D, M, Y]
interval int Intervalo asociado a la periodicidad
nextPayment date Fecha del próximo pago
maxPeriods int Número máximo de periodo (-1en caso de que no haya  restricción.)
dueDate date Fecha para finalizar el pago
notificationUrl string URL en el que el servicio notificará cada vez que se haga un pago recurrente

AmountConversion

Estructura para definir el factor de conversión y los valores.

Propiedades

Name Type Description
from AmountBase Monto solicitado
to AmountBase Monto procesado por la entidad
factor double Factor de conversión.

AmountBase

Estructura que representa una cantidad que define la moneda y el total.

Propiedades

Name Type Description
currency string Moneda acorde al ISO 4217
total decimal Valor total

CollectRequest

Estructura que representa la información para realizar el cobro en base a un medio de pago suscrito.

Propiedades

Name Type Description
payer Person Datos del titular del medio de pago almacenado
payment PaymentRequest Objeto de pago cuando necesite solicitar un cobro
instrument Instrument Datos asociados al medio de pago suscrito

Items

Posee una colección de estructuras de elementos.

Propiedades

Name Type Description
item Item [ ] Arreglo de un elemento incluido.

Item

Estructura que contiene los detalles del elemento.

Propiedades

Name Type Description
sku string Unidad en stock correspondiente (SKU) al artículo
name string Nombre del artículo
category string Puede ser [digital, físical]
qty string Número de un artículo en particular
price decimal Costo del articulo
tax decimal Impuesto del artículo

Instrument

Estructura que contiene los detalles de un medio de pago suscrito.

Propiedades

Name Type Description
token SimpleToken Datos asociados a una tarjeta de crédito tokenizada

SimpleToken

Estructura que contiene los detalles de un token previamente obtenido mediante un proceso de suscripción, se debe enviar el token o el subtoken en los casos que se habilite, no es necesario enviar ambos.

Propiedades

Name Type Description
token string Token completo para tarjeta de crédito, debe ser usada para solicitar cualquier transacción a Place to Pay.
subtoken string Representación numérica del Token para casos donde es requerido un número adicional que parece como una tarjeta de crédito, los últimos 4 dígitos son iguales a los últimos 4 dígitos de la tarjeta de crédito.
installments int Número de cuotas en las cuales se solicita el cobro (opcional)
cvv string Dígitos del código de seguridad de la tarjeta a usar en los casos en los que sea necesario, generalmente se deja en blanco si se tiene una terminal sin validación de CVV

Campos usados por tipo de operación

Matriz con los campos disponibles para enviar por operación.
Las convenciones son: R (requerida), O (opcional), A (recomendada), – (no aplica)

Payment Subscription Payment Partial Reverse Payment Recurrent payment Invalidate token
locale O O O O
payer O O O O
documentType O O O O
document O O O O
name O O O O
surname O O O O
company O O O O
email O O O O
address O O O O
mobile O O O O
buyer A A A A
documentType O O O O
document O O O O
name A A A A
surname O O O O
company O O O O
email A A A A
address O O O O
mobile O O O O
payment R R R
reference R R R
description R R R
amount R R R
currency R R R
total R R R
taxes O O O
details O O O
allowPartial R
shipping O O O
documentType O O O
document O O O
name O O O
surname O O O
company O O O
email O O O
address O O O
mobile O O O
items O O O
fields O O O
recurring R
periodicity R
interval R
nextPayment R
maxPeriods R
dueDate R
notificationUrl R
subscription R
reference R
description R
fields O
fields O O O O
keyword O O O O
value O O O O
displayOn O O O O
paymentMethod O O O O
expiration R R R R
returnUrl R R R R
cancelUrl O O O O
ipAddress R R R R
userAgent R R R R
requestId R R

Autenticación

Todas las solicitudes al web deben ser autenticadas con Web Services Security UsernameToken Profile 1.1.

Usando:
PasswordDigest (PasswordDigest = Base64 ( SHA-1 ( nonce + created + tranKey ) ))

Ejemplos

Conexión SOAP

A continuación algunos ejemplos para la autenticación con WSSE. La autenticación necesita ser incluida como un encabezamiento para todas las solicitudes hechas con SOAP.
Quick PHP connection example

 

Valores suministrados por Place to Pay

login = usuarioprueba
tranKey = ABCD1234

 

Valores generados por el usuario.

// Random value for each request
Nonce = 7fcfc4f713663bb9ae401e26ad7da0b2

// Date ISO 8601 (Y-m-d\TH:i:s\Z) or (Y-m-d\TH:i:sP)
Created = 2016-08-30T13:38:54Z

// Base64(SHA-1(Nonce + Created + tranKey))
PasswordDigest = DtwKvu19cACxAxNP6KJKFheyCaw=

// Base64(Nonce)
Nonce = N2ZjZmM0ZjcxMzY2M2JiOWFlNDAxZTI2YWQ3ZGEwYjI=

 

Ejemplo de encabezamiento de SOAP en XML.

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <env:Header>
      <wsse:Security env:mustUnderstand="true">
         <wsse:UsernameToken>
            <wsse:Username>usuarioprueba</wsse:Username>
            <wsse:Password xsi:type="PasswordDigest">DtwKvu19cACxAxNP6KJKFheyCaw=</wsse:Password>
            <wsse:Nonce>N2ZjZmM0ZjcxMzY2M2JiOWFlNDAxZTI2YWQ3ZGEwYjI=</wsse:Nonce>
            <wssu:Created>2016-08-30T13:38:54Z</wssu:Created>
         </wsse:UsernameToken>
      </wsse:Security>
   </env:Header>
   <env:Body />
</env:Envelope>

 

Conexión REST

Para conectarse con la API REST, la autenticación debe fusionarse como parámetro auth con los datos de la petición.

 

Ejemplo de autenticación:

En Java – https://gist.github.com/dnetix/f37de7864b4efb8249d30e476e379f0a

En C# – https://gist.github.com/dnetix/c18cc44861c5702d2b8ff2327b031c3e

 

Información proporcionada

login = usuarioprueba
tranKey = ABCD1234

 

Datos generados por el usuario

# Random value for each request
nonce = WmEyvut9GgvcMWrV

# Date ISO 8601 (Y-m-d\TH:i:s\Z) or (Y-m-d\TH:i:sP)
seed = 2016-08-30T16:21:35+00:00

 

Ten en cuenta que nonce y seed son generados, login y trankey son proporcionados por Place to Pay, con esa información los datos a enviar deben ser:

# Base64(SHA-1(nonce + seed + tranKey))
tranKey = i/RFwSHAh8d7YgtO3HME5kCnYy8=

# Base64(Nonce)
nonce = V21FeXZ1dDlHZ3ZjTVdyVg==

 

El valor del trankey resultante es  Base64(SHA-1(nonce + seed + tranKey))

El nonce dentro del SHA-1 no es codificado en Base64, sólo está codificado como parámetro.

Las estructuras en REST son las mismas que se describieron anteriormente, pero están codificadas en JSON.

Crear un pago en REST.

Ejemplo:

POST /api/session
{
   "auth":{
      "login":"usuarioprueba",
      "seed":"2016-08-30T16:21:35+00:00",
      "nonce":"V21FeXZ1dDlHZ3ZjTVdyVg==",
      "tranKey":"i/RFwSHAh8d7YgtO3HME5kCnYy8="
   },
   "locale":"en_US",
   "buyer":{
      "document":"1040030020",
      "documentType":"CC",
      "name":"John",
      "surname":"Doe",
      "email":"johndoe@example.com",
      "address":{
         "street":"742 Evergreen Terrace",
         "city":"Springfield",
         "country":"US"
      }
   },
   "payment":{
      "reference":"123456",
      "description":"Testing Payment",
      "amount":{
         "currency":"COP",
         "total":"200000"
      },
      "allowPartial":false
   },
   "expiration":"2016-08-31T13:36:29-05:00",
   "returnUrl":"http://your_redirect_uri.com/123456",
   "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36",
   "ipAddress":"127.0.0.1"
}

 

Información de la solicitud en REST

Replace the REQUEST_ID with the returned value on the payment request response

POST /api/session/REQUEST_ID
{
   "auth":{
      "login":"usuarioprueba",
      "seed":"2016-08-30T16:19:34+00:00",
      "nonce":"WXd6MGJ0dkhDQlpEeGN6Ng==",
      "tranKey":"R1CHFZZtZfUCdIXnihjNvUaaqT8="
   }
}

 

Reversar un pago en REST

POST /api/reverse
{
   "auth":{
      "login":"usuarioprueba",
      "seed":"2016-08-30T16:19:34+00:00",
      "nonce":"WXd6MGJ0dkhDQlpEeGN6Ng==",
      "tranKey":"R1CHFZZtZfUCdIXnihjNvUaaqT8="
   },
   "internalReference":"1234567890"
}

 

Cobrar una suscripción en REST

POST /api/collect
{
   "auth":{
      "login":"usuarioprueba",
      "seed":"2016-08-30T16:19:34+00:00",
      "nonce":"WXd6MGJ0dkhDQlpEeGN6Ng==",
      "tranKey":"R1CHFZZtZfUCdIXnihjNvUaaqT8="
   },
   "payer":{
      "name":"Reuben",
      "surname":"Lakin",
      "email":"johnston.donny@powlowski.net",
      "document":"1040035020",
      "documentType":"CC"
   },
   "payment":{
      "reference":"TEST_20170111_200156",
      "description":"Quaerat architecto at aut tempore ducimus adipisci voluptas.",
      "amount":{
         "currency":"COP",
         "total":"188000"
      }
   },
   "instrument":{
      "token":{
         "token":"587bdc9371897cae91270155169d2aa59cd14c4ea2c65355844c4850e0412940"
      }
   }
}

Solución de problemas

Listado de posibles errores cuando intente conectarse al servicio web y cómo evitarlos.

 

Error conectando al servicio con el mensaje

“ERROR: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake”.

Tus servidores requieren TLSv1.1 o TLSv1.2 para recibir la solicitud, debido a la norma PCI. Por favor, revisa el cifrado y el protocolo utilizado para conectar al servidor. Si usas Java, ten presente que solo las versiones después de la 8 tienen soporte completo.

 

SoapFault responde con el mensaje “Authentication Failed 103”.

En el proceso de autenticación nosotros revisamos el campo Created, este campo debe estar en el tiempo GMT o el tiempo local usando el tiempo de zona. Si obtienes esta respuesta, se debe a que tu tiempo no es preciso con el tiempo real. Nosotros solo permitimos 5 minutos de diferencia entre los tiempos.

Puedes usar NTP para mantener la precisión del reloj.

 

Dando los mismos valores EXACTOS que en los ejemplos anteriores a la BASE64(SHA1($Nonce + $Created . $tranKey)) Estoy obteniendo un password digest diferente.

Mantén en mente que BASE64 debería ser para el raw output  de la SHA1 y de acuerdo con todos los lenguajes de programación este puede ser requerido para configurar esta opción, por ejemplo.

En PHP base64_encode(sha1( … , true)) este parametro retornaria el raw output para el sHA1 algorithm

 

Si tienes problemas codificando la clave (password digest) en Java, este ejemplo puede ayudarte

https://gist.github.com/dnetix/f37de7864b4efb8249d30e476e379f0a

 

Códigos de respuesta para la autenticación fallida.

Code Causa
100 UsernameToken no proporcionado (encabezado de la autorización malformado)
101 Identificador de sitio no existe ( login incorrecto o no se encuentra en el ambiente)
102 El hash de TranKey no coincide (Trankey incorrecto o malformado)
103 Fecha de la semilla mayor de 5 minutos
104 Sitio inactivo
105 Sitio expirado
106 Credenciales expiradas
107 Mala definición del UsernameToken (No cumple con el encabezado WSSE)
200 Saltar el encabezado de autenticación SOAP
10001 Contacte a Soporte

Información adicional

Tarjetas de crédito para pruebas

Usando estos números de tarjeta de crédito activas el comportamiento correspondiente en la transacción:

Franchise Card number Comportamiento
Visa 4005580000000040 Rechaza
Visa 4007000000027 Autoriza
Visa 4111111111111111 Autoriza
Visa 4212121212121214 Deja la operación pendiente como modo de captura, la operación debe ser autorizada o cancelada en el panel de Place to Pay  o de otra manera por operaciones de VOID o SETTLE.
Visa 4666666666666669 Este toma 3 minutos para autorizar. La idea es simular un tiempo de espera en su autorización. Así que el servicio de consumo fallará por el tiempo, lo que obligará al uso del Webservice para verificar cuando la operación completa su proceso. Tenga en cuenta los tiempos de consumo de Webservice.
MasterCard 5424000000000015 Autoriza
MasterCard 5406251000000008 Autoriza
AmericanExpress 370000000000002 Autoriza
Diners 36018623456787 Autoriza
BBVA Club Campestre 8130010000000000 Autoriza
Visa Electron (Debit card) 4027390000000006 Autoriza
Visa Electron (Debit card) 4215440000000001 Declina

Métodos de Pago

Esta es una lista de las franquicias disponibles en redirección.

Code Payment Method
CR_VS Visa
CR_CR Credencial Banco de Occidente
CR_VE Visa Electron
CR_DN Diners Club
CR_AM American Express
RM_MC MasterCard
TY_EX Tarjeta Éxito
TY_AK Alkosto
_PSE_ Débito a cuentas corrientes y ahorros (PSE)
SFPAY Safety Pay
_ATH_ Corresponsales bancarios Grupo Aval
EFCTY Efecty
AC_WU Western Union
PYPAL PayPal
T1_BC Bancolombia Recaudos
AV_BO Banco de Occidente Recaudos
AV_AV Banco AV Villas Recaudos
AV_BB Banco de Bogotá Recaudos
VISAC Visa Checkout
GNPIN GanaPIN
GNRIS Tarjeta RIS
MSTRP Masterpass
DBTAC Registro cuentas débito
_PPD_ Débito pre-autorizado (PPD)