SOAP HEADER Web Service

Hola

Me encuentro con un tema el cual es nuevo para mi, el requerimiento que tengo va de consumir dos servicios web, el primero me da una clave de acceso y el segundo es para enviar ordenes de compra, sin embargo me pide la clave de acceso que creo el primer servicio, pero su estructura no tiene ningún nodo para dicho acceso, investigado veo que es posible agregar una cabecera a cualquier servicio que se consuma

He avanzado con las puertas lógicas y configuraciones de soamanager de cada una, también con el código para agregar la cabecera, en el último no he tenido éxito, aún no logro insertar la cabecera correctamente para su envió

Alguien ha pasado por lo mismo¿?

Dejo mi código:

Hola !
Que tipo de servicio es ?
Si estas consumiendo un servicio WSDL, debes cargarlo en la SE80 y luego crear su puerta logica en la SOAMANAGER, ahí puedes ingresar las credenciales ( Usuario, contraseña y Endpoint )
Si es un servicio REST , Puedes utilizar la clase if_http_client ( ver en transacción SE24) y ahí tiene un metodo llamado AUTHENTICATE para agregar el usuario y contraseña de conexión.
Espero te sirva de referencía, saludos !

Hola @MendezSAP Gracias por tu respuesta y tiempo

Es un servicio externo que tengo que consumir, el cuál genera un código de acceso dinámico cada vez que se se invoca cambia dicho código, lo que comentas no lo puedo hacer para este servicio, ya he creado la puerta lógica, así como su configuración en la soamanger

El tema es que no logro adjuntarle el código de seguridad en el header del servicio, solo puedo visualizar el body (la estructura que debo llenar al consumir el servicio)

Saludos

Hola,
Tenemos un codigo parecido, te lo paso para que puedas comparar

**Crear servicio
  TRY.
      CREATE OBJECT service_senasa
        EXPORTING
          logical_port_name = 'ZSENASA_PF2CO_IWEB_SERVICE_SEN'.
    CATCH cx_ai_system_fault INTO cx_root.
      text = cx_root->get_text( ).
  ENDTRY.

**************************************************
*              H-E-A-D-E-R  X-M-L                *
**************************************************
**Agregar datos del Header obligatorios para SENASA
  protocolo ?= service_senasa->get_protocol( if_wsprotocol=>ws_header ).

  CONCATENATE
*           '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
             '<soap:Header>'
*           '<soapenv:Header>'
               '<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">'
                 '<wsse:UsernameToken wsu:Id="UsernameToken-3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">'
                   '<wsse:Username>testwservice</wsse:Username>'
                   '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">testwservicepsw</wsse:Password>'
*                    '<wsse:Username>7798181710001</wsse:Username>'
*                    '<wsse:Password>TRAZA123</wsse:Password>'
*                    '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">TRAZA123</wsse:Password>'
                 '</wsse:UsernameToken>'
               '</wsse:Security>'
             '</soap:Header>'
*            '</soap:Envelope>'
*             '<soapenv:Header>'
  INTO lv_string.

*Convertir a XSTRING
  lv_xstring = cl_proxy_service=>cstring2xstring( lv_string ).

  IF lv_string IS NOT INITIAL.

    CALL FUNCTION 'SDIXML_XML_TO_DOM'
      EXPORTING
        xml           = lv_xstring
      IMPORTING
        document      = xml_document
      EXCEPTIONS
        invalid_input = 1
        OTHERS        = 2.
    IF sy-subrc EQ 0 AND xml_document IS NOT INITIAL.
      xml_root = xml_document->get_root_element( ).
      xml_element ?= xml_root->get_first_child( ).

      WHILE xml_element IS NOT INITIAL.
        CLEAR: name, namespace.
        name = xml_element->get_name( ).
        namespace = xml_element->get_namespace_uri( ).
        protocolo->set_request_header( name = name namespace = namespace dom = xml_element ).
        xml_element ?= xml_element->get_next( ).
      ENDWHILE.
    ENDIF.
  ENDIF.

**************************************************
*                B-O-D-Y  X-M-L                  *
**************************************************
**Asignar datos que seran enviados a SENASA
  request-parameters-arg0 = gt_ztrans_senasa.
  request-parameters-arg1 = '7798181710001'.
  request-parameters-arg2 = 'AGRO2020'.
*  request-parameters-arg1 = '7798192290004'.
*  request-parameters-arg2 = 'GGezP.99'.
*  request-parameters-arg1 = '7798181710001'.
*  request-parameters-arg2 = 'TRAZA123'.
*  request-parameters-arg1 = 'senasaws'.
*  request-parameters-arg2 = 'Clave2013'.

**************************************************
*           S-A-V-E   T-R-A-N-S-A-C-T-I-O-N      *
**************************************************
**Consumir Web Services de SENASA
  TRY.
      CALL METHOD service_senasa->save_transacciones
        EXPORTING
          save_transacciones          = request
        IMPORTING
          save_transacciones_response = p_ge_response.
*      IF ge_response-parameters-return-resultado IS INITIAL.
*        p_wa_error_flag = 'X'.
*        p_gw_error_response = ge_response-parameters-return-errores.
*      ENDIF.
    CATCH cx_ai_system_fault INTO cx_root.
      text = cx_root->get_text( ).
    CATCH cx_ai_application_fault INTO cx_root.
      text = cx_root->get_text( ).
  ENDTRY.

Ojala te sirva.
Saludos.

3 Me gusta

Hola @sconoredhot

Lo reviso y te cuento como me va

Gracias

Hola @sconoredhot

Hice algunos cambios conforme a lo que vi en tu código, pero no tuve éxito, sigue sin crear el header y el servicio que consumo no me deja pasar

image

Alguna idea de lo que este faltando¿?

Saludos

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.