毎月の請求書を 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 をファイルからロードしないことだけです。