1

SOAP 呼び出しに問題があり、名前空間に関連していると思われます。送信先のサーバーから間違った応答が返ってきました。これは、SOAP エンベロープと名前空間が正しくないことが原因のようです。

152     protected function callWithSOAP($xml) {
153         
154         try {
155             $soapClient = new SoapClient($this->mercuryWSDL, array('trace'=>1));
156         } catch (Exception $e) {
157             throw new Exception($e->getMessage());
158         }
159         
160         $message = array(
161             'tran'=> $xml,
162             'pw'=> $this->mercuryPassword
163         );      
164         
165         // Make SOAP Call
166         try {
167             $request = $soapClient->CreditTransaction($message);
168         } catch (Exception $e) { 
169             throw new Exception($e->getMessage());
170         }
171 
172         $res = $soapClient->__getLastRequest();
173         return $res;
174 
175         return $request;
176     }

メソッド署名でフィードしている XML は問題ありません。サーバーが期待しているものと同じであることを確認しました。具体的には、問題が発生している SOAP 要求です。

SoapClient で送信する SOAP リクエストは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mercurypay.com">
    <SOAP-ENV:Body>
        <ns1:CreditTransaction>
            <ns1:tran>
            <?xml version="1.0"?>
            <TStream>
                <Transaction>
                    <MerchantID>******</MerchantID>
                    <TranType>Credit</TranType>
                    <TranCode>FSASale</TranCode>
                    <InvoiceNo>12</InvoiceNo>
                    <RefNo>12</RefNo>
                    <Account>
                        <AcctNo>*******</AcctNo>
                        <ExpDate>****</ExpDate>
                    </Account>
                    <Amount>
                        <Purchase>25</Purchase>
                        <FSAPrescription>25</FSAPrescription>
                    </Amount>
                </Transaction>
            </TStream>
        </ns1:tran>
        <ns1:pw>xyz</ns1:pw>
    </ns1:CreditTransaction>
</SOAP-ENV:Body>

しかし、これが実際に期待しているものです...どうすればこれを一致させることができますか:

<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mer="http://www.mercurypay.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<mer:CreditTransaction>
<mer:tran>
<?xml version="1.0"?>
<TStream>
  <Transaction>
<MerchantID>******</MerchantID>
<TranType>Credit</TranType>
<TranCode>FSASale</TranCode>
<InvoiceNo>1</InvoiceNo>
<RefNo>1</RefNo>
<Account>
  <AcctNo>************</AcctNo>
  <ExpDate>****</ExpDate>
</Account>
<Amount>
  <Purchase>63.54</Purchase>
  <FSAPrescription>63.54</FSAPrescription>
</Amount>
</Transaction>
</TStream>
</mer:tran>
<mer:pw>xyz</mer:pw>
</mer:CreditTransaction>
</soapenv:Body>
</soapenv:Envelope>

「mer:」がいたるところにあることに気付くでしょう。これは、サーバーから適切な応答を得るために必要なものだと思います。助けてください。これは明日のテストに出るはずですが、応答が非常に一貫していないことに気付きました。

ご協力いただきありがとうございます。本当に感謝しています。

4

1 に答える 1

0

名前<mer:空間プレフィックスはドキュメント ( ) で定義されていますが、ドキュメントの先頭以外の場所でXML 宣言<soapenv:Envelope ... xmlns:mer="http://www.mercurypay.com" ... >を使用することは許可されていません。<?xml version="1.0"?>

これは違反している XML の具体的な規則であり、SOAP は XML に基づいているため、これが機能することは期待できません。

ここでは、設定方法'tran'=> $xml、特に現在のコンテキストにあるものが$xml間違っているようです。データを正しく渡すことができるように、データを正しい形式にします (アプリケーションのその部分は、WSDL のソースが隠されているように隠されているため、それ以上の情報やヒントを提供することはできません)。$messageCreditTransaction($message)$xml

于 2013-04-25T09:12:57.910 に答える