0

毎月の請求書を SOAP を使用してリモート サーバーにアップロードしたいのですが、エラー メッセージが表示されずにアップロードが失敗します。

データベースから DomDocument を使用して XML ファイル(請求書)を生成します。次に、XSD に対して検証し、OK が返された場合は SOAP リクエストを開始します。

リモート SOAP サーバーのドキュメントには、まず認証サービスを呼び出して自分自身を識別し、セッション ID を取得する必要があり、それからアップロードを開始できると書かれています。しかし、アップロードは機能せず、エラー メッセージも表示されません。石鹸に詳しくないので、これからどうすればいいのかわかりません。

これは私がそれを行う方法です:

$xml = $doc->saveXML(); /*before this is a very long code which creates the XML*/
$xmlauth = new DomDocument();
$xmlauth = loadXML($xml);
if(!$xmlauth->schemaValidate('https://test.e-szamla.hu/apeh_xml.xsd')){
echo 'Error: <br />';
libxml_display_errors(); /*this is a function that formats the error code and saves it to a log file*/
}
else {
    try {
      $trace = '1';
      $url = 'https://test.e-szamla.hu/soap/AuthenticationService.wsdl';
      $client = new SoapClient($url, array('trace' => $trace));
      $params = array(
        'username' => 'hu-0000000x-x-xx',
        'password' => 'XXXXXXX'
      );
    }
    catch(exception $e){
      echo '<h2>Error in connection: </h2>';
      echo $e->getMessage();
    }
    try {
      $result = $client->startSession($params);
      $_SESSION['sessid'] = $result->sessionid;
      //echo $_SESSION['sessid'];
    }
    catch(exception $e) {
      echo '<h2>Something went wrong:</h2>';
      echo $e->getMessage();
    }
    try {
    $urlinv = 'https://test.e-szamla.hu/soap/InvoiceService.wsdl';
    $clientinv = new SoapClient($urlinv, array('trace' => $trace));
    $paramsinv = array('sessionid' => $_SESSION['sessid'], 'partner' => 'hu-xxxxxxxx-x-xx', 'xml' => $xmlauth);
    }
    catch(exception $err) {
      echo '<h2>ERROR:</h2>';
      echo $err->getMessage();
    }
    try {
      $resultinv = $clientinv->uploadInvoice($paramsinv);
      echo 'Uploaded with this session id: '. $_SESSION['sessid'];
    }
    catch(exception $err){
      echo '<h2>Something went wrong: </h2>';
      echo $err->getMessage();
    }
}

XSD URL と WSDL URL の両方がテスト サービスの実際の URL であり、テスト XML は次のとおりです: https://test.e-szamla.hu/samples/dijbekero.xml

そして、これはドキュメントの例です:

認証 サービス

$client = new SoapClient($url."AuthenticationService.wsdl", array('trace' => $trace));
$params = array(
"username" => "hu-12345678-1-90",
"password" => "12345678"
);
$result = $client->startSession($params);
$_SESSION["sessid"] = $result->sessionid;

請求書サービス

$client = new SoapClient($url."InvoiceService.wsdl", array('trace' => $trace));
$xml = file_get_contents("samples/invoice.xml");
$params = array(
"sessionid" => $_SESSION["sessid"],
"partner" => "hu-00000000-2-00",
"xml" => $xml
);
$result = $client->uploadInvoice($params);

どうすればこれを機能させることができますか、少なくともエラーメッセージを取得できますか? ご覧のとおり、ユーザー名、パスワード、パートナー ID などの必要なすべての変数を渡しています。変更したのは、XML をファイルからロードしないことだけです。

4

0 に答える 0