Bir B2B SaaS veya Avrupa’da bir e-ticaret platformu geliştiriyorsanız, sonunda aynı sorunla karşılaşacaksınız: AB KDV doğrulaması.
<p>Reverse charge mekanizmasını (0% KDV) yasal olarak uygulamak için, müşterinizin KDV numarasının geçerli olduğunu Avrupa Komisyonu'nun VIES sistemi üzerinden doğrulamanız gerekmektedir. Ancak resmi VIES API'sı ile doğrudan entegrasyon yapmak genellikle zordur:</p>
<ul>
<li>API sık sık düşer veya zaman aşımına uğrar.</li>
<li>Senkrondur ve yavaş çalışır, bu da ödeme dönüşüm oranınızı olumsuz etkiler.</li>
<li>Eşzamanlı istekleri sınırlar.</li>
</ul>
<p>Karmaşık geri dönüş mantığı ve önbellekleme mekanizmaları yazmak yerine, VIES verilerini hızlı yanıtlar için önbellekleyen sunucusuz bir proxy olan <a href="https://vatflow.net" target="_blank" rel="noopener noreferrer">VatFlow</a> kullanarak temiz ve sağlam bir Laravel Özel Doğrulama Kuralı oluşturalım.</p>
<h3>
<a name="prerequisites" href="#prerequisites"></a>
Gereksinimler
</h3>
<ul>
<li>Bir Laravel uygulaması (v9, v10 veya v11).</li>
<li>RapidAPI üzerinden ücretsiz bir VatFlow API Anahtarı.</li>
</ul>
<h3>
<a name="step-1-install-the-sdk" href="#step-1-install-the-sdk"></a>
Adım 1: SDK'yı Yükleyin
</h3>
<p>VatFlow, kutudan çıkar çıkmaz otomatik yeniden denemeleri yöneten resmi, bağımsız bir PHP sarmalayıcısı sağlar. Kaynak kodunu <a href="https://github.com/Baptiste-Pignol/vatflow-php" target="_blank" rel="noopener noreferrer">GitHub'da</a> bulabilirsiniz (⭐ bırakmayı unutmayın!).</p>
<p>Kurulumu Composer ile yapın:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>composer require quicreatdev/vatflow-php</code></pre>
</div>
<h3>
<a name="step-2-configure-your-api-key" href="#step-2-configure-your-api-key"></a>
Adım 2: API Anahtarınızı Yapılandırın
</h3>
<p>RapidAPI anahtarınızı <code>.env</code> dosyanıza ekleyin:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>VATFLOW_API_KEY=your_rapidapi_key_here</code></pre>
</div>
<p>Ardından, Laravel'in ona kolayca erişebilmesi için <code>config/services.php</code> dosyanızda haritalayın:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code>// config/services.phpreturn [
// … diğer hizmetler
‘vatflow’ => [
‘key’ => env(‘VATFLOW_API_KEY’),
],
];
<h3>
<a name="step-3-create-the-custom-validation-rule" href="#step-3-create-the-custom-validation-rule"></a>
Adım 3: Özel Doğrulama Kuralını Oluşturun
</h3>
<p>Laravel, özel kurallar oluşturmayı son derece kolay hale getirir. Aşağıdaki artisan komutunu çalıştırın:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>php artisan make:rule ValidEuVat</code></pre>
</div>
<p>Şimdi, oluşturulan <code>app/Rules/ValidEuVat.php</code> dosyasını açın ve VatFlow istemcisini kullanarak mantığı uygulayın. Yanıt sürelerini garanti altına almak için önbelleklenen verileri (maksimum 7 gün) kullanacak şekilde yapılandıracağız.<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><?phpnamespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use VatFlow\VatFlowClient;
use Illuminate\Support\Facades\Log;
class ValidEuVat implements ValidationRule
{
/
Run the validation rule.
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
// 1. Anahtarı ile istemciyi başlat
$apiKey = config(‘services.vatflow.key’);if (!$apiKey) {
$fail(‘The VatFlow API key is missing.’);
return;
}$client = new VatFlowClient($apiKey);
// 2. API’yi çağır (maksimum önbellek yaşı: 7 gün, otomatik denemeler: true)
$response = $client->validate($value, 7, true);// 3. Ağ veya API hatalarını yönet
if (!$response[‘success’]) {
// Hata kaydediyoruz, ancak onaylamayı başlatmıyoruz.
Log::warning(‘VAT Validation Service Unavailable: ‘ . $response[‘error’]);
return;
}// 4. KDV’nin gerçekten geçerli olup olmadığını kontrol et
if (!$response[‘data’][‘is_valid’]) {
$fail(‘The provided EU VAT number is invalid or inactive.’);
}
}
}


