2012-04-17 4 views
3

私はthis wsdlからSOAPUIによって生成されたこのXMLを持っている:PHPのSoapClientにurnを追加するにはどうすればよいですか?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:safetypay:mws:api:messages"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <urn:CommunicationTestRequest> 
     <urn:ApiKey>?</urn:ApiKey> 
     <urn:RequestDateTime>?</urn:RequestDateTime> 
     <urn:Signature>?</urn:Signature> 
     </urn:CommunicationTestRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

それはOK機能しますが、私はPHP、のSoapClientのためのクライアントでそれを作成するとき、それが失敗した...そのエラーがそれているので、私を発見しましたわずかに異なりますが、それは壷(私はそれが何であるか分かりません)が紛失しているだけです。

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <CommunicationTestRequest> 
      <RequestDateTime>2012-04-17T23:21:54</RequestDateTime> 
      <ApiKey>XXXXX</ApiKey> 
      <Signature>XXXXX</Signature> 
     </CommunicationTestRequest> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

三つの主要diferencesである: 1)定義でのSoapClientによって生成されたコードは、この欠けている: のxmlns:URN = "URN:safetypay:MWS:APIをのSoapClientからXMLは次のようになり:メッセージ " 2)SoapUIで生成されたxmlで私はsoapenvを持っていますが、SoapClientで生成されたものではSOAP-ENVです 3)SoapUIでは、それぞれの子の前にurnがあります。

私は、設定を変更してオブジェクトから配列に移動することをほぼ一日懸命にしています(これまでは他のwsdlのものと同じでした)、私のインターネット調査は何もしませんでした。 ..私のミスは何ですか?

要求はこれです: 私はこのエラーを修正することができました:のSoapClientのための設定は、この1

$config = array(); 
$config ['exceptions'] = true; 
$config ['trace'] = true; 
$config ['cache_wsdl'] = WSDL_CACHE_NONE; 
$config ['soap_version'] = SOAP_1_1; 
parent::SoapClient ($url . '?wsdl', $config); 

編集です

$std = new RequestDateTime(); 
$std->RequestDateTime = date ('Y-m-d\TH:i:s', time()); 
$std->ApiKey = SafetyPaySoap::API_KEY_SAND; 
$std->Signature = SafetyPaySoap::SIG_KEY_SAND; 
$this->_wsdl->CommunicationTest($std); 

。私は__doRequestメソッドを書き直さなければならなかった。それは次のようになりますと:だから

public function __doRequest($request, $location, $action, $version, $one_way = null) { 
    $request = str_ireplace("<{$this->_method}Request>", "<{$this->_method}Request xmlns='urn:safetypay:mws:api:messages'>", $request); 
    return parent::__doRequest ($request, $location, $action, $version, $one_way); 
} 

、私がやっていることは要求に応じて名前空間を追加している、そしてそれはこのXMLを生成すると:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <CommunicationTestRequest xmlns='urn:safetypay:mws:api:messages'> 
      <ApiKey>XXXX</ApiKey> 
      <RequestDateTime>2012-04-18T20:22:51</RequestDateTime> 
      <Signature>XXXXX</Signature> 
     </CommunicationTestRequest> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

答えて

0

URN:実際にありますXML名前空間。 SoapClientのドキュメントを見ると、コンフィギュレーション配列内の 'uri'エントリとしてターゲット名前空間を通過するように見えます。以下のことを試し、それが違いを生むかどうかを調べる価値があるかもしれません。

$config = array(); 
$config['uri'] = "urn:safetypay:mws:api:messages"; 
// your other configurations 
parent::SoapClient('https://mws2.safetypay.com/sandbox/express/ws/v.2.4/MerchantWS.asmx?wsdl', $config); 
+0

実際に私はそれを実証しましたが、それは変わりません。 – Cito

関連する問題