- What is furkankadioglu/efatura and what does it do?
- It is a Laravel package for Turkish e-Fatura and e-Arşiv integration. It lets PHP applications create, sign, and send UBL-TR electronic invoices to the GİB portal through a third-party provider using a fluent API. The package ships as a typical Laravel integration with a service provider, configuration file, and facade. Version 1.9.4 added invoice querying for incoming documents, fixed an SMS approval issue, and introduced a manual test-account override.
- How do I install and configure furkankadioglu/efatura in a Laravel app?
- Install it with Composer using composer require furkankadioglu/efatura, then let Laravel package discovery register the service provider and facade. Publish the package configuration and supply your Turkish e-invoice provider and SMS gateway credentials, then keep those values out of version control. Confirm the exact config keys and any required environment variables against the repository README before wiring it into production.
- Which Laravel and PHP versions does this e-Fatura package support?
- The package is positioned for conventional Laravel applications, with the technical assessment noting a good fit for Laravel 8 through 11 on PHP 8.x. No explicit Composer version matrix is included in the supplied notes, so verify the require constraints in composer.json before adopting it. Also check compatibility with your Guzzle and provider SDK versions and run the integration in CI against your target Laravel release.
- How do I create, sign, and send a UBL-TR e-Fatura to GİB?
- The package exposes a fluent API for building invoice data, producing UBL-TR XML, signing it, and submitting it to the GİB portal through the configured provider. Run submission and any approval steps inside queued jobs so retries and timeouts are handled outside the request cycle. Persist the signed XML, provider responses, and status transitions for audit and reconciliation. Confirm which provider integration the package wraps and that your account credentials match that provider.
- Why does the SMS approval flow need queue workers?
- The SMS approval flow is a stateful, multi-step challenge: generate the invoice, send a one-time password, verify it, and then issue the document. That sequence needs queued jobs for OTP dispatch and verification retries, plus sensible timeout handling so a failed SMS does not silently block invoicing. The 1.9.4 fix addressed an SMS approval issue, so check whether exception types, return shapes, or timeout behaviour changed before upgrading. Use the scheduler where polling or delayed verification is required.
- How can I query incoming e-Fatura invoices issued in my company's name?
- Version 1.9.4 added an invoice query method for documents issued in the taxpayer's name, which turns a write-only integration into a read path useful for finance and ERP reconciliation. The release notes do not state whether the query supports date ranges, pagination, or incremental cursors, so verify that before designing polling jobs. Retrieved XML or PDF artefacts expand your data scope and bring KVKK retention, logging, and storage obligations. Start with read-only credentials behind a feature flag.
- Is the manual test-account override safe for production?
- Only if you gate it yourself. A plain configuration flag can be dangerous because a copy-pasted .env file may route live production invoicing to a test account or vice versa, which is a legal and regulatory problem in Turkey rather than just a bug. Derive the setting from the environment in your own config layer and require an explicit non-production check before it can be enabled. Also restrict who can change the value and log any use of test credentials.
- Can I use this package for multi-tenant or multiple taxpayer accounts?
- The release notes are silent on multi-tenant support, and Laravel packages of this type often assume a single global credential set. If you run multiple taxpayers or tenants, confirm whether per-tenant credentials and provider accounts are supported before committing. If they are not, wrap the package behind your own credential resolver and anti-corruption layer so tenant context is explicit. This is a common blocker in Turkish ERP integrations, so validate it early.
- How do I test e-Fatura integration without issuing real invoices?
- Use the manual test-account override only in non-production, pair it with sandbox credentials from your provider, and fake the HTTP layer in automated tests so no live GİB submission occurs. Assert the generated UBL-TR XML, signature step, SMS challenge sequence, and error paths with contract tests. The supplied notes do not indicate a published test suite, so check the repository for one and add your own coverage around the approval and query flows. Never let CI inherit production credentials.
- Is furkankadioglu/efatura suitable outside Laravel or in an event-driven architecture?
- It is a poor fit for polyglot or event-driven estates unless the core is framework-agnostic and can be wrapped behind your own anti-corruption layer; nothing in the release notes indicates that. It is a reasonable fit for conventional Laravel monoliths where one application both issues and reconciles invoices. For other architectures, isolate it behind a service boundary and publish your own domain events rather than leaking package models. Also account for the third-party Turkish provider and SMS gateway as external single points of failure.