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:」がいたるところにあることに気付くでしょう。これは、サーバーから適切な応答を得るために必要なものだと思います。助けてください。これは明日のテストに出るはずですが、応答が非常に一貫していないことに気付きました。
ご協力いただきありがとうございます。本当に感謝しています。