• 29-01-2025, 16:39:19
    #1
    merhabalar yeni kimlik kartı doğrulama api sourcesine ihtiyacım var elinde hazır olan varsa benimle paylaşabilirmi seri numaralı hali lazım arkadaşlar yardımlarınızı bekliyorum
  • 29-01-2025, 20:53:32
    #2
    <?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