2012-12-17 7 views
0

내가 WSDL을 기반으로 클래스지도 클래스를 만들 wsdl2php.php을 사용 매핑합니다. 그것은 하나의 계정을 생성하고 하나의 이름 값 쌍을위한 두 개의 클래스를 생성했습니다. PHP 중첩 된 SOAP 태그

나는 비누 요청을 만들 클래스 (들)을 사용하는 방법을 알아 내려고 노력하고있어. 비누 서버는 .Net입니다. 나는 NameValue 태그에 이름과 값 쌍을 중첩의 몇 가지 방법을 사용하여 시도했다

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <CreateAccount xmlns="https://www.mywsdlsitehere.com/Account"> 
     <parameters> 
     <NameValue> 
      <name>string</name> 
      <value>string</value> 
     </NameValue> 
     <NameValue> 
      <name>string</name> 
      <value>string</value> 
     </NameValue> 
     </parameters> 
    </CreateAccount> 
    </soap:Body> 
</soap:Envelope> 

: 여기

는 CreateAccount.asmx 페이지가 제시 한 비누 요청입니다. 당신은 구조 서비스 요구를 생성하지 않는

Fatal error: Uncaught SoapFault exception: [soap:Server] Server was unable to process request. ---> Value cannot be null.

답변

1

:

$createaccount->parameters->fullName='Testy Tester'; 
$createaccount->parameters->userEmail='[email protected]'; 
$createaccount->parameters->accountName='TestyTester'; 
$createaccount->parameters->password='*****'; 

class CreateAccount { 
    public $parameters; // ArrayOfNameValue 
} 

class NameValue { 
    public $name; // string 
    public $value; // string 
} 

public function CreateAccount(CreateAccount $parameters) { 
    return $this->__soapCall('CreateAccount', array($parameters),  array(
      'uri' => 'https://www.mywsdlsitehere.com/Accounting', 
      'soapaction' => '' 
      ) 
    ); 
    } 

내가 오류는 다음과 같습니다

내 최신, 시도에 실패했습니다.

parameters 속성이있는 CreateAccount 개체는 NameValue 개체의 여러 인스턴스가 포함 된 최상위 수준의 개체가 필요합니다.

$create = new CreateAccount(); 
$create->parameters = array(); 

$nameValue1 = new NameValue(); 
$nameValue1->name = "Name1"; 
$nameValue1->value = "Value1"; 

$create->parameters[] = $nameValue1; 
+0

감사 스벤 :

나는 이런 식으로 뭔가를 기대. 여러 NameValue 쌍에 대해 무엇을 할 수 있습니까? 예를 들어, 3 개의 다른 이름과 값이 있습니까? $ nameValue1의 세 줄을 복사 한 다음 각 $ create-> parameters [] = $ nameValue1에 대해 새 줄을 추가하겠습니까? – fowbar

+0

나는 이것을 가지고있다 :'$ create = new CreateAccount(); $ create-> parameters = array(); $ nameValue1 = 새 NameValue(); $ nameValue1-> name = "Name1"; $ nameValue1-> value = "Value1"; $ create-> parameters [] = $ nameValue1; $ cr_result = $ account-> CreateAccount ($ create); var_dump ($ cr_result) 다음 오류가 발생합니다. 서버가 요청을 처리 할 수 ​​없습니다. ---> 원격 작업을 실행하는 중 오류가 발생했습니다. (XML 문서 (1, 2)에 오류가 있습니다 (이 (가) 예상하지 못했습니다.))) – fowbar

+0

나는 $ 계정이 soapcall이 시작된 AccountService 클래스의 인스턴스라고 언급하는 것을 잊었습니다. GetAccount 및 UsernameAvailable과 같은 다른 비누 호출에 사용했기 때문에 작동하는 것으로 알고 있습니다. – fowbar