Nada es vital, Nada es importante.

API REDSYS WebService
Función Código Descripción
Función Código Descripción
Array de DatosEntrada var $vars_pay = array();
Contiene todos los parametros que guardas con los GET/SET de parámetros.
Cargar parámetros. function setParameter($key,$value){
$this->vars_pay[$key]=$value;
}
Guarda los parametros que le introduzcas en $vars_pay, para su uso en el resto de funciones de la clase.
Ejemplo:
setParameter("DS_MERCHANT_CURRENCY","978"):
Obtener parámetros. function getParameter($key){
return $this->vars_pay[$key];
}
Devuelve el valor del parámetro indicado obteniendo la información de los datos almacennados en $vars_pay.
Ejemplo:
$valor = getParameter("DS_MERCHANT_CURRENCY");
//$valor === "978"
FUNCIONES AUXILIARES: 3DES Function. function encrypt_3DES($message, $key){
// Se cifra
$l = ceil(strlen($message) / 8) * 8;
return substr(openssl_encrypt($message . str_repeat("\0", $l - strlen($message)), 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, "\0\0\0\0\0\0\0\0"), 0, $l);
}
FUNCIONES AUXILIARES: Cifrar URL en Base64. function base64_url_encode($input){
return strtr(base64_encode($input), '+/', '-_');
}
Encripta en Base64 la dirección URL que se pasa por parámetro de la función-
FUNCIONES AUXILIARES: Cifrar datos en Base64. function encodeBase64($data){
$data = base64_encode($data);
return $data;
}
Encripta en Base64 el dato que se pasa por parámetro de la función-
FUNCIONES AUXILIARES: Decodificar URL en Base64. function base64_url_decode($input){
return base64_decode(strtr($input, '-_', '+/'));
}
Desencripta de Base64 la dirección URL que se pasa por parámetro de la función-
FUNCIONES AUXILIARES: Decodificar datos en Base64. function decodeBase64($data){
$data = base64_decode($data);
return $data;
}
Desencripta de Base64 el dato que se pasa por parámetro de la función-
FUNCIONES AUXILIARES: MAC Función. function mac256($ent,$key){
$res = hash_hmac('sha256', $ent, $key, true);//(PHP 5 >= 5.1.2)
return $res;
}
FUNCIONES PARA LA GENERACIÓN DE LA PETICIÓN DE PAGO: Obtener Número de pedido. function getOrder($datos){
$posPedidoIni = strrpos($datos, "<DS_MERCHANT_ORDER>");
$tamPedidoIni = strlen("<DS_MERCHANT_ORDER>");
$posPedidoFin = strrpos($datos, "</DS_MERCHANT_ORDER>");
return substr($datos,$posPedidoIni + $tamPedidoIni,$posPedidoFin - ($posPedidoIni + $tamPedidoIni));
}
FUNCIONES PARA LA GENERACIÓN DE LA PETICIÓN DE PAGO: Obtener contenido de un Tag. function getTagContent($datos,$tag){
$posPedidoIni = strrpos($datos, "<".$tag.">");
$tamPedidoIni = strlen("<".$tag.">");
$posPedidoFin = strrpos($datos, "</".$tag.">");
return substr($datos,$posPedidoIni + $tamPedidoIni,$posPedidoFin - ($posPedidoIni + $tamPedidoIni));
}
FUNCIONES PARA LA RECEPCIÓN DE LA PETICIÓN DE PAGO: function createMerchantSignatureHostToHost($key, $ent){
// Se decodifica la clave Base64
$key = $this->decodeBase64($key);
// Se diversifica la clave con el Número de Pedido
$key = $this->encrypt_3DES($this->getOrder($ent), $key);
// MAC256 del parámetro Ds_MerchantParameters
$res = $this->mac256($ent, $key);
// Se codifican los datos Base64
return $this->encodeBase64($res);
}
FUNCIONES PARA LA GENERACIÓN DE DATOS DE PAGO (Respuesta HOST to HOST) function createMerchantSignatureResponseHostToHost($key, $datos, $numPedido){
// Se decodifica la clave Base64
$key = $this->decodeBase64($key);
// Se diversifica la clave con el Número de Pedido
$key = $this->encrypt_3DES($numPedido, $key);
// MAC256 del parámetro Ds_Parameters que envía Redsys
$res = $this->mac256($datos, $key);
// Se codifican los datos Base64
return $this->encodeBase64($res);
}
Genera la clave de firma necesaria para realizar la conexión SOAP que envía la operación a la pasarela de pagos.
Datos requeridos:
  1. Clave de firma: Clave SHA256 del Terminal.
  2. Datos Operación: XML con los datos de la operación.
  3. Número de orden: NºOrden enviado en los datos de la operacón.

Ejemplo:
$Firma = $miObj->createMerchantSignatureHostToHost($kc,$datosEnt,$id);
$nuevaEntrada = "<REQUEST>".$datosEnt."<DS_SIGNATUREVERSION> HMAC_SHA256_V1</DS_SIGNATUREVERSION><DS_SIGNATURE>".$Firma. "</DS_SIGNATURE></REQUEST>";