2011-07-21 23 views
4

私は何をしようとしているのかについて私には分かりませんと言って始めます。私のPHPスキルは-beginner-で、webservicesでの私の経験はNULLです。PHPのWSDL Webサービスからデータを取得する

私はWSDL URL http://example.com/ws/3.1/NNE?WSDLを持っています。 searchTargetGroupメソッドをPHPスクリプトから呼び出すので、答えをループしてデータベースに保存することができます。

誰でも、私はPHPからの呼び出しをどのように作成するか分かりません。 :-( 私はPHP用のNuSOAPとSoapClientをビルドしましたが、運がありませんでした。問題は、私がカエルのしゃぶりを完全に理解することなく複雑なメソッドを呼び出そうとしていることです

SoapUIを使用して定義ファイルを取得し、要求を作成すると、完璧に動作し、私が望むすべての情報が得られます。手がかりなしどのようにPHPを作成する必要がありますかSoapUIとまったく同じリクエストを作成して正しい答えを得るファイル

SoapUIが私のために生成するXMLリクエストは、次のようになります。

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nne="http://example.com/ws/NNE"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <nne:searchTargetGroup soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
      <QuestionTargetGroup_1 xsi:type="nne:QuestionTargetGroup" xmlns:nne="http://example.com/ws/NNE"> 
       <companyFormCodeList xsi:type="xsd:string">10,60,80</companyFormCodeList> 
       <companyStatus xsi:type="xsd:string">0</companyStatus> 
       <hasPhoneOnly xsi:type="xsd:boolean">true</hasPhoneOnly> 
      </QuestionTargetGroup_1> 
      <int_2 xsi:type="xsd:int">500</int_2> 
      <int_3 xsi:type="xsd:int">1</int_3> 
      <int_4 xsi:type="xsd:int">1</int_4> 
      <String_5 xsi:type="xsd:string">passstring</String_5> 
     </nne:searchTargetGroup> 
    </soapenv:Body> 
</soapenv:Envelope> 

誰かが私をある方向に助けることができますか?好ましくは正しいもの。 :-)

IPで保護されているため、URLでテストすることはできませんが、PHPファイル/関数から上記の呼び出しを行う方法を知りたいと思っています。

答えて

3

まずは初心者ですので、完全に正しい答えを保証することはできませんが、少なくともいくつかのヒントを与えることができます。

NuSoapではなくSoapClientを使用してください。 SoapClientはPHPのC、NuSoapで書かれているので、SoapClientは高速です。

あなたのWSDLファイルに問題がない場合は、次にあなたがしなければならないことすべては、次のようになります。

$client = new SoapClient("[URL to wsdl]"); 

ことのSoapClientは残りの世話をし、WSDLで定義されたすべての手順が直接利用できるようになります後。

結果は、タイプがstdClassであるか、タイプがstdClassの配列です。

WSDLがなければ、すべての詳細、パラメータ、名前空間の種類を指定し、__soapCall()で直接呼び出す必要があります。

あなたは$(のvar_dumpで結果の構造を調べることができますいずれかの方法を)&株式会社

+0

お役に立てば幸いですが、それは致命的なエラーが返さ: しかし、それは、任意のWebサービスのために働く可能性があり、「キャッチされないにSoapFault例外:[クライアント] SOAP-ERROR:エンコード:オブジェクトが「hasn t '区域'財産 "と呼ばれる。 WSDLサービスのオーナーは、「地区」フィールドなど、私が尋ねていないフィールドを残しておく必要があると私に言った。私はちょうど呼び出しで定義されたすべてのフィールドを試してみましたが、質問したくなかったフィールドは空です。今は動作します。新鮮な目のペアは私がそれに取り組むために必要なものでした。ありがとうラファエル:) – kasperwf

0

ラファエルは、あなたがよりよいPHPのSOAP拡張によって提供されるのSoapClientを使用すると思い言ったように。あなたのサービスをテストするには

最初から始まるクライアントを構築、その後

$options = array(
       'soap_version'=>SOAP_1_1, 
       'exceptions'=>true, 
       'trace'=>1, 
       'cache_wsdl'=>WSDL_CACHE_NONE 
      ); 

(それは、開発環境で便利です)あなたはWSDLをチェイスしない例えば伝えることができるオプションの配列を宣言するwsdlを持っています:

$client = new SoapClient("http://service.nnerhverv.dk/nne-ws/3.1/NNE?WSDL", $options); 

このようにsearchTargetGroupメソッドを呼び出します。ここでのポイントは、TUが正しくquestionTargetGroupのPARAMを構築している、これは動作するはずです:

//build the parameters for the SearchTargetGroup 
$questionTargetGroup = array (
    "companyFormCodeList" => "10,60,80", 
    "companyStatus" => "0", 
    "hasPhoneOnly" => "true" 
); 

$response = $client->searchTargetGroup($questionTargetGroup, 500, 1, 1, "passstring"); 

は最終的にあなたが戻って私はからセレナのWebサービスを呼び出す方法についての記事を書いた

print_r($response); 
関連する問題