Guía Técnica para Crear y Cobrar Tokens de Pago

Esta guía técnica describe los pasos para crear y cargar fichas de pago utilizando el servicio API RESTful de transacciones de CCBill.

Está destinado a programadores, técnicos y otras personas con conocimientos avanzados de codificación.

Requisitos

  • El usuario tiene un Cuenta CCBill.
  • El usuario ha recibido Credenciales de la API.
  • El usuario ha incluido su dominio en la lista blanca con la ayuda de Soporte CCBill.
  • El usuario tiene experiencia con RESTful Web Services.
  • El usuario tiene experiencia con formatos JSON.
  • La API de transacciones RESTful solo admite TLS 1.2.

Importante: Para mantener el cumplimiento de PCI en todo momento, use el widget avanzado de CCBill y asegúrese de que los detalles de pago se envíen directamente a CCBill sin que se envíen a través de su servidor. Cargue siempre las bibliotecas de JavaScript de CCBill a través de https://js.ccbill.com para seguir cumpliendo. No agrupe ni aloje los scripts usted mismo.

Terminología

  • Cuenta comercial: Cada comerciante de CCBill recibe un número de cuenta con fines de seguimiento. El formato estándar es 9xxxxx-xxxx, donde 9xxxxx es la cuenta principal. La cuenta principal es un número de seis (6) dígitos. Por ejemplo: "999999".
  • Subcuenta comercial: Los comerciantes de CCBill pueden abrir una o más subcuentas. La subcuenta es un número de cuatro (4) dígitos. El formato estándar es: xxxx. Por ejemplo: "1234". La subcuenta es parte de la cuenta principal.
  • Ficha de pago: Un token de pago identifica una entidad facturable dentro del sistema.
  • Identificación de suscripción: Número de identificación de la suscripción a la transacción
  • Identificación de la aplicación del comerciante: Esta es la ID de cliente que el comerciante recibió al registrarse para usar la API RESTful de CCBill.
  • Secreto del comerciante: Esta es la contraseña que se configuró para la autenticación con la API RESTful de CCBill.
  • Autenticación fuerte del cliente (SCA): leyes europeas (PSD2) requieren el uso de SCA, como el 3DS protocolo, para el procesamiento de pagos en línea. La SCA se inicia cuando un titular de tarjeta con sede en la UE realiza un pago en línea. Los comerciantes pueden usar el Widget avanzado de CCBill y sus funciones para facilitar una fuerte autenticación del cliente.

El flujo de pago

A continuación se detallan los 3 pasos esenciales para cobrar al consumidor mediante un token de pago:

1. Genere el token de portador CCBill OAuth

La solicitud para generar el token CCBill OAuth debe enviarse desde sus servicios back-end directamente a la API de CCBill y no puede solicitarse desde el navegador.

2. Crear el token de pago

3. Cobrar el token de pago

El siguiente diagrama de secuencia describe el flujo para crear y cobrar tokens de pago sin verificación 3DS. Haga clic en la imagen para verla en tamaño completo.

Creación de un token de pago de carga sin verificación 3DS.

Si bien todos los pasos anteriores se pueden completar realizando solicitudes desde su backend a nuestros puntos finales de API, también puede usar el Widget avanzado de CCBill (biblioteca JS) a:

  • crear los tokens de pago
  • comprobar si se requiere la verificación 3DS o no, y
  • realizar una autenticación fuerte del cliente (SCA) desde el navegador

El siguiente diagrama de secuencia describe el flujo para crear y cargar tokens de pago con verificación 3DS. Haga clic en la imagen para verla en tamaño completo.

El diagrama de secuencia para crear y cargar tokens de pago con verificación 3DS.

Creación de la CCBillOAuth token y tokens de pago de carga no son compatibles con el Widget avanzado de CCBill y debe realizarse haciendo llamadas a la API desde sus servicios de back-end.

1. Generar token de portador CCBill OAuth

La API de transacción RESTful de CCBill utiliza OAuth autenticación y autorización basadas. Antes de acceder a la API, debe registrar su aplicación con CCBill para recibir un ID de aplicación de comerciante y llave secreta.

Utilice estas credenciales para generar un token al proporcionarlas al servidor de autorización.

En el primero rizo ejemplo, el -u La opción codifica automáticamente las credenciales proporcionadas en un formato compatible con la autenticación básica HTTP.

Alternativamente, los comerciantes pueden codificar manualmente sus ID de aplicación de comerciante y llave secreta utilizando codificación Base64. Las credenciales codificadas deben incluirse en la solicitud como parámetros del encabezado de autorización, como se muestra en la segunda solicitud de ejemplo.

Tenga en cuenta que este paso no se puede realizar desde el navegador y debe realizar la llamada desde su backend.

Una vez que haya generado un token de acceso (que no debe confundirse con un token de pago), proporciónelo en el encabezado de Autorización de cada solicitud de API. Tendrá acceso hasta que el token de acceso caduque o sea revocado.

URL de punto final

https://api.ccbill.com/ccbill-auth/oauth/token?grant_type=client_credentials

Encabezamiento

Content-Type: application/x-www-form-urlencoded

Authorization: Basic MerchantApplicationID:SecretKey

Solicitud de ejemplo

curl -X POST 'https://api.ccbill.com/ccbill-auth/oauth/token' \
-i -u 'Basic Merchant_Application_ID:Secret_Key' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials'

Ejemplo de solicitud 2

curl -X POST \
https://api.ccbill.com/ccbill-auth/oauth/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic [base64_encoded_Merchant_ApplicationID:Merchant_Secret]' \
--data-urlencode 'grant_type=client_credentials'

El token adquirido es una cadena de datos aleatorios que no contiene información o valor confidencial. Es una herramienta de autenticación y autorización que otorga a sus aplicaciones acceso a los recursos de la API RESTful de CCBill.

Ejemplo de token de portador en el encabezado de la solicitud

  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3Rva2VuIiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \

2. Crear token de pago (Widget avanzado de CCBill)

La Widget avanzado de CCBill facilita la creación de tokens de pago al encapsular las llamadas API que deben realizarse en una función de JavaScript que se puede usar desde su página web.

La biblioteca está alojada en la red de distribución de contenido (CDN) de CCBill, lo que hace que la importación a los sitios web de los comerciantes sea rápida y sencilla desde cualquier lugar del mundo.

Las siguientes instrucciones describen cómo configurar y utilizar el Widget avanzado de CCBill biblioteca.

Paso 1. Agregar enlace precargado y elementos HTML

Agregue un enlace precargado y elementos HTML de secuencia de comandos a la página HTML del cliente que se conectará al widget avanzado de CCBill.

<link rel="preload" href="https://js.ccbill.com/v1.3.0/ccbill-advanced-widget.js" as="script"/>
<script type="text/javascript" src="https://js.ccbill.com/v1.3.0/ccbill-advanced-widget.js"></script>

La versión de API en este ejemplo de URI es v1.3.0. Preste especial atención a la versión en la ruta URI ya que el número de versión puede estar sujeto a cambios.

Paso 2. Definir ID de campo

El widget avanzado puede extraer los campos de formulario relevantes basándose en los atributos de ID predeterminados o utilizando el atributo de elemento HTML personalizado data-ccbill. El factura-datos Se recomienda el atributo ya que es menos intrusivo y proporciona más flexibilidad.

Cuando se usa el atributo personalizado, el formato correcto es:

Formato

<input type="text" data-ccbill="[corresponding field name]" />

Cuando se utilizan los ID predeterminados, el formato correcto es:

<input type="text" id="_ccbillId_[corresponding field name]" />

La tabla muestra los valores que se deben establecer para el factura-datos atributo o, alternativamente, en los campos de atributos de ID predeterminados.

factura-datosID predeterminados
nombre en la tarjeta_ccbillId_nameOnCard
número de tarjeta_ccbillId_cardNumber
expMes_ccbillId_expMes
expaño_ccbillId_expAño
nombre de pila_ccbillId_nombre
apellido_ccbillId_apellido
address1 (opcional)_ccbillId_dirección1 (opcional)
address2 (opcional)_ccbillId_dirección2 (opcional)
ciudad (opcional)_ccbillId_ciudad (opcional)
país_ccbillId_país
estado (opcional) _ccbillId_estado (opcional)
código postal_ccbillId_postalCode
número de teléfono (opcional)_ccbillId_phoneNumber (opcional)
email_ccbillId_correo electrónico
código de moneda (Un código de moneda de tres dígitos para la moneda utilizada en la transacción. Obligatorio para SCA)._ccbillId_currencyCode (Un código de moneda de tres dígitos para la moneda utilizada en la transacción. Obligatorio para SCA).
dirección IP (campo oculto obligatorio y recomendado que se completa automáticamente con JavaScript)_ccbillId_ipAddress (campo oculto obligatorio y recomendado que se completa automáticamente con JavaScript)
navegadorHttpAceptar (opcional, campo oculto recomendado autocompletado por JavaScript)_ccbillId_browserHttpAceptar (opcional, campo oculto recomendado autocompletado por JavaScript)
navegadorHttpAcceptEncoding (opcional, campo oculto recomendado autocompletado por javascript)_ccbillId_browserHttpAcceptEncoding (opcional, campo oculto recomendado autocompletado por javascript)
navegadorHttpAceptarIdioma (opcional, campo oculto recomendado autocompletado por javascript)_ccbillId_browserHttpAceptarIdioma (opcional, campo oculto recomendado autocompletado por javascript)

Paso 3. Crear método JavaScript

Cree un método de JavaScript que llamará al widget avanzado de CCBill crearPagoToken() función. El ejemplo proporcionado se puede modificar según sea necesario.

Esta es la función principal que los comerciantes deben incorporar en sus llamadas de JavaScript para crear Tokens de pago.

Para generar un token, se deben pasar varios parámetros mediante la función:

PARÁMETROTIPODESCRIPCIÓN
token de autorización
cadena
(requerido)
Entrada requerida que utiliza un token de Oauth para realizar la creación del token de pago. Debe ser un token de Oauth válido para la cuenta de cliente proporcionada.
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante.
borrar información de pagobooleano
(opcional)
Un indicador opcional que, si se establece en verdadero, dará como resultado la eliminación de los campos de información del cliente cuando el crear el token de pago se llama a la función. Si nulo se proporciona, por defecto será falso y los campos de información de pago no se borrarán.

Nota: Aunque este parámetro es opcional, este campo debe establecerse en 'nulo' si no se usa.
borrar información del clientebooleano
(opcional)
Un indicador opcional que, si se establece en verdadero, dará como resultado la eliminación de los campos de información del cliente cuando el crear el token de pago se llama a la función. Si nulo se proporciona, por defecto será falso y los campos de información del cliente no se borrarán.

Nota: Aunque este parámetro es opcional, este campo debe establecerse en 'nulo' si no se usa.
tiempo para vivirentero
(opcional)
El intervalo de tiempo que define cuánto tiempo debe ser válido el token (horas).
numeroDeUsoentero
(opcional)
Número total de veces que se puede usar el token de pago para compras.

Nota: Aunque este parámetro es opcional, este campo debe establecerse en 'nulo' si no se usa.

crearPagoToken() Ejemplo

const widget = new ccbill.CCBillAdvancedWidget(applicationId);
try {
       const result = widget.createPaymentToken(oauthToken, clientAccnum, clientSubacc, clearPaymentInfo, clearCustomerInfo, timeToLive, numberOfUse);
       result.then(
           (data) => {
               console.log("SUCCESS");
               return data.json();
           },
           (error) => {
               console.log("ERROR");
               return error.json();
           }).then(json => {                
               console.log("RESULT :[" + JSON.stringify(json) + "]");
           }).catch((error) => {
           console.error("ERROR2 [" + error + "]");
       });
       console.log(`FINISHED`);
   } catch (error) {
       const errors = [];
       error.forEach(function(item) {
         const msg = item.message.split(".");
         errors.push(msg[1]);
       });
       console.error(`ERROR ` + JSON.stringify(errors));
       alert("ERROR: Unable to generate Payment Token: " + JSON.stringify(errors));
   }

Usando solo los parámetros requeridos

const result = widget.createPaymentToken(oauthToken, clientAccnum, clientSubacc);

Uso de indicadores de limpieza de campo

const result = widget.createPaymentToken(oauthToken, clientAccnum, clientSubacc, clearPaymentInfo, clearCustomerInfo);

Usando numberOfUse y timeToLive pero sin banderas

const result = widget.createPaymentToken(oauthToken, clientAccnum, clientSubacc, null, null, timeToLive, numberOfUse);

Uso de todos los parámetros

const result = widget.createPaymentToken(oauthToken, clientAccnum, clientSubacc, clearPaymentInfo, clearCustomer, timeToLive, numberOfUse);

Paso 4. Token de pago generado

El resultado contendrá el token de pago recién creado, que se puede convertir en JSON.

En caso de cualquier entrada no válida, la respuesta incluirá errores de validación que se encontraron durante la validación de la entrada.

También puede incluir cualquier error que haya ocurrido durante el proceso de generación del token de pago.

Validación de datos de campo

La crear el token de pago La función validará los valores de los campos. Si alguno de los valores no pasa la validación, no se creará ningún token. Si ese es el caso, el sistema generar una matriz de violaciones indicando qué campos no son válidos.

PARÁMETROTIPOREQUISITO
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
Un rango entre 90000 y 999999 y debe ser un número.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante. Un rango de 0-9999 y debe ser un número.
tiempo para vivirentero
(opcional)
Tiene un rango de 0-2147483647 y debe ser un número. Si se desea el valor máximo, omita esto (o pase nulo).
numeroDeUsoentero
(opcional)
El número total de veces que se puede usar el token de pago para compras. Tiene un rango de 0-2147483647 y debe ser un número. Si se desea el valor máximo, omita esto (o pase nulo).
número de tarjetacadena
(requerido)
Debe ser un número de tarjeta de crédito válido.
expMescadena
(requerido)
Mes de caducidad de la tarjeta en mm formato. Se requiere un rango de 1-12, y debe ser un número.
expañocadena
(requerido)
Año de caducidad de la tarjeta en aaaa formato. Se requiere un rango de 2018-2100, y debe ser un número.
nombre de pilacadena
(requerido)
Nombre del cliente.
apellidocadena
(requerido)
Apellido del cliente.
address1cadena
(opcional)
Dirección del cliente.
ciudadcadena
(opcional)
Ciudad del cliente.
paíscadena
(requerido)
País del cliente. Debe estar representado como un código de país de dos letras como se define en ISO-3166 1.
estadocadena
(opcional)
Estado del cliente. Si se proporciona, debe ser un código de estado de dos letras como se define en ISO-3166 2.
código postalcadena
(requerido)
Código postal del cliente. Es un código postal válido para el país proporcionado.
número de teléfonocadena
(opcional)
Número de teléfono del cliente. Si se proporciona, debe ser un número de teléfono válido.
emailcadena
(requerido)
Dirección de correo electrónico del cliente.
dirección IPcadena
(requerido)
Dirección IP del cliente. Se deben proporcionar direcciones IPv4 válidas como parámetro de solicitud o a través del IP de origen X cabecera.

La matriz de violaciones es un objeto del siguiente objeto:

{
  target: Object,
  message: string,
  propertyName: string
}

En este momento, la página del cliente deberá resolver cualquier error, mostrar el mensaje correcto en el que los campos no eran válidos o usar el nuevo token de pago provisto.

Autenticación fuerte del cliente

CCBill Advanced Widget también permite a los comerciantes integrarse con el proveedor 3DS de CCBill e incorporar una fuerte autenticación de clientes en sus transacciones.

Como alternativa, los comerciantes pueden enviar los resultados de SCA (3DS) obtenidos de un proveedor de 3DS de su elección. Para iniciar cargos con un token de pago, los parámetros SCA deben enviarse junto con otros parámetros obligatorios.

isScaFunción requerida

La isScaRequerido determina si se necesita una fuerte autenticación del cliente. El sistema verifica el número de tarjeta de crédito, el número de cuenta del comerciante, el número de subcuenta y el código de moneda proporcionados.

Una entrada válida da como resultado una Promesa, que eventualmente se resolverá en una respuesta con parámetros SCA o se convertirá en un rechazo, debido a un error.

Ejemplo

const result = widget.isScaRequired(authToken, clientAccnum, clientSubacc);
PARÁMETROTIPODESCRIPCIÓN
token de autorizacióncadena
(requerido)
Debe ser un token de Oauth válido para la cuenta de comerciante proporcionada.
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante.

El formulario de pago del comerciante debe contener un campo de entrada de texto (oculto si es necesario) o un elemento de selección (oculto si es necesario) para el código de moneda valor. El valor representa un código de moneda de tres dígitos (norma ISO 4217) para la moneda utilizada en la transacción.

El widget avanzado recopilará automáticamente la código de moneda valor si sigue las convenciones de nomenclatura estándar. Los comerciantes pueden:

  • Utilice el atributo de ID predeterminado.
  • Especifique el ID del código de moneda utilizando la biblioteca.
  • Utilice la factura-datos atributo para especificar el campo de código de moneda.

factura-datos ejemplo de atributo (entrada)

<input data-ccbill="currencyCode" type="text" />

factura-datos ejemplo de atributo (seleccionar)

<select data-ccbill="currencyCode" />

<option>…</option>
<option>…</option>
…

</select>

Predeterminado _ccbillId_currencyCode ejemplo de atributo (entrada)

<input id="_ccbillId_currencyCode" type="text" />

Predeterminado _ccbillId_currencyCode ejemplo de atributo (seleccionar)

<select id="_ccbillId_currencyCode" />

<option>…</option>
<option>…</option>
…

</select>

Validación de datos de campo

PARÁMETROTIPODESCRIPCIÓN
clienteAccnumentero
(requerido)
Tiene un rango de 900000-999999 y debe ser un número.
clienteSubaccentero
(requerido)
Tiene un rango de 0-9999 y debe ser un número.
código de monedacadena
(requerido)
Tiene que coincidir con la expresión regular ^ \\ d {3} $
Número de tarjeta de crédito (entrada de formulario)entero
(requerido)
Debe ser un número de tarjeta de crédito válido.

El objeto de violaciones es una matriz del siguiente objeto:

{
  target: Object,
  message: string,
  propertyName: string
}
Función isScaRequiredForPaymentToken

La isScaRequiredForPaymentToken La función determina si se requiere una autenticación fuerte del cliente. basado en la ID del token de pago proporcionado y el código de moneda.

Una entrada válida da como resultado una Promesa, que eventualmente se resolverá en una respuesta con parámetros SCA o se convertirá en un rechazo, debido a un error.

PARÁMETROTIPODESCRIPCIÓN
token de autorizacióncadena
(requerido)
Debe ser un token de Oauth válido para la cuenta de comerciante proporcionada.
Id. de token de pagocadena
(requerido)
El identificador del token de pago. Una cadena única que identifica el token de pago, debe coincidir con la expresión regular <strong><em>[a-zA-Z0-9]+$</em></strong>

Ejemplo

const result = widget.isScaRequiredForPaymentToken(authToken, paymentTokenId);

El formulario de pago del comerciante debe contener un campo de entrada de texto o un elemento de selección para el código de moneda valor. El valor representa un código de moneda de tres dígitos (norma ISO 4217) para la moneda utilizada en la transacción.

El widget avanzado recopilará automáticamente la código de moneda valor si sigue las convenciones de nomenclatura estándar. Los comerciantes pueden:

  • Utilice el atributo de ID predeterminado.
  • Especifique el ID del código de moneda utilizando la biblioteca.
  • Utilice la factura-datos atributo para especificar el campo de código de moneda.

factura-datos ejemplo de atributo (entrada)

<input data-ccbill=”currencyCode” type=”text” />

factura-datos ejemplo de atributo (seleccionar)

<select data-ccbill=”currencyCode” />

<option>…</option>
<option>…</option>
…

</select>

Predeterminado _ccbillId_currencyCode ejemplo de atributo (entrada)

<input id=“_ccbillId_currencyCode” type=”text” />

Predeterminado _ccbillId_currencyCode ejemplo de atributo (seleccionar)

<select id=“_ccbillId_currencyCode” />

<option>…</option>
<option>…</option>
…

</select>

Validación de datos de campo

PARÁMETROTIPODESCRIPCIÓN
Id. de token de pagocadena
(requerido)
Debe coincidir con la expresión regular ^ [a-zA-Z0-9] + $
código de monedacadena
(requerido)
Tiene que coincidir con la expresión regular ^ \\ d {3} $

El objeto de violaciones es una matriz del siguiente objeto:

{
  target: Object,
  message: string,
  propertyName: string
}
función autenticarcliente

La autenticarCliente La función permite a los comerciantes obtener el resultado de la autenticación del cliente antes de iniciar una transacción 3DS y llamar al extremo de la API Merchant Connect (RESTful) de CCBill. Si la llamada falla, devolverá un error.

Se deben pasar varios parámetros para facilitar una autenticación sólida del cliente.

PARÁMETROTIPODESCRIPCIÓN
token de autorizacióncadena
(requerido)
Debe ser un token de Oauth válido para la cuenta de comerciante proporcionada.
clienteAccnumnúmero
(requerido)
El valor clientAccnum debe corresponder al
utilizado para generar el token de OAuth y debe ser un
número dentro del rango 900000-999999.
clienteSubaccnúmero
(requerido)
El valor de clientSubacc debe corresponder al de
utilizado para generar el token de OAuth y debe ser un
número dentro del rango 0-9999.
formulariocadena
(opcional)
Una referencia de formulario debe ser un selector válido o un elemento de formulario HTML que exista en la página web del comerciante. Tenga en cuenta que si el no se proporciona formId, el widget encontrará el primer elemento HTML del formulario en la página y supondrá que ese es el formulario de pago.
ID de marco flotantecadena
(opcional)
El proceso de autenticación 3DS presenta un iframe en la página web para realizar su funcionalidad. El script Advanced Widget genera un iframe y lo inyecta en la página web del comerciante si el parámetro no está definido. Si el valor proporcionado es nulo o una cadena vacía, se regenera para ajustarse a los requisitos técnicos mínimos.
Id. de token de pagocadena
(opcional)
Utilice este campo opcional en lugar del número de tarjeta, el mes de vencimiento de la tarjeta y el año de vencimiento de la tarjeta. La información de la tarjeta debe estar presente en el formulario HTML asociado si no se proporciona la identificación del token.

Ejemplo usando solo los parámetros requeridos

const result = widget.authenticateCustomer(authToken, clientAccnum, 
clientSubacc);

Ejemplo usando formulario

const result = widget.authenticateCustomer(authToken, clientAccnum, 
clientSubacc, form);

Ejemplo usando iframeId y formulario

const result = widget.authenticateCustomer(authToken, clientAccnum, 
clientSubacc, form, iframeId);

Ejemplo usando todos los parámetros

const result = widget.authenticateCustomer(authToken, clientAccnum, 
clientSubacc, form, iframeId, paymentTokenId);

Validación de datos de campo

PARÁMETROTIPODESCRIPCIÓN
Id. de token de pagocadena
(requerido)
Debe coincidir con la expresión regular ^ [a-zA-Z0-9] + $
clienteAccnumnúmero
(requerido)
Un número dentro del rango 900000-999999. Debe coincidir con el
valor utilizado para crear el token de OAuth.
clienteSubaccnúmero
(requerido)
Un número dentro del rango 0-9999. Debe coincidir con el valor
utilizado para crear el token de OAuth.
formulariocadena
(opcional)
Una referencia de formulario debe ser un selector válido o un elemento de formulario HTML que exista en la página web del comerciante. Si es no siempre, el sistema intentará recopilar las entradas SCA requeridas del primer formulario HTML que encuentre en la página.
ID de marco flotantecadena
(opcional)
El proceso de autenticación 3DS presenta un iframe en la página web para realizar su funcionalidad. El script Advanced Widget genera un iframe y lo inyecta en la página web del comerciante si el parámetro no está definido. Si el valor proporcionado es nulo o una cadena vacía, se regenera para ajustarse a los requisitos técnicos mínimos.

Visita el sitio web de Códigos de error de autenticación de 3DS página para obtener una lista completa de códigos de error.

3. Cobrar token de pago

Después de generar un nuevo token de OAuth y después de generar un token de pago, puede usar esos dos tokens nuevos para cargar la tarjeta de crédito del consumidor.

Cobrar token de pago (sin autenticación 3DS)

URL de solicitud HTTP
Encabezamiento
Accept: application/vnd.mcn.transaction-service.api.v.1+json
Parámetros de solicitud
PARÁMETROTIPODESCRIPCIÓN
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante.
precio inicialflotar
(requerido)
Precio de transacción inicial.
periodo inicialentero
(requerido)
La duración (en días) del período de facturación inicial.
código de monedacadena
(opcional)
Código de moneda de tres dígitos (norma ISO 4217) para la moneda utilizada en la transacción.
Precio recurrenteflotar
(opcional)
El monto que se le cobrará al consumidor por cada factura recurrente.
período recurrenteentero
(opcional)
El tiempo entre refacturaciones.
refacturacionesentero
(opcional)
El número total de veces que se volverá a facturar la suscripción.
LifeTimeSubscriptionbooleano
(opcional)
La presencia de esta variable con un valor de 1 indica que la transacción es una suscripción de por vida.
crear nuevo token de pagobooleano
(opcional)
Devuelva un nuevo token de pago para transacciones posteriores o no.
pasarA Través deInfoMatriz [cualquiera]
(opcional)
Pares clave/valor que se pueden pasar al servicio de transacciones y recibir en la respuesta del webhook.

cURL

curl -X POST \
  https://api.ccbill.com/transactions/payment-tokens/01047ed6f3b440c7a2ccc6abc1ad0a84 \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3RvaiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{ "clientAccnum":900123, "clientSubacc":10, "initialPrice": 9.99, "initialPeriod": 10, "recurringPrice": 15.00, "recurringPeriod": 30, "rebills": 99, "currencyCode": 840, "lifeTimeSubscription": false, "createNewPaymentToken": false, "passThroughInfo": [ { "name": "val1", "value": "val2" } ] }'

JavaScript

var data = JSON.stringify({
  "clientAccnum": 900123,
  "clientSubacc": 10,
  "initialPrice": 9.99,
  "initialPeriod": 10,
  "recurringPrice": 15,
  "recurringPeriod": 30,
  "rebills": 99,
  "currencyCode": 840,
  "lifeTimeSubscription": false,
  "createNewPaymentToken": false,
  "passThroughInfo": [
    {
      "name": "val1",
      "value": "val2"
    }
  ]
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://api.ccbill.com/transactions/payment-tokens/01047ed6f3b440c7a2ccc6abc1ad0a84");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3Rva2VuIiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);

PHP

<?php
$request = new HttpRequest();
$request->setUrl('https://api.ccbill.com/transactions/payment-tokens/01047ed6f3b440c7a2ccc6abc1ad0a84');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Cache-Control' => 'no-cache',
  'Authorization' => 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGrZW4ilYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ',
  'Content-Type' => 'application/json'
));

$request->setBody('{ "clientAccnum":900123, "clientSubacc":10, "initialPrice": 9.99, "initialPeriod": 10, "recurringPrice": 15.00, "recurringPeriod": 30, "rebills": 99, "currencyCode": 840, "lifeTimeSubscription": false, "createNewPaymentToken": false, "passThroughInfo": [ { "name": "val1", "value": "val2" } ] }');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
?>
Parámetros de respuesta de rechazo
ParámetroTipo de PropiedadDescripción
decliveCodecadenaEl código de error se refiere al error que ha causado la falla de la transacción.
declinarTextobooleanoDescripción de la decadencia.
ID de negacióncadenaGUID generado aleatoriamente.
aprobadobooleanoEstado de aprobación de la transacción.
pagoUniqueIdcadenaClave única conectada a la cuenta de pago.
ID de sesióncadenaValor de ID de sesión único para la transacción.
ID de suscripciónenteroID de suscripción al que pertenece la transacción.
nuevoPaymentTokenIdcadenaNuevo token de pago para transacciones posteriores.

Respuesta de ejemplo

{"declineCode":null,"declineText":null,"denialId":null,"approved":true,"paymentUniqueId":"dG4P1t8dL58pA3rNxE+Phw","sessionId":null,"subscriptionId":121095101000018190,"newPaymentTokenId":null}

Token de pago de cargo (con autenticación 3DS)

URL de punto final
Cabezales
Accept: application/vnd.mcn.transaction-service.api.v.1+json
Parámetros de solicitud
PARÁMETROTIPODESCRIPCIÓN
crear nuevo token de pagobooleano
(opcional)
Devuelva un nuevo token de pago para transacciones posteriores o no.
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante.
precio inicialflotar
(requerido)
Precio de transacción inicial.
periodo inicialentero
(requerido)
La duración (en días) del período de facturación inicial.
código de monedacadena
(opcional)
Código de moneda de tres dígitos (norma ISO 4217) para la moneda utilizada en la transacción.
Precio recurrenteflotar
(opcional)
El monto que se le cobrará al consumidor por cada factura recurrente.
período recurrenteentero
(opcional)
El tiempo entre refacturaciones.
refacturacionesentero
(opcional)
El número total de veces que se volverá a facturar la suscripción.
LifeTimeSubscriptionbooleano
(opcional)
La presencia de esta variable con un valor de 1 indica que la transacción es una suscripción de por vida.
crear nuevo token de pagobooleano
(opcional)
Devuelva un nuevo token de pago para transacciones posteriores o no.
pasarA Través deInfoMatriz [cualquiera]
(opcional)
Información emparejada que se pasa al servicio de transacciones.
tresdsCardTokencadena
(requerido)
El cardToken cifrado que recibes a través del proceso de verificación 3DS. Como solo requerimos los primeros 16 caracteres, recorte la cadena a esa longitud antes de enviarla a la API CCBill. El envío de una cadena de más de 16 caracteres genera un error.
Valor de ejemplo: gjeoB5NdJ1r6p0dG
tresdsEcicadena
(requerido)
Un Indicador de Comercio Electrónico (ECI).
Valores: '0','1','2','5','6', o'7'.
estado de tresdscadena
(requerido)
El estado de la verificación 3DS ('Y','N','A', etc.)
versión de threedscadena
(requerido)
La versión del protocolo 3DS que se seguirá para esta tarjeta y transacción específicas.
Las versiones disponibles son 1.0.2 y 2.1.0
tresdsXidcadena
(opcional/requerido)
El identificador de la transacción (XID) es un número de seguimiento único establecido por el comerciante para 3DS. Es un parámetro requerido para threedsVersion 1.0.2
tresdscavvcadena
(opcional/requerido)
Una firma digital que prueba que la transacción ha sido verificada en 3DS. La firma se obtiene a través de un flujo de verificación 3DS y es un parámetro requerido para threedsVersion 1.0.2
algoritmo threedsCavvcadena
(opcional/requerido)
Algoritmo CAVV para solicitud de threeds. Se requiere el parámetro threedsCavvAlgorithm para threedsVersion 1.0.2
tresdsDsTransIdcadena
(opcional/requerido)
ID de transacción del servidor de directorio. El parámetro threedsDsTransId es necesario para threedsVersion 2.1.0
tresdsAcsTransIdcadena
(opcional/requerido)
ID de transacción del servidor de control de acceso. Se requiere el parámetro threedsAcsTransId para threedsVersion 2.1.0
tresdsSdkTransIdcadena
(opcional)
El ID de transacción del proveedor de 3DS.
tipo de autenticación de threedscadena
(opcional)
Una firma digital que prueba que la transacción ha sido verificada en 3DS. La firma se obtiene a través de un flujo de verificación 3DS (v2.1.0).
valor de autenticación de threedscadena
(opcional/requerido)
Una firma digital que demuestra que la transacción ha sido verificada por 3DS.
El parámetro threedsAuthenticationValue es necesario para threedsVersion 2.1.0
threedsClientTransactionIdcadena
(requerido)
El widget avanzado genera automáticamente el parámetro. Su propósito es identificar el origen de la transacción de autenticación 3DS.
tresdséxitobooleano
(requerido)
Verificación del éxito o fracaso de la autenticación 3DS.
tresdsCantidadentero
(opcional)
La cantidad a cobrar (igual que precio inicial).
tresdsmonedaentero
(opcional)
El código de moneda de 3 dígitos para la moneda que se utilizará en esta transacción.
Valor de ejemplo: 840
tresdsErrorcadena
(opcional/requerido)
Error recibido del proveedor de 3DS durante el proceso de autenticación sólida del cliente. El parámetro es obligatorio si no se proporciona threedsVersion.
tresdsErrorDetallecadena
(opcional)
Detalles del error relacionados con el tresdsError.
tresdsErrorCodecadena
(opcional)
Código de error.
respuesta de tresdscadena
(opcional)
La respuesta completa en caso de error.

cURL

curl -X POST \
  https://api.ccbill.com/transactions/payment-tokens/threeds/01047ed6f3b440c7a2ccc6abc1ad0a84 \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3Rva2VuIiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1dLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -d '{"clientAccnum":"901505","clientSubacc":"0","initialPrice":"10.00","initialPeriod":"30","currencyCode":"840","threedsEci":"05","threedsError":"","threedsStatus":"Y","threedsSuccess":"true","threedsVersion":"1.0.2","threedsXid":"aWQteHc4ajJnNGIxZW8gICAgICA=","threedsCavv":"cGFzc3dvcmQxMjM0NTZwYXNzd28=","threedsCavvAlgorithm":"SHA-256","threedsAmount":"10","threedsClientTransactionId":"id-wl9r6duc5zj","threedsCurrency":"USD","threedsSdkTransId":"","threedsAcsTransId":"","threedsDsTransId":"","threedsAuthenticationType":"","threedsCardToken":"gjeoB5NdJ1r6p0dG","threedsErrorDetail":"","threedsErrorCode":"","threedsResponse":""}'

JavaScript

var data = JSON.stringify({
    "clientAccnum": "901505",
    "clientSubacc": "0",
    "initialPrice": "10.00",
    "initialPeriod": "30",
	"currencyCode": "840",
    "threedsEci": "05",
    "threedsError": "",
    "threedsStatus": "Y",
    "threedsSuccess": "true",
    "threedsVersion": "1.0.2",
    "threedsXid": "aWQteHc4ajJnNGIxZW8gICAgICA=",
    "threedsCavv": "cGFzc3dvcmQxMjM0NTZwYXNzd28=",
    "threedsCavvAlgorithm": "SHA-256",
    "threedsAmount": "10",
    "threedsClientTransactionId": "id-wl9r6duc5zj",
    "threedsCurrency": "USD",
    "threedsSdkTransId": "",
    "threedsAcsTransId": "",
    "threedsDsTransId": "",
    "threedsAuthenticationType": "",
    "threedsCardToken": "gjeoB5NdJ1r6p0dG",
    "threedsErrorDetail": "",
    "threedsErrorCode": "",
    "threedsResponse": ""
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://api.ccbill.com/transactions/payment-tokens/threeds/01047ed6f3b440c7a2ccc6abc1ad0a84");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCyJhdWQiOlsibWNuLXRyN0aW9uLXNlcnZpY2UiLCJtY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3Rva2VuIiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ");
xhr.setRequestHeader("Cache-Control", "no-cache");

xhr.send(data);

PHP

<?php
$request = new HttpRequest();
$request->setUrl('https://api.ccbill.com/transactions/payment-tokens/threeds/01047ed6f3b440c7a2ccc6abc1ad0a84');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Cache-Control' => 'no-cache',
  'Authorization' => 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWNuLXRyYW5zYWN0aW9uLXNlcnZpY24tYWRtaW4tc2VydmljZSJdLCJzY29wZSI6WyJjcmVhdGVfdG9rZW4iLCJyZWFkX3Rva2VuIiwiY2hhcmdlX3Rva2VuIiwiY3JlYXRlX3Byb2dyYW0iLCJyZWFkX3Byb2dyYW0iLCJjcmVhdGVfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIiwicmVhZF9wcm9ncmFtX3BhcnRpY2lwYXRpb24iLCJtb2RpZnlfcHJvZ3JhbV9wYXJ0aWNpcGF0aW9uIl0sImV4cCI6MTUzNzM4MDczNiwiYXV0aG9yaXRpZXMiOlsiTUNOX0FQSV9UT0tFTl9DSEFSR0VSIiwiTUNOX0FQSV9UT0tFTl9DUkVBVE9SIiwiTUNOX0FQSV9BRE1JTiJdLCJqdGkiOiI4YzI2Njg1MC00NjMzLTQzZDMtYjZjOC1lNzIyY2ExNjQ1YTUiLCJjbGllbnRfaWQiOiI1MjE3NjhhYTc1OGQxMWU4YWE2YjAwNTA1NjlkMTU4NSJ9.HRYXZFATkIcI2_LJ1W_xo67IfBnbN9atyYNzyHqseLxYUxzgwBsAV5rNqCixKemOrDIeQLBN4jrwRsBIHDpEvshwBC8XmTodDJzpGmMaU9s1r20RV68X0_d1yTgSDke_Of7VCrVmJRbSuDl7AgsfTqQ1J7nWyu9vcIaER93ms-vadser_Ot9Z68_HAmCJL3DCLpdIFq3PYtBMKKKqXbvhfhSZQZD3b6-aewAnBo0VzpvK6tREqw1rv9_73oAvYcW2aHAj79ILr8viWMM40LyDKMMYOYkneg3hJUQsUVeh9WzztYUJKzERYNXje9fYIGN-eofoLvX7OZJ3eXmIfkrfQ',
  'Content-Type' => 'application/json'
));

$request->setBody('{"clientAccnum":"901505","clientSubacc":"0","initialPrice":"10.00","initialPeriod":"30","currencyCode":"840","threedsEci":"05","threedsError":"","threedsStatus":"Y","threedsSuccess":"true","threedsVersion":"1.0.2","threedsXid":"aWQteHc4ajJnNGIxZW8gICAgICA=","threedsCavv":"cGFzc3dvcmQxMjM0NTZwYXNzd28=","threedsCavvAlgorithm":"SHA-256","threedsAmount":"10","threedsClientTransactionId":"id-wl9r6duc5zj","threedsCurrency":"USD","threedsSdkTransId":"","threedsAcsTransId":"","threedsDsTransId":"","threedsAuthenticationType":"","threedsCardToken":"gjeoB5NdJ1r6p0dG","threedsErrorDetail":"","threedsErrorCode":"","threedsResponse":""}');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
?>
Parámetros de respuesta de rechazo
ParámetroTipo de PropiedadDescripción
código de errorenteroValor de condición de error de la transacción.
aprobadobooleanoEstado de aprobación de la transacción.
pagoUniqueIdcadenaClave única conectada a la cuenta de pago.
ID de sesióncadenaValor de ID de sesión único para la transacción.
ID de suscripciónenteroID de suscripción al que pertenece la transacción.
nuevoPaymentTokenIdcadenaNuevo token de pago para transacciones posteriores.

Respuesta de ejemplo

{
  "errorCode": "integer",
  "approved": "boolean",
  "paymentUniqueId": "string",
  "sessionId": "string",
  "subscriptionId": "integer",
  "newPaymentTokenId": "string"
}

Una vez que se ha cargado el token de pago, un Notificación HTTP POST de webhooks se activará para que pueda capturar la información de la transacción. Este evento de webhooks será un “UpSaleÉxito.

Leer ID de token de pago

Utilice esta llamada a la API para obtener datos sobre un cargo realizado anteriormente. Deberá identificar el cargo por la ID del token de pago e incluir la ID como un elemento URI.

Solicitud de ejemplo

GET 'https://api.ccbill.com/payment-tokens/{{PAYMENT_TOKEN_ID}}' \

--header 'Authorization: Bearer {{BACKEND_ACCESS_TOKEN}}' \

--header 'Accept: application/vnd.mcn.transaction-service.api.v.2+json'
URL de solicitud HTTP
Encabezamiento
Accept: application/vnd.mcn.transaction-service.api.v.2+json
Parámetros de respuesta
PARÁMETROTIPODESCRIPCIÓN
Id. de token de pagocadena
(requerido)
Representación compleja de ID de token de pago.
ID de participación del programaentero
(requerido)
El Programa conectado al Token de Pago.
originalPagoTokenIdcadena
(opcional)
Referencia a un ID de token anterior.
clienteAccnumentero
(requerido)
Número de cuenta mercantil.
clienteSubaccentero
(requerido)
Número de subcuenta de comerciante.
Fecha y hora de creaciónsolo fecha y hora
(requerido)
Fecha y hora de creación del token de pago.
tiempo para vivirentero
(requerido)
Tiempo de existencia del token (horas).
NúmeroVálidoDeUsoentero
(requerido)
Número total de veces que se puede usar el token de pago para compras.
PaymentInfoIdcadena
(opcional)
Información asociada al pago.
ID de suscripciónentero
(requerido)
Identificación de la suscripción asociada a la transacción.

Respuesta de ejemplo

{"paymentTokenId":"01390f2aae864749a6437e007936529b","programParticipationId":null,"originalPaymentTokenId":null,"clientAccnum":999999,"clientSubacc":0,"createdDatetime":"2021-04-02T23:09:02","timeToLive":30,"validNumberOfUse":3,"paymentInfoId":null,"errors":null,"subscriptionId":"121092501000146223"}

Visite la siguiente página para obtener una lista completa de Códigos de error de la API RESTful de CCBill.