Giter Club home page Giter Club logo

efatura's Introduction

🧾 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

📲 Destek ve Sorular

Eğer bir sorun yaşıyorsanız veya proje hakkında bir sorunuz varsa lütfen buradan bir kayıt oluşturun, yaşadığınız sorunu hep birlikte çözelim.

Proje tamamen açık kaynak olduğundan dolayı, projeninin devamlılığı/düzenlemeleri ve hata çözümleri de yine topluluk tarafından yapılmaktadır. Projeyi başlatan kişinin ücretli veya ücretsiz bir destek çözümü bulunmamaktadır, bu sebeple lütfen sosyal medyadan temasa geçmeyin. Anlayışınız ve saygınız için teşekkür ederiz.

🚩Özellikler

  • eArşiv oturumunu açma ve sonlandırma.
  • 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.
  • 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.
  • SMS ile Fatura doğrulama ve onaylama.
  • Faturayı PDF olarak çıktı alma.

🚩Ö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();

Bilgilerimizi tanımladıktan sonra giriş yapıp token almak içinse: (Bu işlem olmadan diğer adımlara geçilemez)

$client->connect();

Faturalandırma

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"  =>  "", // Zorunlu değil
"faturaTarihi"  =>  "08/02/2020",
"saat"  =>  "09:07:48",
"paraBirimi"  =>  "TRY",
"dovzTLkur"  =>  "0",
"faturaTipi"  =>  "SATIS",
"hangiTip"  =>  "5000/30000",
"vknTckn"  =>  "11111111111",
"aliciUnvan"  =>  "FURKAN KADIOGLU",
"aliciAdi"  =>  "FURKAN",
"aliciSoyadi"  =>  "KADIOGLU",
"binaAdi"  =>  "", // Zorunlu değil
"binaNo"  =>  "", // Zorunlu değil
"kapiNo"  =>  "", // Zorunlu değil
"kasabaKoy"  =>  "", // Zorunlu değil
"vergiDairesi"  =>  "MALTEPE",
"ulke"  =>  "Türkiye",
"bulvarcaddesokak"  =>  "DENEME SK. DENEME MAH.",
"mahalleSemtIlce"  =>  "", // Zorunlu değil
"sehir"  =>  " ",
"postaKodu"  =>  "", // Zorunlu değil
"tel"  =>  "", // Zorunlu değil
"fax"  =>  "", // Zorunlu değil
"eposta"  =>  "", // Zorunlu değil
"websitesi"  =>  "", // Zorunlu değil
"iadeTable"  => [], // Zorunlu değil
"ozelMatrahTutari"  =>  "0", // Zorunlu değil
"ozelMatrahOrani"  =>  0, // Zorunlu değil
"ozelMatrahVergiTutari"  =>  "0", // Zorunlu değil
"vergiCesidi"  =>  " ", // Zorunlu değil
"malHizmetTable"  => [],
"tip"  =>  "İskonto",
"matrah"  =>  100,
"malhizmetToplamTutari"  =>  100,
"toplamIskonto"  =>  "0",
"hesaplanankdv"  =>  18,
"vergilerToplami"  =>  18,
"vergilerDahilToplamTutar"  =>  118,
"odenecekTutar"  =>  118,
"not"  =>  "xxx", // Zorunlu değil
"siparisNumarasi"  =>  "", // Zorunlu değil
"siparisTarihi"  =>  "", // Zorunlu değil
"irsaliyeNumarasi"  =>  "", // Zorunlu değil
"irsaliyeTarihi"  =>  "", // Zorunlu değil
"fisNo"  =>  "", // Zorunlu değil
"fisTarihi"  =>  "", // Zorunlu değil
"fisSaati"  =>  " ", // Zorunlu değil
"fisTipi"  =>  " ", // Zorunlu değil
"zRaporNo"  =>  "", // Zorunlu değil
"okcSeriNo"  =>  "" // Zorunlu değil
];

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",
"iskontoOrani"  =>  0,
"iskontoTutari"  =>  "0",
"iskontoNedeni"  =>  "",
"malHizmetTutari"  =>  "99",
"kdvOrani"  =>  18,
"vergiOrani" => 0,
"kdvTutari"  =>  "15.12",
"vergininKdvTutari"  =>  "0",
"ozelMatrahTutari" => "0", //zorunlu
];

Değişkenler Türkçe olduğundan dolayı mapWithTurkishKeys fonksiyonunu kullanıyoruz.

use furkankadioglu\eFatura\Models\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();

Adımıza Düzenlenen Faturaları Sorgulamak için

$client->getInvoicesMeFromAPI("01/01/2021", "31/12/2022");

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.)

HTML çıktısını almak için:

$client->getInvoiceHTML();

PDF çıktısını almak için:

$client->getInvoicePDF();

İndirme linkini almak için:

$client->getDownloadURL();

Faturayı iptal etmek için:

$client->cancelInvoice();

SMS doğrulaması yapmak için:

$client->sendSMSVerification($telefon); // Operasyon id döndürür.

SMS doğrulamasını onaylamak ve onaylanacak faturaları göndermek için:

$client->verifySMSCode($kod, $operasyonId);

Kişi veya kurumun bilgilerini çekmek için:

$client->getCompanyInfo($TCKimlikNoVeyaVergiNo);

Çıkış yapıp, oturumu kapatmak için:

$client->logOutFromAPI();

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) // Test urlsine geçtik 
->setTestCredentials() // Test bilgilerini aldık
->connect() // Bilgilerle birlikte sunucuya bağlanıp token aldık.
->setInvoice($inv) // Faturamızı sınıfa tanımladık (Invoice sınıfı kullanılmalı)
->createDraftBasicInvoice() // Taslak faturamızı oluşturduk
->getDownloadURL(); // İndirme adresini aldık

// 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\Models\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.

efatura's People

Contributors

ahmeti avatar bilaleren avatar dependabot[bot] avatar furkankadioglu avatar gduymaz avatar ibrcan avatar muratcesmecioglu avatar phpdev avatar timemrah avatar truncgil avatar ugurisik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

efatura's Issues

SMS Onayına Gönderilen Silinmiş Faturalar

Faturaları onay için topladığımız getInvoicesFromAPI fonksiyonu maalesef silinmiş faturaları da getirdiği için onaya giden faturalar arasında silinmiş faturalar da gönderilip onaylanıyor. Burada tabii ki silinmiş faturayı onaylayan GİB'i sorgulamak lazım ancak ben çözümü aşağıdaki gibi bir fonksiyon daha ekleyerek, dönen faturalardan sadece "Onaylanmadı" olanları geri gönderiyorum. API erişimim olmadığı için daha nitelikli bir çözüm bulamadım. Belki daha istek aşamasında sadece onaylanmayanları da getirebiliriz.

Önerilen taslak

public function getNotDeletedInvoicesFromAPI($startDate, $endDate)
{
$parameters = [
"cmd" => "EARSIV_PORTAL_TASLAKLARI_GETIR",
"callid" => Uuid::uuid1()->toString(),
"pageName" => "RG_BASITTASLAKLAR",
"token" => $this->token,
"jp" => '{"baslangic":"' . $startDate . '","bitis":"' . $endDate . '","hangiTip":"5000/30000", "table":[]}'
];

    $body = $this->sendRequestAndGetBody(self::DISPATCH_PATH, $parameters);
    $this->checkError($body);

    // Array tipinden verilen tarih aralığında yer alan faturalar dönüyor
	$data = $body['data'];
	$dataFiltered = array();
	foreach($data as $item){
		if($item["onayDurumu"] == "Onaylanmadı"){
			array_push($dataFiltered, $item);
		}
	}
    $this->invoices = $dataFiltered;

    return $dataFiltered;
	//return $this->invoices;
}

update problemi

Nedendir bilmiyorum ama sadece bu bağılılıkta bir sorun var, composer update ile güncelleme yapmıyor ve hep eski kodlar kalıyor. Sizce sorun nedir? Başka yol ile update var mıdır?

SMS gönderim sorunu hala herkeste var mı?

Merhaba,
Sms gönderiminde "sunucu kaynaklı bir hata oluştu" hata mesajını alıyorum. sanırım daha önce de vardı fakat düzeltilmişti. Yine aynı problem mi var acaba?

Düzeltme Hakkında

Merhaba,
Fatura kestik ve taslaklarda duruyor , kestiğimiz faturayı düzenleme yapabiliyormuyuz ?

serbest meslek makbuzu

Merhaba, serbest meslek makbuzu göndermek için bir yol varmıdır bu yapıda. teşekkürler

ApiException print_r response hatası

Merhaba Furkan,

Öncelikle bu paketi bizimle paylaştığın için teşekkür ederim.

Aşağıdaki ApiException metodunda print_r fonksiyonuna true parametresi gönderilmediği için exceptionlar yakalansa bile print_r datayı response ediyor. Dolayısıyla exceptionun yakalanmasının bir anlamı kalmıyor.

throw new ApiException("Bir hata oluştu! \t \n".print_r($jsonData));

Teşekkür ederim, iyi çalışmalar.

SMS Doğrulayabilen Var mı?

Merhaba,
Bu sorunun çözümünü bulan var mı arkadaşlar? verifySMSCode fonksiyonu 1 sonucu veriyor ama faturayı yine de onaylamıyor.
1.9.4 e güncelledim yine aynı...

Özel Matrah Nedeni Seçilmiyor

Merhabalar satış yaptığımız sektör'de özel matrah olarak fatura kesmemiz gerekiyor. Bu alt yapıyı kullanmak istiyoruz fakat " Özel Matrah Nedeni " seçimi gerçekleştiremiyoruz. Fatura tipi = Özel Matrah.

Sunucuyu test aşamasından çıkartma ve aktifleştirme

Test sunucusundan çıkıp normal sunucuya geçmeyi yapamayanlar için $client->setDebugMode(true)->setTestCredentials(); kodu test aşamasını sağlarken bu satırı yorum satırına çevirip yeni satırda $client->setDebugMode(false); ekleyerek test sunucusundan çıkıp ana işleme geçebilirsiniz.

iptal edilmiş veya onaylanmış faturaları öğrenme

faturaları tarih aralığıyla elde edebiliyoruz veya bizde fatura kodu olan bir faturayı API'den sorgulayabiliyoruz fakat fatuanın iptal, onaylı veya taslak olduğu bilgisini nasıl öğrenebileceğimi bulamadım.

Cevabınız için şimdiden teşekkürler.

SMS onay sorunu

Merhaba,
aşağıdaki method ile sms kodunu ve operasyon numarasını gönderiyorum sonuç true dönmesine rağmen fatura onaylanmıyor. Daha önce bu sorunla karşılaşan oldu mu?

$client->verifySMSCode($request->code, $invoice->operation_id);

NOT: Kendi özel projemde kullanacağım yasal mevzuatta bir problem oluşturur mu ? Herhangi bir yerden izin almam gerekiyor mu ?

ramsey/uuid 2.9

Hocam Merhabalar,

Öncelikle paylaşımınız için çok teşekkürler. Laravel içerisine kurmaya çalıştığımda ramsey/uuid 2.9 sürümünü kuramıyor. bu nedenle projeme dahil edemiyorum. bununla alakalı bir güncelleme yapma durumunuz olur mu veya bu konuda farklı türden öneriniz varsa yardımcı olursanız çok memnun olurum. Şimdiden teşekkürler...

Mali Mühürle Çalışır mı?

Arkadaşlar daha önce de sormuştum kusura bakmayın ama paket çok güzel çalışıyor. Normal entegratörden daha iyi valla. Mali mühür var, efatura mükellefiyim bunu kullanamam değil mi?

fatura okuma

merhaba gib kullanıcı adı şifre ile bu yapı üzerinden adıma kesilen faturaların görünümlerini görmek indirmek mümkünmü?

söyle söyleyeyim interaktif vergi dairesinde adımıza kesilen 1 haftalık tarih aralığı ile faturalar görüntüleniyor ancak sadece tutar kdv vs. içerik vb kalemler görünmüyor bunu görüntüleme mümkünmü? yada seçilen faturanın içerigine nasıl erişilir. bir örnek varmıdır.? teşekkürler

E-Arşive Erişim Sağlama

Merhaba

Öncelikle kodlar için teşekkür ederim. Aşağıda birkaç sorum bulunuyor cevaplarsanız çok mutlu olurum.

  1. Kendimin şahıs firması var ve e-arşiv portalını aktif olarak kullanıyorum. Her zaman girdiğim kullanıcı ve şifre yeterlimidir.
  2. Test kullanıcısını nasıl alabilirim.
  3. Bu api unofficial bir apidir.

Teşekkür ederim.
İyi çalışmalar

sms gönderme hatası

sms göndermede deyince bu şekilde hata veriyor 3-4 gündür..
kullanılan fonksiyon bu şekilde ?

    public function sendSMSVerification($phoneNumber)
    {
        $data = [
            "CEPTEL" => $phoneNumber,
            "KTEL" => false,
            "TIP" => ""
        ];

        $parameters = [
            "cmd" => "EARSIV_PORTAL_SMSSIFRE_GONDER",
            "callid" => Uuid::uuid1()->toString(),
            "pageName" => "RG_SMSONAY",
            "token" => $this->token,
            "jp" => "" . json_encode($data) . "",
        ];

        $body = $this->sendRequestAndGetBody(self::DISPATCH_PATH, $parameters);
		print_r($body);
        $this->checkError($body);

        $this->oid = $body["data"]["oid"];

        return $this->oid;
    }

Array ( [error] => 1 [messages] => Array ( [0] => Genel Sistem Hatası:java.lang.NullPointerException ) [metadata] => Array ( [optime] => 20210528010707+0300 ) )
Fatal error: Uncaught exception 'furkankadioglu\eFatura\Exceptions\ApiException' with message 'Sunucu taraflı bir hata oluştu!' in
/domains/public_html/panelv20/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php:335 Stack trace: #0
/domains/public_html/panelv20/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php(750): furkankadioglu\eFatura\InvoiceManager->checkError(Array) #1
/domains/public_html/panelv20/faturaimzala.php(82): furkankadioglu\eFatura\InvoiceManager->sendSMSVerification('05057099335') #2 {main} thrown in
/domains/public_html/panelv20/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php on line 335

dogrulama..

öncelikle kodlamanız için tşkler.. eksiklerimi de yapabilirsem çok işime yarayacaktır..

sms dogrulama kısmını yapamadım.. telefon numarasına sms gönderimi sağlatıyorum ama verdiği kod ile gelen kodu gönderiyorum sunucu hatası diyor sürekli..

birde hangi faturayı onaylıyacağımızı nasıl ayarlıyoruz. çözemedim..

yardımcı olursanız sevinirim.. tşkler..

İndirme link

İndirme linki nasıl kullanılıyor? İşlemi yapınca link oluşuyor tıklayınca yetki hatası veriyor. Müşteriye indirme url sini mail atmak istiyorum. Nasıl yqpmalıyım

PDF formatı düzgün gözükmüyor.

html olarak görüntüleme yaptığımda gayet güzel iken pdf olarak açmak istediğimizde barkod kısmı yok ve fatura düzgün gözükmüyor. Bunun için ne yapabiliriz.

ssl hatası

( ! ) Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: self signed certificate in certificate chain (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://earsivportaltest.efatura.gov.tr/earsiv-services/esign in C:\wamp64\www\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 211

1 | 0.0012 | 408520 | {main}( ) | ...\index.php:0
2 | 0.0066 | 440760 | furkankadioglu\eFatura\InvoiceManager->setTestCredentials( ) | ...\index.php:19
3 | 0.0066 | 440856 | GuzzleHttp\Client->post( ) | ...\InvoiceManager.php:181
4 | 0.0066 | 440856 | GuzzleHttp\Client->request( ) | ...\ClientTrait.php:95
5 | 0.1025 | 629200 | GuzzleHttp\Promise\RejectedPromise->wait( ) | ...\Client.php:187

bu şekilde hata alıyorum yardımcı olurmusun

e-arşiv fatura hakkında

Merhaba hayırlı akşamlar kardeşim, https://github.com/furkankadioglu/efatura bu apin için öncelikle teşekkür ederim ellerine sağlık güzel bir çalışma olmuş.

Şuan test ve canlı mod farketmiyor aynı hatayı alıyoruz. Canlı modda aynı hatayı veriyor ama taslak olarak kayıt işlemi gerçekleşmiş oluyor.

Hata ekran görüntüsü:
image

Faturada iskonto nasıl ayarlanır?

Arkadaşlar herkese iyi çalışmalar.

Ürün bazlı değil de faturanın en altındaki

Ara Toplam
KDV
Genel Toplam 

kısmına İskonto da ekleniyor. Hangi paremetreyle yapılıyor bilgisi olan var mı acaba?

Düzenleme: Çok basit gözümden kaçmış kusura bakmayın. "toplamIskonto" => "0", tabiki :)

Merhabalar , E-arsiv portal Güncellendi ve çalışmıyor (Acil yardıma ihtiyacım var !)

Merhabalar, 2 gün önce çalışan yazılım artık çalışmıyor, earsiv portala girince değiştiğini görüyorum, değişiklik sebebiyle kodlar yerlerine oturmuyor, hatayı çözmek için çok fazla gezindim ancak bir yola varamadım, lütfen yardımcı olur musunuz çok acil ? :/

#Sorun Çözüldü - Pdf çıktısını , html olarak düzelttim anlamsızca sorunsuz çalıştı :) Sanırım mpdf te sorun oluştu.

Yeni fatura oluşturmada Teknik bir hata oluştu. uyarısı

Yeni bir fatura taslağı oluşturmaya çalıştığım zaman sunucudan teknik bir hata oluştu mesajı alıyordum.
$fatura_detaylari["malHizmetTable"] dizide bulunan iskontoArttm anahtarı olmaz ise iskontolu bir fatura oluştururken sıkıntı oluyormu bilmiyorum ancak iskontosuz fatura taslağı oluştururken bu değeri kaldırdım ve iskontoNedeni isminde başka bir boş key oluşturarak problemi çözdüm.

gerçek kullanıcı hk.

Gerçek user ile giriş yaptığımda fatura oluşturulamadı hatası alıyorum.
Fakat test kullanıcıda bu hatayı alıyorum.
Bu sorunu yaşayanlar var mı ?

Fatura Oluşturulamadı - Form parametrelerinde hata var.

  • Hiçbir parametreyi değiştirmedim fakat test kullanıcıda fatura oluştururken hata veriyor.
  • invoicemanager.php dosyasında "body" değişkenindeki "data" dizisi Form parametrelerinde hata var uyarısı
  • veriyor. .php dosyasında 451. satırda hata. 451. satıra prameters değişkenini dizi halinde ekrana yazdırıyorum görseldeki gibi fakat içerikte türkçe karkater dışında bir fark görülmüyor gibi.

Ekran görüntüsü; https://prnt.sc/skexn3

Test kullanıcı ile işlemler

Öncelik çalışmalarınızda başarı dilerim aklıma takılan bir kaç şey var
1- Uygulama fonksiyonunda bulunan getCompanyInfo() test kullanıcısı ile çalıştırdığımda
Array ( [data] => Array ( [unvan] => [adi] => [soyadi] => [vergiDairesi] => ) [metadata] => Array ( [optime] => 20210526164754+0300 ) ) dize geliyor ama bilgiler boş dönüyor. Test kullanıcısı ile ilgili olabilirmi
2- Bize kesilen fatura bilgilerini nasıl çekebiliyoruz
3- sendSMSVerification() fonsiyonunda sms doğrulaması için dönen oid bilgisi bir uuid ile ilişkilimi yoksa herhangi bir taslak fatura için kullanılabiliyormu Ayrıca earsivportal entegrasyonu için teknik bir bülten varmıdır ????

PHP versiyonu

Projenin PHP 7.4.15 üstü desteği geldimi? Çünkü komik sorunlar yaşıyorum. Sunucum 7.2.24 ile çalışıyor ve bu kütüphaneye uygun ancak bu durumda Composer autoload kullandığımda hata veriyor.

Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.3.0". You are running 7.2.24. in /home/dev/public_html/vendor/efatura-furkankadioglu/composer/platform_check.php on line 24

Bu durumda kütüphaneyi kullanacağım küçük bir versiyon aralığı kalıyor oda 7.3 :)

getDownloadURL

Merhaba,
Gib portala fatura bilgisini gönderdikten sonra URL adresi alıyoruz , ama url adresi her seferinde zaman aşımına uğradı hatası veriyor sorun çözümü nasıl olabilir ?
2. Bir konu ise "Var Olan" bir faturayı sorgulama yaptığımda aşağıdaki hatayı alıyorum. Sebebi nedir ?

İşlem :

$oldInvoice = new Invoice();
$oldInvoice->setUuid("XXXXX");
$sovc= $client->setInvoice($oldInvoice)->getInvoiceFromAPI();

Cevap :

Array
(
    [hata] => Düzenlenmek üzere fatura bilgileri getirilemedi. Hata kodu: 1-1775
)

Konu ile ilgili yardımlarınızı rica ediyorum, Özellikle pdf olarak almak veya html olarak alma konusunda (Var olan fatura için)

SMS Doğrulaması Hata Kontrolü

verifySMSCode fonskiyonunda dönen verinin checkError ile hata kontrolüne ek olarak $body["data"]["sonuc"] alanının da kontrolü gerekiyor.

Şu anki sistemde SMS şifresi hatalı girilse bile array üzerinde bir error kümesi dönmediği için işlem başarılı kabul edilip bağlı diğer işlemler devam ediyor. Şu sıralar pek vaktim olmadığı için pull request gönderemedim, kusura bakmayın.

$body ile gelen dönüşler hatalı ve başarılı sonuçlar için aşağıdaki şekilde:

Başarısız Dönüş

Array ( [data] => Array ( [msg] => SMS şifrenizi yanlış girdiniz [sonuc] => 0 ) [metadata] => Array ( [optime] => 20210116133633+0300 ) )

Başarısız Dönüş

Array ( [data] => Array ( [msg] => SMS şifreniz doğrulandı, işlem başarılı. [sonuc] => 1 ) [metadata] => Array ( [optime] => 20210116133544+0300 ) )

Sunucuda fatura sayfasından çıkış

Hocam sunucu tarafında bir logout sınıfı var mı acaba ? Sunucudan 1 defa giriş yapınca portalda giriş görülüyor başka yerden giriş sağlanamıyor. İşlem bitişinde logout versek başka yerlerden de bağlatılar açılsa ?

Test Modunda Fatura Hatası

Test modunda fatura kesmeye çalışınca token bulunamadı hatası vermektedir. Sorgu detaylarına bakıldığında token null gelmektedir. Ama Normalede connect medhodu ile giriş yapıp faturaları listelemektedir. Yardımlarınızı rica ederim

PHPv8

@furkankadioglu Bey merhaba,

Projenin composer ayarlarında php sürümü olarak 8 desteklememesinin bir sebebi var mı? Eğer yok ise bir PR göndereceğim

Hata Uyarısı Alıyorum

Merhaba hocam. ben bu apiyi sistemime kurdum. bütün fonksiyonlar aktif çalışıyor. fakat yeni fatura oluşturmak isteyince Teknik bir hata oluştu diye bir hata mesajı dönüyor. fatura değişkenlerini defalarca kontrol ettim. number karakterleri string e çevirdim bu kez string array uyarısı aldım. toplamlarda vs hiçbir sorun yok. aynı faturayı portaldan kesiyorum kayıt yapıyor. ama api ile gönderince Hata veriyor. neden olabilir. nerede hata yapıyoruz sizce.

Tarih Aralığı Fatura Listeletme

$client->getInvoicesFromAPI("01/01/2020", "19/05/2020") fonksiyonu kendi içerisinde çalışmıyor. InvoiceManager.php'ye de baktım fakat ekrana bir hata yazdırmıyor ve kendinden sonraki satırları da çalıştırmıyor. Ör; https://prnt.sc/sk8wue görselinde koddan sonraki test yazısı ve devamındaki kodlar çalışmıyor. Php uyumluluğu vb olabilir mi? Sıfırdan güncel şekilde şuan kurulum yaptım. PHP Sürüm; 7.2.24

Fatura nasıl imzalanır/ onaylanır?

Bu yazılım için çok teşekkürler. Fakat aşamadığım bir sıkıntı faturanın nasıl imzalanacağı?

Örnek bir kodla yardımcı olabilirseniz çok sevinirim.
toplu için denediğim :

    $client = new InvoiceManager();
    $client->setCredentials("xxx", "xxx");
    $client->getCredentials();
    $client->connect();
    $veri = $client->getInvoicesFromAPI("25/12/2021", "25/12/2021");
    echo $client->sendSMSVerification("xxx");

tekil için denediğim:

    $client = new InvoiceManager();
    $client->setCredentials("xxx", "xxxx");
    $client->getCredentials();
    $client->connect();

    $oldInvoice = new Invoice();
    $oldInvoice->setUuid($fatura_id);
    $client->setInvoice($oldInvoice)->getInvoiceFromAPI();
    echo $client->sendSMSVerification("xxx");

sms onaylamak için yaptığım:

    $sms = post("kod"); // sms kodu
    $opi = post("id"); // operasyon id

    $client = new InvoiceManager();
    $client->setCredentials("xxx", "xxx");
    $client->getCredentials();
    $client->connect();
    echo $client->verifySMSCode($sms, $opi);

İmzalama

Öncelikle bu ince işçilik için teşekkür ederim.

Ancak aşağıdaki imzalama aşamasında "Bu işlem için yetkiniz yok" diye hata dönüyor.

$client->signDraftInvoice();

İmzalamadan önce sms onayı yapmak mı gerekiyor? Eğer öyleyse telefona gelen sms kodunu ekrana girmek gerekeceği için fatura oluşturma ve imzalama aşamalarının tamamı sunucu tarafında otomatik yapılamayacak anlamına mı geliyor?

Sms Hakkında Acil Yardım

Merhabalar,
Fatura oluşturma işlemi başarıyla tamamladım ama çok önemli bir yerde takıldım kaldım sizlerden acil destek bekliyorum
Lütfen kod paylaşarak cevap vermenizi rica ediyorum.

Fatura oluşturduktan sonra o faturayı sms ile onay kısmını yapamadım bir türlü
faturaları tek tek onaylamak istiyorum ama ettn ile eşitledikten sonramı onaya vermemiz gerekiyor nasıl olacak bu :)

Başlangıç

Warning: require(C:\xampp\htdocs\efatura\example/../vendor/autoload.php): Failed to open stream: No such file or directory in C:\xampp\htdocs\efatura\example\index.php on line 7

Fatal error: Uncaught Error: Failed opening required 'C:\xampp\htdocs\efatura\example/../vendor/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\efatura\example\index.php:7 Stack trace: #0 {main} thrown in C:\xampp\htdocs\efatura\example\index.php on line 7

Bu hatayı alıyorum bu konuda yardımcı olabilirmisiniz?

index.php test modunda hata veriyor.

hocam merhaba;
index.php'den aşağıdaki hatayı almaktayım. Sebebini bulamadım. Yardımlarınız ricasıyla

Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: self signed certificate in certificate chain (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\wamp64\www\efatura-master\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 201
İyi Çalışmalar

Oluşturulan PDF dosyasını sunucuya kaydetme

Merhaba Furkan,

Banka entegrasyonuna vs gerek kalmamış sanırım. Gerçekten harika iş çıkarmışsın. Tebrik ederim :) Oluşturulan PDF dosyasının fatura UUID dosya adı ile sunucuya kaydedilme özelliğini bulamadım. Bu özellik yoksa eklediğinde benim çok bir eksiğim kalmayacak :)

Şimdilik şöyle bir çözüm düşünülebilir sanırım:

public function getInvoicePDF(Invoice $invoice = null, $signed = true, $savePath = null)
{
     $data = $this->getInvoiceHTML($invoice, $signed);
     $mpdf = new Mpdf();
     $mpdf->WriteHTML($data);
     $fileName = $invoice->getUuid();

     return empty($savePath) ? $mpdf->Output() : $mpdf->Output($savePath . "/" . $fileName . ".php", "F");
}

Çok teşekkürler.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.