mgsmus hocam ben şöle bir metod buldum güncelleme ve ekleme yapıyor localhosttada çalışıyor zaten localde deniyorum test yaptım mantık biraz farklı ama iyi çalışıyor 🙂 kodlar aşağıda :
public function Paytr(Request $request){
$tema=Temam::where('onay',1)->first();// tema dosyası
$sepet=Sepet::where('email',@Auth::user()->email)->get();
$siparis_no= rand(1,99999999);
foreach($sepet as $basket){
$ben= @Auth::user()->email;
$insertData = [];
$userBilgileri= User::where('email',$ben)->first();
$sorgum= Sepet::where('email',$ben)->get();
foreach($sorgum as $sorgu){
$insertData[]= [
'urun' => $sorgu->urun,
'urun_detay' => $sorgu->aciklama,
'email' => $userBilgileri->email,
'nik' => $userBilgileri->kadi,
'telefon' => $userBilgileri->telefon,
'tc' => $userBilgileri->tc,
'isim' => $userBilgileri->ad,
'soyisim' => $userBilgileri->soyad,
'adres' => $userBilgileri->adres,
'sehir' => $userBilgileri->sehir,
'ulke' => $userBilgileri->ulke,
'yas' => $userBilgileri->yas,
'fiyat' => $sorgu->fiyat,
'kactane' => $sorgu->kactane,
'toplam_fiyat' => $sorgu->toplam_fiyat,
'odeme' => 'odeme-yapildi',
'paytr_id' => $siparis_no,
];
}
$siparisVer=Siparis::insert($insertData);
## 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 = 'XXXX';
$merchant_key = 'xxxx';
$merchant_salt = 'XXXX';
#
## Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi
$email = "ahmetcan34@gmail.com";
#
## Tahsil edilecek tutar.
$payment_amount = $basket->toplam_fiyat*100; //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_no;
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi
$user_name = "Mustafa";
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi
$user_address = "Keser";
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi
$user_phone = "05541239864";
#
## 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 = "http://localhost/e-ticaret-v2/public/Odeme/".$siparis_no;
#
## Ö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 = "http://www.siteniz.com/odeme_hata.php";
#
## Müşterinin sepet/sipariş içeriği
$user_basket = $basket['urun'];
#
/* Ö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 = "2";
## 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_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
// XXX: DİKKAT: lokal makinanızda "SSL certificate problem: unable to get local issuer certificate" uyarısı alırsanız eğer
// aşağıdaki kodu açıp deneyebilirsiniz. ANCAK, güvenlik nedeniyle sunucunuzda (gerçek ortamınızda) bu kodun kapalı kalması çok önemlidir!
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$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'){
$token=$result['token'];
return view($tema->name.'.shoptwo.sonuc')
->with('token',$token);
}
else{
die("PAYTR IFRAME failed. reason:".$result['reason']);
#########################################################################
}
}//foreach
// burasi ikinci kisim
## 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 = 'YYYYYYYYYYYYYY';
$merchant_salt = 'ZZZZZZZZZZZZZZ';
###########################################################################
####### 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.
} 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ı
}
## Bildirimin alındığını PayTR sistemine bildir.
echo "OK";
exit;
// burasi ikinci kisim
}
public function Odeme(Request $request,$id){
$tema=Temam::where('onay',1)->first();// tema dosyası
$guncelle= Siparis::where('paytr_id',$id)->update(
[
'siparisler_durum' => 1
]
);// to edit
if ($guncelle) {
# code...
return view($tema->name.'.shoptwo.odeme');
}
else{
return back()->with('error','Busayfaya ulaşılamadı hata..');
}
}