furkankadioglu / efatura
EFatura
Requires
- php: >=5.5.9 <=7.4.15
- guzzlehttp/guzzle: ^6.5|^7.0
- kwn/number-to-words: ^1.9
- mpdf/mpdf: ^8.0
- ramsey/uuid: ^3.7|^4.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
此库通过PHP通过eArşiv执行发票创建、编辑、签名等操作。完全是免费的,并且正在积极开发中。
🚩安装
使用自己的数据测试
https://earsivportal.efatura.gov.tr/intragiris.html
使用测试账户测试
https://earsivportaltest.efatura.gov.tr/login.jsp
包安装
composer require furkankadioglu/efatura
📲 支持和问题
如果您遇到问题或对项目有任何疑问,请从这里创建一个记录,我们一起解决问题。
由于项目是完全开源的,因此项目的持续开发/维护和错误解决也由社区完成。启动项目的人没有付费或免费的支持解决方案,因此请不要通过社交媒体联系。感谢您的理解和尊重。
🚩功能
- 打开和关闭eArşiv会话。
- 创建发票。
- 在两个日期之间搜索发票。
- 显示菜单列表。
- 显示发票详细信息。
- 使用土耳其语或英语选项创建发票模板。
- 以HTML格式输出发票。
- 获取发票下载地址。
- 取消发票。
- 搜索现有的发票。
- 获取用户信息。 (公司基本资料)
- 更新用户信息。
- 通过短信验证和确认发票。
- 以PDF格式输出发票。
🚩示例
入口
通过创建一个客户端,我们将通用结构纳入我们的项目中。
use furkankadioglu\eFatura\InvoiceManager; $client = new InvoiceManager();
您可以使用chain函数定义登录信息,这对生产环境是有效的。
// Production environment $client->setUsername("XXX")->setPassword("YYY"); // VEYA $client->setCredentials("XXX", "YYY");
以下是如何在测试模式下运行的示例,您可以在没有公司信息的情况下自动进行测试登录。此步骤之后的所有操作都将通过测试账户执行。
// Test Environment $client->setDebugMode(true)->setTestCredentials();
如果您想查看信息
$client->getCredentials();
在定义我们的信息后,要获取token进行登录:(此步骤是必需的,才能进行下一步操作)
$client->connect();
发票管理
以下是如何列出发票
// Tüm faturaları listele $client->getInvoicesFromAPI("01/01/2020", "08/02/2020");
如果您想创建新的发票,有几个选项,对于习惯使用英文的用户,有两种不同的方法,让我们先从土耳其语开始。
例如,可以这样创建一个发票
$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 ];
创建发票当然不够,还需要输入产品或服务,情况如下。
$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 ];
由于变量是土耳其语,因此我们使用mapWithTurkishKeys函数。
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 🇺🇸
然后我们需要将其注册到InvoiceManager。情况如下
$client->setInvoice($inv);
然后我们创建草稿
$client->createDraftBasicInvoice();
搜索为我们创建的发票
$client->getInvoicesMeFromAPI("01/01/2021", "31/12/2022");
用户信息
这部分是您公司在eArşiv中注册的信息。您可以获取和更新这些信息。
👉同时,这也满足了您在创建发票时所需的大量数据需求。
$userInformations = $client->getUserInformationsData();
此操作返回一个UserInformations类。您可以使用set和get方法更改类中的所有数据
// Sadece vknTckn değiştirilemez. $userInformations = $userInformations->setUnvan("FRKN Yazılım")->setApartmanNo("4"); $apartmanNo = $userInformations->getApartmanNo(); // 4
此外,如果您想批量获取此类的数据,可以应用以下用法,同样适用于Invoice类
$userInformations->export(); // Array olarak tüm değişkenleri döndürür.
此外,您也可以自己创建此类,并作为数组提供数据。然后我们可以按如下方式将其发送到服务器
$client->setUserInformations($userInformations); // Manager'a tanımla. $client->sendUserInformationsData(); // Sunucuya gönder.
🚩功能性特性
(下载/确认/获取HTML输出/取消等)
获取HTML输出
$client->getInvoiceHTML();
获取PDF输出
$client->getInvoicePDF();
获取下载链接
$client->getDownloadURL();
取消账单
$client->cancelInvoice();
进行短信验证
$client->sendSMSVerification($telefon); // Operasyon id döndürür.
验证短信并发送待审批的账单
$client->verifySMSCode($kod, $operasyonId);
提取个人或机构的资料
$client->getCompanyInfo($TCKimlikNoVeyaVergiNo);
退出并关闭会话
$client->logOutFromAPI();
查询现有账单
$oldInvoice = new Invoice(); $oldInvoice->setUuid("e8277cfa-4ac9-11ea-a5b5-acde48001122"); $client->setInvoice($oldInvoice)->getInvoiceFromAPI(); // {"faturaUuid":"8a4423bc-4aca-11ea-8c30-acde48001122","faturaTarihi":"09\/02\/2020"...
🚩其他用途
简短用法
可能有点长。😂当然,使用链式方法使我们的生活更轻松。一行代码解决问题
$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
常量变量
由于存在许多不同的数据类型且事先未知,可能存在一些问题,因此还提供了一些必需的常量选项。所有变量名称都与eArşiv中显示的名称完全一致。以下是一些示例
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
更改主结构
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
您可以通过这种方式进行映射,也可以使用单独的getter/setter方法,您可以调整您想要的任何数据
$inv->setUuid("Buraya kendi fatura idniz") ->setCountry("Türkiye") ->getCurrencyRate(); // TRY
批量数据导入和导出
我们可以批量添加或删除账单数据中的可变值,如下所示
$inv = new Invoice($data); // data arrayinden keylere göre tüm verileri alır. $inv->export(); // tüm verileri çıkartır.
🚩其他主题
运行测试
composer test
更多示例
您可以从这里找到更多示例。
警告
🚨 此包创建受税文件,不承担任何责任,建议在确认您的操作之前使用debugMode以测试数据的形式进行测试。
此外
此项目是在Fatih Kadir Akın的fatura.js项目的基础上,将其调整为PHP语言制作的。还要感谢Arda Kılıçdağı。