https://efatura.innova.com.tr/ClientInterfaceService
adresinden, WSDL şeması kullanılarak, otomatik olarak oluşturulan sınıflar kullanarak gerçekleştirilmiştir .php wsdl2php.php https://efatura.innova.com.tr/ClientInterfaceService
Services
isimli bir klasör oluşturmaktadır. Bu oluşturulan klasör örnek projedeki Services
klasörü ile değiştirilebilir.autoloader.php
dosyası oluşturulmuş ve Services
klasörüne eklenmiştir.
https://efatura.innova.com.tr/EArsivClientInterfaceService
adresinden sınıflar olşturulmuş ve Services4EArchive
klasörüne kaydedilmiştir. Bu sınıflar için de autoloader.php
eklenmiş ve ilgili bölümlerde çağırılmıştır.Apache 2.4.46
web server üzerinde, PHP 7.4.12
sürümünde geliştirimiştir.SOAP
aktif olmalıdır.constant.php
dosyasında tanımlanmıştır, kendi bilgileriniz ile değiştiriniz.require_once "./Services/autoloader.php"; require_once "./constants.php";
try { $ws = new \ClientInterfaceService(WS_URL); $connected = true; } catch (Exception $exception) { echo "<p class='sRed'>Bağlantı hatası!<br/>Lütfen bağlantı tanımları ve internet bağlantınızı kontrol ediniz.<br/>"; echo "( ".$exception->getMessage()." ) </p>"; $connected = false; }
if ($connected) { )
:
$reqHeader = new \ClientInterfaceService_RequestHeader(); $reqHeader->InstitutionId = WS_INSTITUTION_ID; $reqHeader->Username = WS_USERNAME; $reqHeader->Password = WS_PASSWORD;
Request
sınıfından nesne oluşturulur Örnek kodda CustomerInquiryRequest yani e-fatura mükellefi olup olmadığını sorgulama:
$wsRequest = new \ClientInterfaceService_CustomerInquiryRequest();
(Not: Header otomatik oluşturulan request class'ta tanımlı değil ama olması gerekiyor)
:
$wsRequest->Header = $reqHeader;
$wsRequest->IdentityNumbers = array($vergino1, $vergino2);
request
özelliğine 2. adımda oluşturulan request nesnesi atanır:
$request = new \ClientInterfaceService_CustomerInquiry(); $request->request = $wsRequest;
try { $response = $ws->CustomerInquiry($request); } catch (Exception $exception) { echo "<p class='sRed'>Hata oluştu: <br/>"; echo $exception->getMessage() ."</p>"; $response = false; }
response
nesnesinin ilgili servis yanıtı (örnekte CustomerInquiryResult
) alınıp, anahtarlı diziye çevrilebilir veya istenilirse direkt nesne olarak kullanılabilir.
Header
özelliği bulunmaktadır. Burada hata kodları ve mesajlarından faydalanılabilir. ResponseCode='0000'
olması işlemin başarılı olduğunu gösterir.
Response
nesnesi her serviste farklı içeriğe sahiptir, bunun için servis dökümanı, WSDL şeması veya sınıf hiyerarşisinden faydalanılabilir.
if ($response) { //yanıt alındıysa... $result = json_decode(json_encode($response->CustomerInquiryResult), true); echo "<h3>Servis Yanıtı</h3>"; if ($result['Header']) { echo "<p>Message: " . $result['Header']['Message']; echo "<br>Response Code: " . $result['Header']['ResponseCode']; echo "<br>Status: " . $result['Header']['Status']; echo "</p>"; } else { //yanıt alınamadıysa... }