Consumir webservice HTTPS con autenticación usando Drupal

WebService sobre HTTP
Integrar e interconectar sistemas haciendo uso de servicios web hoy en dia no es una novedad, el término webservice es un recurso que a diario lo tenemos en mente para consumir datos externos, muchos de ellos de naturaleza financiera o privada, de acuerdo a este precedente quienes nos proporcionan este tipo de conexión tienen la sensatez y la precaución de asegurar estos servicios para evitar ser víctimas de hackers o infiltraciones no autorizadas, para lo cual tienen una infraestructura implementada con protocolos seguros, certificados digitales, mapeo de IP publica y credenciales de acceso como usuario y clave.
 
En la presente publicación voy a compartir mi conocimiento haciendo uso de estos servicios web integrados con un sitio web construido con una plataforma sólida y flexible como es Drupal, para lo cual voy a partir de que ya se tiene el conocimiento de la creación de un módulo personalizado utilizando el módulo webservice client (wsclient) que nos permite consumir SOAP o REST, en mi caso voy a hablar sobre la integración de servicios SOAP.
 
además es fundamental que quienes presten estos servicios brinden la seguridad necesaria mucho más cuando las operaciones son financieras, a través de esta publicación voy a compartir mi conocimiento acerca de como integrar estos servicios con Drupal, para lo cual necesitaremos del módulo: wsclient
 
El escenario es un webservice SOAP con autenticación y uso de certificado con protocolo https (protocolo seguro).
 
En la página de módulo existe la documentación para el consumo de webservice con autenticación sin embargo en mi caso no me funcionó así que decidí invertir un poco de tiempo googleando y llegue hasta la solución que voy a compartir.

//   Webservice Electronic Money call

  $ip = '182.214.100.45';
  $port = '8443';
  $context = stream_context_create(array(
      'ssl' => array(
                'local_cert' => '<path_to_cert>/unifi1.pem',
            )
   ));


  $service = new WSClientServiceDescription();
  $service->settings['options'] = array(
       'login' => 'usuario',
       'password' => 'clave',
       'stream_context' => $context,
       'trace' => TRUE,
     );
  $service->name = 'myservice';
  $service->label = 'My Service';
  $service->url = 'https://'. $ip . ':' . $port .'/enlace/services/MTSService?wsdl';
  $service->type = 'soap';
try {
    $service->endpoint()->initializeMetaData();
    $services[$service->name] = $service;
  }
  catch (WSClientException $e) {
    watchdog('wsclient', $e->__toString());
  }
  return $services;
}
 
Secciones: 
Last modified: 
Wednesday, August 16, 2017 - 16:51