📁 PHP Dosya Yöneticisi
/
/
home
/
demodesigncom
/
matba.demodesign.com.tr
/
application
/
controllers
📝
Siparis.php
← Geri Dön
<?php defined('BASEPATH') OR exit('Bu Sayfaya Giriş İzniniz Bulunmamaktadır'); class Siparis extends CI_Controller { function __construct(){ parent::__construct(); // Site Açıkmı Kontrolü $this->tema->site_durum(); } // Sipariş İçin Üye Bilgilerini Alma Formu public function uyebilgiform(){ // Site Ayarları $data['ayarlar'] = $this->tema->site_ayarlari(); // Title $data['title'] = $data['ayarlar']['title']; // Head Menü $data['head_menu'] = $this->tema->site_dizayn('head'); // Header Menü $data['header_menu'] = $this->tema->site_dizayn('header'); $data['title'] = 'Sipariş Ver - '.$data['title'].''; // Sepet Listesi Teması $this->tema->site_tema('siparis/uyebilgiform_view',$data,$slider="0"); } // Sipariş Ödeme Sayfası public function odeme(){ // Site Ayarları $data['ayarlar'] = $this->tema->site_ayarlari(); // Title $data['title'] = $data['ayarlar']['title']; // Head Menü $data['head_menu'] = $this->tema->site_dizayn('head'); // Header Menü $data['header_menu'] = $this->tema->site_dizayn('header'); $data['title'] = 'Online Ödeme Sayfası'; // Formdan Gelen Bilgiler if(isset($_POST['siparisuyeF'])){ $siparis_uyebilgileri = array( 'ad' => $this->input->post('ad'), 'soyad' => $this->input->post('soyad'), 'email' => $this->input->post('email'), 'telefon' => $this->input->post('telefon'), 'teslimat_adresi' => $this->input->post('teslimat_adresi'), 'firma_unvan' => $this->input->post('firma_unvan'), 'vergi' => $this->input->post('vergi'), 'tc' => $this->input->post('tc'), ); $siparisler = array( 'urun' => $this->input->post('siparis_urun'), 'adet' => $this->input->post('siparis_adet'), 'model' => $this->input->post('siparis_urunmodelleri'), 'birimfiyat' => $this->input->post('siparis_urun_tutar'), 'toplamtutar' => $this->input->post('siparis_toplam') ); // Veritabanına Kaydetme İşlemleri $siparis_kaydet = array( 'siparis_uyebilgileri' => json_encode($siparis_uyebilgileri), 'siparisler' => json_encode($siparisler), 'siparis_tutar' => $this->input->post('siparis_toplam'), 'siparis_tarih' => date('d/m/Y'), 'siparis_durum' => 0, 'siparis_numarasi' => rand(12356,678912356) ); $kaydet = $this->DB_model->kaydet('siparisler',$siparis_kaydet); if($kaydet){ $siparis_id = $this->db->insert_id(); // Sipariş Bilgilerine Erişmek İçin Siparişi Bul $kosul = array( 'siparis_id' => $siparis_id ); $siparis_bul = $this->DB_model->bul('siparisler',$kosul); if($siparis_bul){ $siparisler = json_decode($siparis_bul->siparis_uyebilgileri); $urunler = json_decode($siparis_bul->siparisler); // PAYTR Ödeme İşlemleri ## 1. ADIM için örnek kodlar ## ####################### DÜZENLEMESİ ZORUNLU ALANLAR ####################### # ## API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz. $merchant_id = '151756'; $merchant_key = 'c8S6uPXQppbFCsGX'; $merchant_salt = '7jqxAJ9H5YcUAhoq'; # ## Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi $email = $siparisler->email; # ## Tahsil edilecek tutar. $toplam_tutar = $siparis_bul->siparis_tutar; $payment_amount = str_replace(['.',','],'',$toplam_tutar); //9.99 için 9.99 * 100 = 999 gönderilmelidir. # ## Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir. $merchant_oid = $siparis_id; # ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi $user_name = $siparisler->ad.$siparisler->soyad; # ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi $user_address = $siparisler->teslimat_adresi; # ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi $user_phone = $siparisler->telefon; # ## Başarılı ödeme sonrası müşterinizin yönlendirileceği sayfa ## !!! Bu sayfa siparişi onaylayacağınız sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır! ## !!! Siparişi onaylayacağız sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü). $merchant_ok_url = site_url('siparis/odeme-basarili'); # ## Ödeme sürecinde beklenmedik bir hata oluşması durumunda müşterinizin yönlendirileceği sayfa ## !!! Bu sayfa siparişi iptal edeceğiniz sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır! ## !!! Siparişi iptal edeceğiniz sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü). $merchant_fail_url = site_url('siparis/odeme-basarisiz'); # ## Müşterinin sepet/sipariş içeriği $user_basket = base64_encode(json_encode( array($this->input->post('siparis_urun'),$this->input->post('siparis_adet'),$this->input->post('siparis_urunmodelleri'),$this->input->post('siparis_urun_tutar'), ))); # /* ÖRNEK $user_basket oluşturma - Ürün adedine göre array'leri çoğaltabilirsiniz $user_basket = base64_encode(json_encode(array( array("Örnek ürün 1", "18.00", 1), // 1. ürün (Ürün Ad - Birim Fiyat - Adet ) array("Örnek ürün 2", "33.25", 2), // 2. ürün (Ürün Ad - Birim Fiyat - Adet ) array("Örnek ürün 3", "45.42", 1) // 3. ürün (Ürün Ad - Birim Fiyat - Adet ) ))); */ ############################################################################################ ## Kullanıcının IP adresi if( isset( $_SERVER["HTTP_CLIENT_IP"] ) ) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } elseif( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) { $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else { $ip = $_SERVER["REMOTE_ADDR"]; } ## !!! Eğer bu örnek kodu sunucuda değil local makinanızda çalıştırıyorsanız ## buraya dış ip adresinizi (https://www.whatismyip.com/) yazmalısınız. Aksi halde geçersiz paytr_token hatası alırsınız. $user_ip=$ip; ## ## İşlem zaman aşımı süresi - dakika cinsinden $timeout_limit = "30"; ## Hata mesajlarının ekrana basılması için entegrasyon ve test sürecinde 1 olarak bırakın. Daha sonra 0 yapabilirsiniz. $debug_on = 1; ## Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir. $test_mode = 0; $no_installment = 0; // Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın ## Sayfada görüntülenecek taksit adedini sınırlamak istiyorsanız uygun şekilde değiştirin. ## Sıfır (0) gönderilmesi durumunda yürürlükteki en fazla izin verilen taksit geçerli olur. $max_installment = 0; $currency = "TL"; ####### Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. ####### $hash_str = $merchant_id .$user_ip .$merchant_oid .$email .$payment_amount .$user_basket.$no_installment.$max_installment.$currency.$test_mode; $paytr_token=base64_encode(hash_hmac('sha256',$hash_str.$merchant_salt,$merchant_key,true)); $post_vals=array( 'merchant_id'=>$merchant_id, 'user_ip'=>$user_ip, 'merchant_oid'=>$merchant_oid, 'email'=>$email, 'payment_amount'=>$payment_amount, 'paytr_token'=>$paytr_token, 'user_basket'=>$user_basket, 'debug_on'=>$debug_on, 'no_installment'=>$no_installment, 'max_installment'=>$max_installment, 'user_name'=>$user_name, 'user_address'=>$user_address, 'user_phone'=>$user_phone, 'merchant_ok_url'=>$merchant_ok_url, 'merchant_fail_url'=>$merchant_fail_url, 'timeout_limit'=>$timeout_limit, 'currency'=>$currency, 'test_mode'=>$test_mode ); $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.paytr.com/odeme/api/get-token"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1) ; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vals); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); $result = @curl_exec($ch); if(curl_errno($ch)) die("PAYTR IFRAME connection error. err:".curl_error($ch)); curl_close($ch); $result=json_decode($result,1); if($result['status']=='success') $data['token']=$result['token']; else die("PAYTR IFRAME failed. reason:".$result['reason']); ######################################################################### } }else{ echo 'Hata'; } // Tema Dosyası $this->tema->site_tema('siparis/odeme_view',$data,$slider="0"); } } // Ödeme Başarılı Dönüş İşlemleri public function odemebasarili(){ // Site Ayarları $data['ayarlar'] = $this->tema->site_ayarlari(); // Title $data['title'] = $data['ayarlar']['title']; // Head Menü $data['head_menu'] = $this->tema->site_dizayn('head'); // Header Menü $data['header_menu'] = $this->tema->site_dizayn('header'); $data['title'] = 'Ödemeniz Başarılı Bir Şekilde Tamamlandı'; // Sepet Listesi Teması $this->tema->site_tema('siparis/odemebasarili_view',$data,$slider="0"); } // Ödeme Başarılı Dönüş İşlemleri public function odemehatali(){ // Site Ayarları $data['ayarlar'] = $this->tema->site_ayarlari(); // Title $data['title'] = $data['ayarlar']['title']; // Head Menü $data['head_menu'] = $this->tema->site_dizayn('head'); // Header Menü $data['header_menu'] = $this->tema->site_dizayn('header'); $data['title'] = 'Ödemeniz Hatalı'; // Sepet Listesi Teması $this->tema->site_tema('siparis/odemehatali_view',$data,$slider="0"); } // Ödeme Geri dÖnüş public function callback(){ ## 2. ADIM için örnek kodlar ## ## ÖNEMLİ UYARILAR ## ## 1) Bu sayfaya oturum (SESSION) ile veri taşıyamazsınız. Çünkü bu sayfa müşterilerin yönlendirildiği bir sayfa değildir. ## 2) Entegrasyonun 1. ADIM'ında gönderdiğniz merchant_oid değeri bu sayfaya POST ile gelir. Bu değeri kullanarak ## veri tabanınızdan ilgili siparişi tespit edip onaylamalı veya iptal etmelisiniz. ## 3) Aynı sipariş için birden fazla bildirim ulaşabilir (Ağ bağlantı sorunları vb. nedeniyle). Bu nedenle öncelikle ## siparişin durumunu veri tabanınızdan kontrol edin, eğer onaylandıysa tekrar işlem yapmayın. Örneği aşağıda bulunmaktadır. $post = $_POST; ####################### DÜZENLEMESİ ZORUNLU ALANLAR ####################### # ## API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz. $merchant_key = 'c8S6uPXQppbFCsGX'; $merchant_salt = '7jqxAJ9H5YcUAhoq'; ########################################################################### ####### Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. ####### # ## POST değerleri ile hash oluştur. $hash = base64_encode( hash_hmac('sha256', $post['merchant_oid'].$merchant_salt.$post['status'].$post['total_amount'], $merchant_key, true) ); # ## Oluşturulan hash'i, paytr'dan gelen post içindeki hash ile karşılaştır (isteğin paytr'dan geldiğine ve değişmediğine emin olmak için) ## Bu işlemi yapmazsanız maddi zarara uğramanız olasıdır. if( $hash != $post['hash'] ) die('PAYTR notification failed: bad hash'); ########################################################################### ## BURADA YAPILMASI GEREKENLER ## 1) Siparişin durumunu $post['merchant_oid'] değerini kullanarak veri tabanınızdan sorgulayın. ## 2) Eğer sipariş zaten daha önceden onaylandıysa veya iptal edildiyse echo "OK"; exit; yaparak sonlandırın. /* Sipariş durum sorgulama örnek $durum = SQL if($durum == "onay" || $durum == "iptal"){ echo "OK"; exit; } */ if( $post['status'] == 'success' ) { ## Ödeme Onaylandı ## BURADA YAPILMASI GEREKENLER ## 1) Siparişi onaylayın. ## 2) Eğer müşterinize mesaj / SMS / e-posta gibi bilgilendirme yapacaksanız bu aşamada yapmalısınız. ## 3) 1. ADIM'da gönderilen payment_amount sipariş tutarı taksitli alışveriş yapılması durumunda ## değişebilir. Güncel tutarı $post['total_amount'] değerinden alarak muhasebe işlemlerinizde kullanabilirsiniz. $tutar = $post['total_amount']/100; $siparis_id = $post['merchant_oid']; // Siparişi Onayla $kosul = array( 'siparis_id' => $siparis_id ); $duzenlenecek = array( 'siparis_durum' => 1 ); $onayla = $this->DB_model->duzenle('siparisler',$kosul,$duzenlenecek); } else { ## Ödemeye Onay Verilmedi ## BURADA YAPILMASI GEREKENLER ## 1) Siparişi iptal edin. ## 2) Eğer ödemenin onaylanmama sebebini kayıt edecekseniz aşağıdaki değerleri kullanabilirsiniz. ## $post['failed_reason_code'] - başarısız hata kodu ## $post['failed_reason_msg'] - başarısız hata mesajı $siparis_id = $post['merchant_oid']; $kosul = array( 'siparis_id' => $siparis_id ); $duzenlenecek = array( 'siparis_durum' => 0 ); $hata = $this->DB_model->duzenle('siparisler',$kosul,$duzenlenecek); } ## Bildirimin alındığını PayTR sistemine bildir. echo "OK"; exit; } // Tasarım Sayfası public function tasarimyukle(){ // Site Ayarları $data['ayarlar'] = $this->tema->site_ayarlari(); // Title $data['title'] = $data['ayarlar']['title']; // Head Menü $data['head_menu'] = $this->tema->site_dizayn('head'); // Header Menü $data['header_menu'] = $this->tema->site_dizayn('header'); $data['title'] = 'Sipariş Ver - '.$data['title'].''; // Sepet Listesi Teması $this->tema->site_tema('tasarim_view',$data,$slider="0"); } }
💾 Kaydet
İptal
📝 Yeniden Adlandır
İptal
Kaydet
🔐 Dosya İzinleri (chmod)
İzin Değeri:
Hızlı Seçim:
777
755
644
600
777
= Herkes okur/yazar/çalıştırır
755
= Sahip tam, diğerleri okur/çalıştırır
644
= Sahip okur/yazar, diğerleri okur
600
= Sadece sahip okur/yazar
İptal
Uygula