0

私はサービスの初心者です。現在、SoapClient オブジェクトを使用して PHP で .net WCF サービスを呼び出しています。コードは次のとおりです。

    $arr2=array('paymentVendorCode'=>"test1",'transactionNumber'=>123456789,'dataSource'=>'Ghana_QA','customerNumber'=>45678912,'amount'=>10,'invoicePeriod'=>1,'currency'=>'GHC','paymentDescription'=>'CashPayment','methodofPayment'=>'CASH','productCollection'=>'PRCC4');

    $certFile = "certs/Entrust.pem";
    $options = array('soap_version' => SOAP_1_1 , 'local_cert' => $certFile , 'exceptions' => true ,'trace' => true ,'wdsl_local_copy' => true ,'ssl' => array('verify_peer' => false) ,'https' => array('curl_verify_ssl_peer'  => false, 'curl_verify_ssl_host' => false)
           );

try
{
echo "SOAP Client Object Made <br />";
//To Make soap client using WSDL files offline
$client = new SoapClient("RTPP_Web_Service_WSDL_20130306/multichoice.paymentservice.wsdl",$options);    
}
catch(SoapFault $E)
{
    echo "Error:--> ".$E->faultstring;
}

print_r($client->__getFunctions());

try
{
echo $pmt_customer=$client->__call("SubmitPayment", $arr2)."<br /><br />";
}
catch(SoapFault $fault)
{
echo "came here in catch";
trigger_error("SOAP Fault:(faultcode: {$fault->faultcode}\n"."faultstring: {$fault->faultstring})", E_USER_ERROR);  
 }

使用しているすべての WSDL ファイルを確認し、すべての要素、メッセージ、操作、パラメーターなどを取得しました。WSDL ファイルの 1 つにある SOAP アドレスは次のとおりです。

<soap:address location="https://wispqa.multichoice.co.za/PaymentServicePerimeter/Intermediate.svc" />

これは、呼び出されるサービスの実際のアドレスです。通常、サービスは URL の末尾にある ?WSDL で呼び出されますが、上記の URL の末尾にこれを追加した後でも、サービス ページの外観は変わりません。

サービスのドキュメントには、「現在、サービスはメッセージ コントラクトを使用していません」と書かれています。

「$client->__getFunction()」を呼び出して取得したリストから、そのメソッドの 1 つを呼び出すサービスにリクエストを送信しています。しかし、応答の代わりに、 http://i.stack.imgur.com/GvS3d.pngのスクリーンショットから確認できる致命的なエラーが発生しています。

私はほぼ一週間それに取り組んできましたが、ここで立ち往生しています。誰か私をここから連れ出してください。前もって感謝します。

4

1 に答える 1

0

私が欠けていたのは、メソッドが呼び出されるための石鹸アクションです。WSDL ファイルを徹底的に参照して SOAP アクションを実行したところ、次のように呼び出していたメソッドの SOAP アクションが見つかりました。

  $submitpayment_action   = "http://MultiChoice.PaymentService/ServiceContracts/PaymentServiceContract/SubmitPayment";

また、抜粋が次のようなxml形式を使用してリクエストの形式を変更しました(SOAPUIツールを使用してこのxml形式を取得しました):

 $submitpay = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:mes=\"http://MultiChoice.PaymentService/MessageContracts\" 
                                        xmlns:ser=\"http://MultiChoice.PaymentService/ServiceContracts\" 
                                        xmlns:dat=\"http://MultiChoice.PaymentService/DataContracts\" 
                                        xmlns:mcom=\"http://mcomp.scontracts\" xmlns:mcom1=\"http://mcomp.dcontracts\">
                      <soapenv:Header/>
<soapenv:Body>
                        <mes:SubmitPaymentRequest>
                          <ser:PaymentRequest>
<dat:paymentVendorCode>".$vendorcode."</dat:paymentVendorCode> .......

最後に、この「__doRequest」SOAP メソッドを使用して、次のようにサービス メソッドを呼び出します。

 $response = $client->__doRequest($submitpay,$location,$submitpayment_action,SOAP_1_1,$one_way = 0);

print_r($response);

これにより、望ましい応答が表示されます。「simplexml_load_string($response);」を使用して、応答から必要な情報を抽出できるようになりました。、「registerXPathNamespace()」および「xpath('//string');」メソッド。

于 2013-05-07T10:11:35.480 に答える