2015-11-20 3 views
0

Я tryng использовать для этого веб-сервиса для того, чтобы получить финансовую информацию, но так как я очень мало знаю об этом языке я считаю, что это очень трудно даже подключиться:Подключение к веб-службе комплекса SOAP

http://www2.sentinelperu.com/ws/asentinelws02.aspx?wsdl

Я бы очень признателен за любую помощь. До сих пор я попытался это:

library(RCurl) 

    headerFields = 
    c(Accept = "text/xml", 
    Accept = "multipart/*", 
    'Content-Type' = "text/xml; charset=utf-8", 
    SOAPAction = "http://www2.sentinelperu.com/ws/asentinelws02.aspx?wsdl") 

    body = '<?xml version="1.0" encoding="utf-8"?> 
      <soap:Envelope 
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 

      <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-       instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"> 
      <soap:Body> 

      <Usuario>XXXX</Usuario> 
      <Password>XXXX</Password> 
      <Servicio>005</Servicio> 
      <Tipodoc>42945948</Tipodoc> 
      <Nrodoc>06594002</Nrodoc> 

      </soap:Body> 
      </soap:Envelope>' 


      curlPerform(url = "http://www2.sentinelperu.com/ws/asentinelws02.aspx?wsdl", 
      httpheader = headerFields, 
      postfields = body 
      ) 

Выход: не

 OK 
    0 
    <?xml version = "1.0" encoding = "utf-8"?> 
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    </SOAP-ENV:Envelope> 

ответ

1

Ничего плохого в R части, но вы должны уважать пространство имен в своем запросе - изменить тело:

body <- 
    '<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:afp="AFPrivado"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <afp:SentinelWS02.Execute> 
     <afp:Usuario>XXXX</afp:Usuario> 
     <afp:Password>XXXX</afp:Password> 
     <afp:Servicio>005</afp:Servicio> 
     <afp:Tipodoc>42945948</afp:Tipodoc> 
     <afp:Nrodoc>06594002</afp:Nrodoc> 
     </afp:SentinelWS02.Execute> 
    </soapenv:Body> 
    </soapenv:Envelope>' 

Ответ:

<?xml version = "1.0" encoding = "utf-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <SOAP-ENV:Body> 
    <SentinelWS02.ExecuteResponse xmlns="AFPrivado"> 
     <Cnsdtconrapsms xmlns="AFPrivado"> 
     <Documento>06594002</Documento> 
     <RazonSocial /> 
     <FechaProceso>1900-01-01</FechaProceso> 
     <Semaforos /> 
     <Score>0.0000</Score> 
     <NroBancos>0</NroBancos> 
     <DeudaTotal>0.00</DeudaTotal> 
     <VencidoBanco>0.00</VencidoBanco> 
     <Calificativo /> 
     <Veces24m /> 
     <ScorePromedio>0.0000</ScorePromedio> 
     <SemaActual /> 
     <SemaPrevio /> 
     <SemaPeorMejor /> 
     <Documento2 /> 
     <EstDomic /> 
     <CondDomic /> 
     <DeudaTributaria>0.00</DeudaTributaria> 
     <DeudaLaboral>0.00</DeudaLaboral> 
     <DeudaImpaga>0.00</DeudaImpaga> 
     <DeudaProtestos>0.00</DeudaProtestos> 
     <DeudaSBS>0.00</DeudaSBS> 
     <TarCtas>0</TarCtas> 
     <RepNeg>0</RepNeg> 
     <TipoActv /> 
     <FechIniActv /> 
     <CodigoWS>1</CodigoWS> 
     </Cnsdtconrapsms> 
    </SentinelWS02.ExecuteResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Для чтения результата вам понадобится следующее:

h = basicTextGatherer() 
response <- 
    curlPerform(url = "http://www2.sentinelperu.com/ws/asentinelws02.aspx?wsdl", 
    httpheader = headerFields, 
    postfields = body, 
    writefunction = h$update 
) 


# parse the result  
library(XML) 
xml_ret <- xmlParse(h$value(), asText = TRUE) 

# get the score value for example: 
score_element <- getNodeSet(xml_ret, "//x:Score", namespaces = c(x = "AFPrivado"))[[1]] 
score_value <- XML::xmlValue(score_element) 
+0

Это почти работал, но когда я включаю пароль и имя пользователя (Новичок), я получаю сообщение об ошибке, если я исполню xml_ret:> xml_ret <- XMLParse (h $ значение (), asText = TRUE) xmlns: URI AFPrivado не является абсолютным – JVALLEJO

+0

Вы можете увидеть ответ с помощью 'cat (h $ value())'. Я предполагаю, что у него есть некоторые проблемы с XML, но если ошибки не являются фатальными, 'xml_ret' должен содержать анализируемый XML. – bergant

+0

Дополнительный комментарий: проблема заключается в том, что этот ответ службы использует относительные ссылки URI в объявлении пространства имен (_AFPrivado_ вместо _http: //.../..._). Парсер будет выдавать предупреждение, но не будет останавливаться с ошибкой. – bergant

Смежные вопросы