EFatura

1.9.4 2021-11-19 11:46 UTC

This package is auto-updated.

Last update: 2024-09-10 00:24:30 UTC


README

此库通过PHP通过eArşiv执行发票创建、编辑、签名等操作。完全是免费的,并且正在积极开发中。

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

🚩安装

使用自己的数据测试

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ğı。