2009-11-24 2 views
3

this WSDL을 사용하여 뉴스 레터 서비스에 SOAP 요청을 보내려고합니다.PHP SoapClient 요청

$client = new SoapClient($wsdl_url, array(
    'login' => 'myusername', 
    'password' => 'mypassword', 
    'trace' => true 
)); 

$client->AddSubscriber(
    new SoapParam('MyFirstName', 'FirstName'), 
    new SoapParam('MyLastName', 'LastName'), 
    new SoapParam('[email protected]', 'Email') 
); 

나는 예외를 받고 있어요 : 여기

<?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="schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <AuthHeader xmlns="admin.ekeryx.com"> 
     <Username>string</Username> 
     <Password>string</Password> 
     <AccountID>string</AccountID> 
    </AuthHeader> 
    </soap:Header> 
    <soap:Body> 
    <AddSubscriber xmlns="admin.ekeryx.com"> 
     <subscriber> 
     <ID>string</ID> 
     <FirstName>string</FirstName> 
     <LastName>string</LastName> 
     <Email>string</Email> 
     </subscriber> 
     <overwritable>boolean</overwritable> 
    </AddSubscriber> 
    </soap:Body> 
</soap:Envelope> 

전송되는 무슨이다 :

여기
End element 'Body' from namespace 'schemas.xmlsoap.org/soap/envelope/' expected. Found element 'LastName' from namespace ''. Line 2, position 156. 

이 서비스가 AddSubscriber에 대한 기대 무엇 여기

내 PHP입니다 :

<SOAP-ENV:Envelope xmlns:SOAP-ENV="schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="tempuri.org/"> 
    <SOAP-ENV:Body> 
     <ns1:AddSubscriber/> 
      <LastName>MyLastName</LastName> 
      <Email>[email protected]</Email> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

저는 SOAP에 익숙하지 않았으며, 그 곳곳의 문서를 찾고 있었지만, 제가하고있는 일에 대한 훌륭한 참고 자료를 찾을 수없는 것 같습니다.

모든 안내는 대단히 감사하겠습니다!


감사합니다. 예를 들어 주시겠습니까? 내가 보여 PHP 사이트의 예를 찾고 있어요 :

<?php 
class SOAPStruct { 
    function SOAPStruct($s, $i, $f) 
    { 
     $this->varString = $s; 
     $this->varInt = $i; 
     $this->varFloat = $f; 
    } 
} 
$client = new SoapClient(null, array('location' => "http://localhost/soap.php", 
            'uri'  => "http://test-uri/")); 
$struct = new SOAPStruct('arg', 34, 325.325); 
$soapstruct = new SoapVar($struct, SOAP_ENC_OBJECT, "SOAPStruct", "http://soapinterop.org/xsd"); 
$client->echoStruct(new SoapParam($soapstruct, "inputStruct")); 
?> 

당신이 등 모든 바르 $this->FirstName = $first_name을 할당, 나는 가입자 PHP 클래스를 작성해야 건가요 ... 다음에 넣어 SoapVar 인코딩 SOAP_ENC_OBJECT와 함께? 구독자 구조를 더 잘 표현하려면 어떻게해야합니까?

+0

있습니다 찾고있는 것을하지 SOAP 헤더 당신이 겪고있는 문제는 다음과 같은 코드는 HTTP 헤더에 로그인과 암호를 전달하는 것입니다 생각 , 게시 규칙 당 최대 1 개의 하이퍼 링크를 준수하기 위해 코드의 모든 URL에서 http : //를 제거했습니다. –

답변

3

그래서 당신이 subsrciber 구조를 표현하기 위해 SoapVar를 사용하여 좀 더 복잡한 구조를해야 할 두 가지에 Params 가입자 및

<soap:Body> 
<AddSubscriber xmlns="admin.ekeryx.com"> 
    <subscriber> 
    <ID>string</ID> 
    <FirstName>string</FirstName> 
    <LastName>string</LastName> 
    <Email>string</Email> 
    </subscriber> 
    <overwritable>boolean</overwritable> 
</AddSubscriber> 

overwriteable

있다. 바디 생산/

$subscriber = new StdClass(); 
$subscriber->ID = 'myid'; 
$subscriber->FirstName = 'First'; 
$subscriber->LastName = 'Last'; 

$subscriber = new SoapParam(new SoapVar($subscriber, SOAP_ENC_OBJECT, $type, $xsd), 'subscriber'); 

$ 유형이 XSD의 타입이어야 ... : 알면 비누에 대한 XSD를 확인하고자하지만

http://www.php.net/manual/en/soapvar.soapvar.php

, 내가 생각하는 다음과 비슷한 모습이 될 것입니다 API에 대한 WSDL defeinition과 $ xsd는 XSD의 URI입니다.

나는 그것을해야한다고 생각하지만 EBay (그것은 악몽 하하였습니다)에 대해서만 네이티브 PHP 라이브러리를 사용했습니다. 그리고 그것은 거의 2 년 전 이었기 때문에 약간 녹슬 었습니다.

0

나 자신이 비슷한 대답을 찾고있는 동안이 문제가 발생했습니다. 나는 믿을

$client = new SoapClient($wsdl_url, array(
    'login' => 'myusername', 
    'password' => 'mypassword', 
    'trace' => true 
)); 

당신이

$headerbody = array('Token' => $someToken, 
        'Version' => $someVersion, 
        'MerchantID'=>$someMerchantId, 
         'UserCredentials'=>array('UserID'=>$UserID, 
              'Password'=>$Pwd)); 
관련 문제