Yeni kimlik kartı doğrulama apisi lazım
1
●300
- 29-01-2025, 20:53:32
<?php namespace App\Http\Controllers\Frontend; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; use Illuminate\Support\Facades\Validator; class AppController extends Controller { // Class property private $serviceUrl = "https://tckimlik.nvi.gov.tr/Service/"; // Home public function index() { return view('frontend.main.index'); } public function validateTC(Request $request) { // Kullanıcı oturumu kontrolü $user = Auth::user(); if (!$user) { return redirect()->back()->with('error', 'Oturum açmalısınız.'); } $userId = $user->id; // İstek verilerini doğrulamak için kurallar $rules = [ 'identity' => 'required|digits:11|regex:/^[1-9][0-9]{10}$/', 'document_serial' => 'required|string:9', 'name' => 'required|string|max:255', 'surname' => 'required|string|max:255', 'birthdate' => 'required|date_format:d.m.Y', // doğum tarihi için format kontrolü ]; // Hata mesajları $messages = [ 'identity.required' => 'TC Kimlik Numarası zorunludur.', 'identity.digits' => 'TC Kimlik Numarası 11 haneli olmalıdır.', 'identity.regex' => 'Geçersiz TC Kimlik Numarası formatı. İlk hane 0 olamaz.', 'document_serial.required' => 'Belge seri numarası zorunludur.', 'document_serial.regex' => 'Belge seri numarası 9 haneli olmalıdır.', 'name.required' => 'Ad alanı zorunludur.', 'name.string' => 'Ad sadece metin içermelidir.', 'name.max' => 'Ad maksimum 255 karakter olmalıdır.', 'surname.required' => 'Soyad alanı zorunludur.', 'surname.string' => 'Soyad sadece metin içermelidir.', 'surname.max' => 'Soyad maksimum 255 karakter olmalıdır.', 'birthdate.required' => 'Doğum tarihi zorunludur.', 'birthdate.date_format' => 'Doğum tarihi geçerli bir formatta olmalıdır (gg.aa.yyyy).', ]; // Verileri doğrulama $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } // Tarih bilgisini parçalama $birthdate = $request->birthdate; // dd.mm.yyyy formatında list($day, $month, $year) = explode('.', $birthdate); // gün, ay, yıl olarak ayır // Kimlik doğrulaması için veri $data = [ "identity" => $request->identity, "name" => $request->name, "surname" => $request->surname, "day" => $day, "month" => $month, "year" => $year, "document_serial" => $request->document_serial, "type" => 2 // Yeni kimlik kartı türü ]; // Kimlik doğrulama işlemi $validationResult = $this->IdentityDocumentValidation($data); if ($validationResult) { try { // Kimlik doğrulama başarılıysa kullanıcıyı güncelleme $user = User::find($userId); if (!$user) { return redirect()->back()->with('error', 'Kullanıcı bulunamadı.'); } $user->update([ 'tc_no' => $request->identity, 'document_serial' => $request->document_serial, 'birthday' => $request->birthdate, 'name' => $request->name, 'surname' => $request->surname, ]); // Başarı mesajı return redirect()->back()->with('success', 'Kimlik doğrulama başarılı ve bilgiler güncellendi.'); } catch (\Exception $e) { return redirect()->back()->with('error', 'Bir hata oluştu: ' . $e->getMessage()); } } else { // Kimlik doğrulama başarısızsa hata mesajı return redirect()->back()->with('error', 'Kimlik doğrulama başarısız. Lütfen bilgilerinizi kontrol edin.'); } } // XML ile kimlik doğrulaması public function IdentityDocumentValidation($data) { if ($data["type"] == 2) { $post_data = '<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <KisiVeCuzdanDogrula xmlns="http://tckimlik.nvi.gov.tr/WS"> <TCKimlikNo>' . $data['identity'] . '</TCKimlikNo> <Ad>' . $this->tr_strtoupper($data['name']) . '</Ad> <Soyad>' . $this->tr_strtoupper($data['surname']) . '</Soyad> <DogumGun>' . $data['day'] . '</DogumGun> <DogumAy>' . $data['month'] . '</DogumAy> <DogumYil>' . $data['year'] . '</DogumYil> <TCKKSeriNo>' . $data['document_serial'] . '</TCKKSeriNo> </KisiVeCuzdanDogrula > </soap:Body> </soap:Envelope>'; } $data = [ "endpoint" => "KPSPublicV2.asmx", "post" => $post_data, "header" => [ 'POST /Service/KPSPublicV2.asmx HTTP/1.1', 'Host: tckimlik.nvi.gov.tr', 'Content-Type: text/xml; charset=utf-8', 'SOAPAction: "http://tckimlik.nvi.gov.tr/WS/KisiVeCuzdanDogrula"', 'Content-Length: ' . strlen($post_data) ] ]; return $this->request($data); } // Curl ile HTTP isteği yapma protected function request($data) { $ch = curl_init(); $options = array( CURLOPT_URL => $this->serviceUrl . $data["endpoint"], CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data["post"], CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_HEADER => false, CURLOPT_HTTPHEADER => $data["header"], ); curl_setopt_array($ch, $options); $response = curl_exec($ch); curl_close($ch); return (strip_tags($response) === 'true') ? true : false; } // Türkçe büyük harfe çevirme public function tr_strtoupper($text) { $search = ["ç", "i", "ı", "ğ", "ö", "ş", "ü"]; $replace = ["Ç", "İ", "I", "Ğ", "Ö", "Ş", "Ü"]; $text = str_replace($search, $replace, $text); return strtoupper($text); }KİMSEDEN SES ÇIKMAYINCA KENDİM YAPTIM umarım faydalı olur