2017-05-05 5 views
0

英語は母国語ではありませんので、忍耐してください。SOAPリクエストの特定の封筒を作成

WebServiceを使用するには、特定のエンベロープが必要です。これは、サーバー管理者が協力的ではないためです。今私はちょっと混乱しています。私はどこから始めるべきか分からないからです。

私はいくつかの手紙と請求書の状態を報告する必要があります、PHPを使用して、MySQLのデータベースにtrought webServiceを報告するための情報を検索するスクリプトを作成することができました。

"wsdl"設定のIPアドレスをPHP Soap Clientに送信する代わりに、管理者がエンベロープを作成するためのサンプルテキストファイル(xmlタイプ)を送信します。 SoapUIを使用して回答を得ることができましたが(エラー回答、それでも答えは)、私はCronを使って自動レポートを作成しようとしていますが、XMLからエンベロープを作成して報告するSoapClient。あなたが/コピーSOAPUIにこのコードを貼り付けする「エンドポイント」を設定した場合

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.esb.comfenalcovalle.com.co/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ws:requestMessageOut> 
     <ws:header> 
      <ws:invokerDateTime>2017-05-05</ws:invokerDateTime> 
      <ws:moduleId>ACTUALIZA_CORRESPONDENCIA</ws:moduleId> 
      <ws:systemId></ws:systemId> 
      <ws:messageId>ACTUALIZA_CORRESPONDENCIA|123456789</ws:messageId> 
      <ws:logginData> 
       <ws:sourceSystemId></ws:sourceSystemId> 
       <ws:destinationSystemId></ws:destinationSystemId> 
      </ws:logginData> 
      <ws:destination> 
       <ws:namespace>http://co/com/comfenalcovalle/esb/ws/BPSirapActualizaCorrespondencia</ws:namespace> 
       <ws:name>BPSirapActualizaCorrespondencia</ws:name> 
       <ws:operation>execute</ws:operation> 
      </ws:destination> 
      <ws:securityCredential> 
       <ws:userName></ws:userName> 
       <ws:userToken></ws:userToken> 
      </ws:securityCredential> 
      <ws:classification> 
       <!--Zero or more repetitions:--> 
       <ws:classification></ws:classification> 
      </ws:classification> 
     </ws:header> 
     <ws:body> 
      <ws:request> 
      <BPSirapActualizaCorrespondenciaProcessRequest> 
       <pividdocu>1075000000010907</pividdocu> 
       <pinidesdo>25</pinidesdo> 
       <pinidmoed></pinidmoed> 
       <pivdireccion>CR 34-10 229</pivdireccion> 
       <pivcodigoLeyMuni>76001</pivcodigoLeyMuni> 
       <pivcodigoLeyDpto>76</pivcodigoLeyDpto> 
       <pivnumeroGuia>574127725</pivnumeroGuia> 
       <pivnumeroRemision>0102205-12</pivnumeroRemision> 
       <pivguiaDigitalizada>iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowREMwRTAxRUU1RkQxMUU0QUFGMDlERUQ0Mzk5MEUyNSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNkIwNUI1RUU1RkQxMUU0QUFGMDlERUQ0Mzk5MEUyNSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjBEQzBFMDFDRTVGRDExRTRBQUYwOURFRDQzOTkwRTI1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjBEQzBFMDFERTVGRDExRTRBQUYwOURFRDQzOTkwRTI1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+U2I/YAAABJNJREFUeNq8Vm1MW2UUfu5tabtSPkpJLd9QoAPqEAZMmLrJnCiakW1O4w+y+MPETP2xLGOJMcbE+EeZ8YdxuKhxiYlZTIb7MV0cyUJwOpSJA9wYQz62FsZXoWWltKXt9bxv20uBjTCjnuY0t+8993w855znVpAkCf+1KDdgU0y6j3QnaRqpQOokvUJ6lrST1LeeA2GdSp4lPWSfdjV09ttxfXQCcwuLCJG5TqNCfnoKHi3KhiUzFXFK8Q2yPfGgQd6fmHW//dWP3ej+awyhUAjLZuELQRDpLIQsYzIO7t6KCkt6Cx03k45sJMhHfwzeOfJx6yW4vf6ITymC0mpbUT7bu70EB+vKWaB3SB3r9eTdvqHJIx982w7/UpCgkagK0qCEIFXDs6IPDylEwogCVEolzv5yHdo41aEDtVZ2/Pr9KtntcC22NX1+Hi7CfikQgk6rgiklETkmPYxJ8eC2EecKUYQ6ToFrt6bQ1W+DGIl67MUdqLZmNdHl8XsFOfPh6Z/2X75xCwGqotSSgcL0VKogiJ1b8lBAjY4VXyCI7yj7TEMSRqfmcLqtByq1gpLR4fhr9dBtUhnIbDYKKhPL+Mzd/d1DYxyOIEFUX2VhhvD4Aljw+ddMxtC4A59804HWS9fwhDUHCiVVQohOudz4+c/bzOSl1T3Zc+WmnSAKcqwF+mIV1hRnwesPwJisxSA57RuZBLUH+aZkFGYYcLjxSaokEX72HMORz4aEXhr3Z6oKnqJfn8UGMU/MubljFkChENE7PMGDijSq7b3DGHfcRVVRJvfTecOO9p4R1JRk8wG5THvEpowhzwZh0O5gyR3QqJTxdGMhGiQpDEl4coLU9FKzicPAhqpn+A4qCzPwxbnf4PUtoeFxK7QEZXl+GsgRbo7NorWjT0bA5fFggcaf7ulZEFGegJW7Jos/EICXsrVNu+Ca92BpKYAB+wy0apXcKwkh+VkGm7jsbUVP5tlDUUtJXj7wTE16HZJ1GlQ/Ysa824ttmzMx41qAXrdJTlGiYZEiKeu0asRruD9n7HTZDIlaebMFYWUm+7YXEyQOPJxjRG1ZHkYnnairKJB3YxmL8LN5xhSW3Dk6cMcGOV9RkA6lYpkA2LJFJZEya3rhMZTmmWCmxTy8t5p2yLBMLoIgMwBr/hayI7kYSz5Mruam6dusuUYZMtu0cy3nZ6XyQOq4lWw07/HKtJMYr0aNNZMv9724q+WVuvKn3/pymmdzhqYlw5CAkmwjVSXwM0nmLomyB+c2NvqnLnRzmFg1jbvKkJoU/x6Z3r4fCzdf/H3o6Invf0WAxjgkMf7S8Nlfy8bhYJ5FH1VB2SpFPFe5Ga8+X9mymiBXs3DTrop8jagQ3jz5Qxd8tO2eRf8KlmeOhWijhXBlSoWAuq2FLMBJuvHpRl9azQO2maNft11Fv22SoGJQSHJjw0sX4oEe0iegoaYI9dssLACroudBXr8vs9dv18DYjo6+EUw73ZwseflEO2zky2jja8vMtJhxx9jLDohu5caDRGUPaSNpLmlClAhIGWFdID3FBuyf/pH410TE/yB/CzAAZIXaj6vGZXwAAAAASUVORK5CYII=</pivguiaDigitalizada> 
      </BPSirapActualizaCorrespondenciaProcessRequest> 
      </ws:request> 
     </ws:body> 
     </ws:requestMessageOut> 
    </soapenv:Body> 
</soapenv:Envelope> 

https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapterあなたは私が話していたエラーの答えを得るでしょう...

例のエンベロープは、次のようです。

how to generate a soap request in php from this xml?

https://www.wackylabs.net/2004/07/creating-a-web-service-and-wsdl-using-nusoap/

how to create soap xml request in php

PHP SoapClient: multiple complex types are overwritten in soapcall

how to generate XML with soap envelope and body tag using php

いくつかのリンクは、私は答えのための私の検索troughtを探していました0

------------------>更新日5月18日

彼の答えはAlex Blexで、XMLを "文字列"にするために彼のポイントを使用しています回避策を使用してWebServiceを使用することができます。クライアントを構成する代わりに、単に「null」を使用します。

$location_URL = 'https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter'; 
$action_URL = "https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter"; 

$client = new SoapClient(null, array(
'location' => $location_URL, 
'uri'  => "https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter", 
'trace' => 1, 
)); 

$return = $client->__doRequest($xmlString,$location_URL,$action_URL,1); 

悲しい$リターンも代わりに文字列、オブジェクトまたはXMLであるが、そのデータベースに報告し、店舗を得ることが非常に難しいです。

私はアレックスBlexによって提案された方法を使用する場合、何も受信しない、これは彼のコードにマイナーな修正である:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlstring); 

$result = curl_exec($ch); 
$info = curl_getinfo($ch); 
$errors = curl_error($ch); 

$resArr = array(); 
$resArr = json_decode($result); 
$xml = simplexml_load_string($result); 

echo "<pre>"; print_r($result); echo "</pre>"; 
echo "<pre>"; print_r($info); echo "</pre>"; 
echo "<pre>"; print_r($resArr); echo "</pre>"; 
echo "<pre>"; print_r($errors); echo "</pre>"; 
curl_close($ch); 

私はすでにクライアントの作業が、任意の修正や新しい方法ですできるだけ早く実施することができる。

答えて

1

cURLで低レベルにすることができます。

あなたは

curl --request POST \ 
    --url https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter \ 
    --data '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.esb.comfenalcovalle.com.co/"> .... </soapenv:Envelope>' 

のようなAPIにXMLを投稿する場合あなたが実際に正常な応答を取得するPHPで

.... 
    <NS1:responseMessageOut xmlns:NS1="http://ws.esb.comfenalcovalle.com.co/"> 
     <NS1:header> 
      <NS1:invokerDateTime>2017-05-05</NS1:invokerDateTime> 
      <NS1:moduleId>ACTUALIZA_CORRESPONDENCIA</NS1:moduleId> 
      <NS1:systemId></NS1:systemId> 
      <NS1:messageId>ACTUALIZA_CORRESPONDENCIA|123456789</NS1:messageId> 
      <NS1:logginData> 
       <NS1:sourceSystemId></NS1:sourceSystemId> 
       <NS1:destinationSystemId></NS1:destinationSystemId> 
      </NS1:logginData> 
      <NS1:destination> 
       <NS1:namespace>http://co/com/comfenalcovalle/esb/ws/BPSirapActualizaCorrespondencia</NS1:namespace> 
       <NS1:name>BPSirapActualizaCorrespondencia</NS1:name> 
       <NS1:operation>execute</NS1:operation> 
      </NS1:destination> 
      <NS1:responseStatus> 
       <NS1:statusCode>SUCESS</NS1:statusCode> 
      </NS1:responseStatus> 
     </NS1:header> 
     <NS1:body> 
      <NS1:response> 
       <BPSirapActualizaCorres 
     .... 

それは何かのような

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'https://virtual.comfenalcovalle.com.co/esbtest/WSChannelAdapter'); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $theXML); 
    $result = curl_exec($ch); 
    curl_close($ch); 

応答であるべき$resultはDOMXmlまたはSimpleXMLで解析できます。

+0

ありがとう、アレックス、悲しいことに私は何の反応も得ていない、多分私は間違いや何かをしています。質問の更新を確認できますか? –

+1

'' json_decode'をしないでください。応答はXMLストリングであり、jsonではありません。 –

関連する問題