furkankadioglu/efatura

EFatura


Keywords
efatura, fatura, e-fatura, earsiv, edevlet, laravel, php
License
MIT

Documentation

­čžż eFatura

Bu k├╝t├╝phane, PHP arac─▒l─▒─č─▒yla eAr┼čiv ├╝zerinden fatura olu┼čturma, d├╝zenleme, imzalama gibi i┼člemleri yapabilmenize olanak sa─člar. Tamamen ├╝cretsizdir ve aktif olarak geli┼čtirilmektedir.

Latest Version on Packagist Total Downloads License Open issues Open PR GitHub stars GitHub forks

­čÜęKurulum

Kendi verileriniz ile test etmek i├žin:

https://earsivportal.efatura.gov.tr/intragiris.html

Test hesaplar─▒yla test etmek i├žin:

https://earsivportaltest.efatura.gov.tr/login.jsp

Paket Kurulumu:

composer require furkankadioglu/efatura

­čÜę├ľzellikler

  • Fatura olu┼čturma.
  • ─░ki tarih aras─▒ fatura sorgulama.
  • Men├╝ listesini g├Âr├╝nt├╝leme.
  • Fatura detaylar─▒n─▒ g├Âr├╝nt├╝leme.
  • T├╝rk├že veya ─░ngilizce se├ženekleriyle fatura modeli olu┼čturma.
  • Cihaz arac─▒l─▒─č─▒yla fatura imzalama/onaylama.
  • Faturay─▒ HTML olarak ├ž─▒kt─▒ alma.
  • Faturan─▒n indirme adresini alma.
  • Faturay─▒ iptal etme.
  • Varolan bir faturay─▒ sorgulama.
  • Kullan─▒c─▒ bilgilerini ├žekme (┼×irketinizin temel bilgileri)
  • Kullan─▒c─▒ bilgilerini g├╝ncelleme

­čÜę├ľrnekler

Giri┼č

Bir client olu┼čturarak genel yap─▒y─▒ projemize dahil ediyoruz.

use furkankadioglu\eFatura\InvoiceManager;
$client = new InvoiceManager();

Giri┼č bilgilerinizi chain fonksiyonlarla tan─▒mlayabiliyorsunuz, bu production i├žin ge├žerlidir.

// Production environment
$client->setUsername("XXX")->setPassword("YYY");
// VEYA
$client->setCredentials("XXX", "YYY");

Alttaki kullan─▒m ile test modunda ├žal─▒┼čt─▒rabilir, firman─▒z─▒n bilgileri olmadan otomatik test giri┼či yapabilirsiniz. Bu a┼čamadan sonraki t├╝m i┼člemleriniz test hesab─▒yla ger├žekle┼čir.

// Test Environment
$client->setDebugMode(true)->setTestCredentials();

Ayr─▒ca bilgilerinizi g├Âr├╝nt├╝lemek isterseniz:

$client->getCredentials();

Fatura Olu┼čturma

Faturalar─▒n listelenmesi a┼ča─č─▒daki ┼čekilde yap─▒l─▒yor:

// T├╝m faturalar─▒ listele
$client->getInvoicesFromAPI("01/01/2020", "08/02/2020")

Yeni bir fatura olu┼čturmak isterseniz, bir ka├ž se├žene─činiz mevcut, kullan─▒m al─▒┼čkanl─▒─č─▒ olarak ingilizceye al─▒┼čm─▒┼člar i├žin iki farkl─▒ y├Ântem var, ilk a┼čamada T├╝rk├že'den gidelim.

├ľrnek olarak ┼ču ┼čekilde bir fatura olu┼čturabiliriz:

$fatura_detaylari  = [
"belgeNumarasi"  =>  "",
"faturaTarihi"  =>  "08/02/2020",
"saat"  =>  "09:07:48",
"paraBirimi"  =>  "TRY",
"dovzTLkur"  =>  "0",
"faturaTipi"  =>  "SATIS",
"vknTckn"  =>  "11111111111",
"aliciUnvan"  =>  "FURKAN KADIOGLU",
"aliciAdi"  =>  "FURKAN",
"aliciSoyadi"  =>  "KADIOGLU",
"binaAdi"  =>  "",
"binaNo"  =>  "",
"kapiNo"  =>  "",
"kasabaKoy"  =>  "",
"vergiDairesi"  =>  "MALTEPE",
"ulke"  =>  "T├╝rkiye",
"bulvarcaddesokak"  =>  "DENEME SK. DENEME MAH.",
"mahalleSemtIlce"  =>  "",
"sehir"  =>  " ",
"postaKodu"  =>  "",
"tel"  =>  "",
"fax"  =>  "",
"eposta"  =>  "",
"websitesi"  =>  "",
"iadeTable"  => [],
"ozelMatrahTutari"  =>  "0",
"ozelMatrahOrani"  =>  0,
"ozelMatrahVergiTutari"  =>  "0",
"vergiCesidi"  =>  " ",
"malHizmetTable"  => [],
"tip"  =>  "─░skonto",
"matrah"  =>  100,
"malhizmetToplamTutari"  =>  100,
"toplamIskonto"  =>  "0",
"hesaplanankdv"  =>  18,
"vergilerToplami"  =>  18,
"vergilerDahilToplamTutar"  =>  118,
"odenecekTutar"  =>  118,
"not"  =>  "xxx",
"siparisNumarasi"  =>  "",
"siparisTarihi"  =>  "",
"irsaliyeNumarasi"  =>  "",
"irsaliyeTarihi"  =>  "",
"fisNo"  =>  "",
"fisTarihi"  =>  "",
"fisSaati"  =>  " ",
"fisTipi"  =>  " ",
"zRaporNo"  =>  "",
"okcSeriNo"  =>  ""
];

Faturay─▒ olu┼čturmak yetmez tabi, ├╝r├╝n veya hizmet de girmek laz─▒m, oda ┼ču ┼čekilde oluyor.

$fatura_detaylari["malHizmetTable"][] = [
"malHizmet"  =>  "Yaz─▒l─▒m Geli┼čtirme",
"miktar"  =>  28,
"birim"  =>  "DAY",
"birimFiyat"  =>  "3",
"fiyat"  =>  "84",
"iskontoArttm"  =>  "─░skonto",
"iskontoOrani"  =>  0,
"iskontoTutari"  =>  "0",
"iskontoNedeni"  =>  "",
"malHizmetTutari"  =>  "99",
"kdvOrani"  =>  18,
"kdvTutari"  =>  "15.12",
"vergininKdvTutari"  =>  "0"
];

De─či┼čkenler T├╝rk├že oldu─čundan dolay─▒ mapWithTurkishKeys fonksiyonunu kullan─▒yoruz.

use furkankadioglu\eFatura\Invoice;
$inv  =  new Invoice();
$inv->mapWithTurkishKeys($fatura_detaylari); // Key yap─▒s─▒ t├╝rk├že ­čç╣­čçĚ
// VEYA
$inv->mapWithEnglishKeys($invoice_details); // Key yap─▒s─▒ ingilizce ­čç║­čçŞ

Sonras─▒nda bunu InvoiceManager'a kay─▒t etmemiz gerekiyor. Oda bu ┼čekilde:

$client->setInvoice($inv);

Sonras─▒nda da taslak olu┼čturuyoruz:

$client->createDraftBasicInvoice();

Kullan─▒c─▒ Bilgileri

Bu k─▒s─▒m firman─▒z─▒n eAr┼čiv'de kay─▒tl─▒ olan bilgileridir. Bu bilgileri alabilir ve g├╝ncelleyebilirsiniz.

­čĹëAyn─▒ zamanda bu bilgileri almak, fatura olu┼čtururken ihtiya├ž duyaca─č─▒n─▒z bir ├žok veri ihtiyac─▒n─▒z─▒ da kar┼č─▒lar.

$userInformations = $client->getUserInformationsData();

Bu i┼člem size bir adet UserInformations s─▒n─▒f─▒ d├Ând├╝r├╝r. Bu s─▒n─▒ftaki verilerinizin tamam─▒n─▒ set ve get metodlar─▒yla de─či┼čtirebilirsiniz:

// Sadece vknTckn de─či┼čtirilemez.
$userInformations = $userInformations->setUnvan("FRKN Yaz─▒l─▒m")->setApartmanNo("4");
$apartmanNo = $userInformations->getApartmanNo(); // 4

Ayr─▒ca bu s─▒n─▒f─▒n verilerini toplu olarak almak isterseniz a┼ča─č─▒daki kullan─▒m─▒ uygulayabilirsiniz, ayn─▒ fonksiyon Invoice s─▒n─▒f─▒ i├žinde ge├žerli:

$userInformations->export(); // Array olarak t├╝m de─či┼čkenleri d├Ând├╝r├╝r.

Ayn─▒ zamanda bu s─▒n─▒f─▒ kendiniz olu┼čturabilir ve array olarak veriyi sa─člayabilirsiniz. Sonras─▒nda da ┼ču ┼čekilde sunucuya g├Ândeririz:

$client->setUserInformations($userInformations); // Manager'a tan─▒mla.
$client->sendUserInformationsData(); // Sunucuya g├Ânder.

­čÜęFonksiyonel ├ľzellikler

(İndirme/Onaylama/HTML Çıktısını Alma/İptal vb.)

Onaylamak i├žin:

$client->signDraftInvoiceWithDevice();

HTML ├ž─▒kt─▒s─▒n─▒ almak i├žin:

$client->getInvoiceHTML();

─░ndirme linkini almak i├žin:

$client->getDownloadURL();

Faturay─▒ iptal etmek i├žin:

$client->cancelInvoice();

Varolan bir faturay─▒ sorgulamak i├žin:

$oldInvoice = new Invoice();
$oldInvoice->setUuid("e8277cfa-4ac9-11ea-a5b5-acde48001122");
$client->setInvoice($oldInvoice)->getInvoiceFromAPI();
// {"faturaUuid":"8a4423bc-4aca-11ea-8c30-acde48001122","faturaTarihi":"09\/02\/2020"...

­čÜęAlternatif Kullan─▒mlar

K─▒salt─▒lm─▒┼č Kullan─▒mlar:

Uzun gelmi┼č olabilir. ­čśé Gayet do─čal, chain methodlar ile hayat─▒m─▒z─▒ kolayla┼čt─▒r─▒yoruz. Tek sat─▒rda i┼čimizi halledelim:

$client->setDebugMode(true)
->setTestCredentials()
->setInvoice($inv)
->createDraftBasicInvoice()
->getDownloadURL();

// https://earsivportaltest.efatura.gov.tr/earsiv-services/download?token=b8b6c261c511a9b2757279c0111b538a2f02d98ae2df6205448d002687cab8cf74ce04d187bf0c6ce839dee40a6a8aad003aa6d5946ba02a0942ceb10bde327f&ettn=85933f42-4ab1-11ea-922e-acde48001122&belgeTip=FATURA&onayDurumu=Onayland─▒&cmd=downloadResource

Sabit De─či┼čkenler:

Bir ├žok farkl─▒ veri tipi oldu─čundan ve ├Ânceden bilinmedi─činde sorunlar ├ž─▒kabilece─čini d├╝┼č├╝nerek, baz─▒ ihtiya├ž duyulan sabit se├ženekler de mevcut. T├╝m de─či┼čken isimleri eAr┼čiv de g├Âr├╝nenlerle birebir yap─▒ld─▒. ├ľrnekten baz─▒lar─▒n─▒ g├Ârebilirsiniz:

use furkankadioglu\eFatura\Models\Country;
use furkankadioglu\eFatura\Models\CurrencyType;
use furkankadioglu\eFatura\Models\InvoiceType;
use furkankadioglu\eFatura\Models\UnitType;

$gunBirim = UnitType::GUN; // DAY
$turkLirasi = CurrencyType::TURK_LIRASI; // TRY
$satisFaturasi = InvoiceType::SATIS; // SATI┼×
$gurcistanUlkesi = Country::GURCISTAN; // G├╝rcistan

Anahtar Yap─▒s─▒n─▒ De─či┼čtirme:

use furkankadioglu\eFatura\Invoice;
$inv  =  new Invoice();

$invoice_details = [
    "uuid" => $uuid,
    "documentNumber" => $documentNumber,
    "date" => $date,
    "time" => $time,
    "currency" => $currency,
    "currencyRate" => $currencyRate,
    "invoiceType" => $invoiceType,
    "taxOrIdentityNumber" => $taxOrIdentityNumber,
    "invoiceAcceptorTitle" => $invoiceAcceptorTitle,
    "invoiceAcceptorName" => $invoiceAcceptorName,
    "invoiceAcceptorLastName" => $invoiceAcceptorLastName,
    "buildingName" => $buildingName,
    "buildingNumber" => $buildingNumber,
    "doorNumber" => $doorNumber,
    "town" => $town,
    "taxAdministration" => $taxAdministration,
    "country" => $country,
    "avenueStreet" => $avenueStreet,
    "district" => $district,
    "city" => $city,
    "postNumber" => $postNumber,
    "telephoneNumber" => $telephoneNumber,
    "faxNumber" => $faxNumber,
    "email" => $email,
    "website" => $website,
    "refundTable" => $refundTable,
    "specialBaseAmount" => $specialBaseAmount,
    "specialBasePercent" => $specialBasePercent,
    "specialBaseTaxAmount" => $specialBaseTaxAmount,
    "taxType" => $taxType,
    "itemOrServiceList" => $itemOrServiceList,
    "type" => $type,
    "base" => $base,
    "itemOrServiceTotalPrice" => $itemOrServiceTotalPrice,
    "totalDiscount" => $totalDiscount,
    "calculatedVAT" => $calculatedVAT,
    "taxTotalPrice" => $taxTotalPrice,
    "includedTaxesTotalPrice" => $includedTaxesTotalPrice,
    "paymentPrice" => $paymentPrice,
    "note" => $note,
    "orderNumber" => $orderNumber,
    "orderData" => $orderData,
    "waybillNumber" => $waybillNumber,
    "waybillDate" => $waybillDate,
    "receiptNumber" => $receiptNumber,
    "voucherDate" => $voucherDate,
    "voucherTime" => $voucherTime,
    "voucherType" => $voucherType,
    "zReportNumber" => $zReportNumber,
    "okcSerialNumber" => $okcSerialNumber
];

$inv->mapWithEnglishKeys($invoice_details); // Key yap─▒s─▒ ingilizce

Bu ┼čekilde de map edebilece─činiz gibi ayr─▒yetten getter/setter methodlar─▒ da mevcut, istedi─činiz her veriyi d├╝zenleyebilirsiniz:

$inv->setUuid("Buraya kendi fatura idniz") 
->setCountry("T├╝rkiye")
->getCurrencyRate(); // TRY

Toplu veri al─▒m─▒ ve ├ž─▒kart─▒m─▒:

Fatura verisinin de─či┼čken de─čerlerini toplu olarak ekleyebilir veya ├ž─▒kartabiliriz, ┼č├Âyle:

    $inv = new Invoice($data); // data arrayinden keylere g├Âre t├╝m verileri al─▒r.
    $inv->export(); // t├╝m verileri ├ž─▒kart─▒r.

­čÜęDi─čer Konular

Testleri ├çal─▒┼čt─▒rma:

composer test

Daha Fazla ├ľrnek:

Daha fazla ├Ârne─či buradan` bulabilirsiniz.

Uyar─▒

­čÜĘ Bu paket vergiye tabi olan belge olu┼čturur, hi├ž bir sorumluluk kabul edilmez ve ne yapt─▒─č─▒n─▒zdan emin olana kadar debugMode a├ž─▒k ┼čekilde test verileriyle i┼člem yapman─▒z ├Ânerilir.

Ayr─▒ca

Bu proje Fatih Kadir Ak─▒n'─▒n fatura.js` projesinden yola ├ž─▒k─▒larak PHP diline uyarlanarak yap─▒lm─▒┼čt─▒r. Arda K─▒l─▒├žda─č─▒'na da ayr─▒ca te┼čekk├╝rler.