
ode.html
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ödeme</title>
<style>
body {
font-family: 'Arial', sans-serif;
background-color: #f5f5f5;
margin: 0;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.form-container {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
padding: 20px;
max-width: 400px;
width: 100%;
}
.form-content {
text-align: center;
}
.content_baslik {
font-size: 18px;
font-weight: bold;
margin-bottom: 20px;
}
.img {
max-width: 100%;
height: auto;
margin-bottom: 20px;
}
input[type="text"] {
width: calc(50% - 5px);
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ccc;
border-radius: 5px;
box-sizing: border-box;
display: inline-block;
}
button {
background-color: #4caf50;
color: #fff;
border: none;
padding: 10px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="form-container">
<div class="form-content">
<label class="content_baslik">MEGNOC - EKMEK PARASI :)</label>
<img src="gorsel.png" class="img"/>
<form id="form1" name="form1" action="pay.php" method="post">
<input type="text" name="bagis_tutari" id="bagis_tutari" value="10" readonly>
<span><b>TL</b></span>
<button type="submit">ÖDE</button><br>
<input type="text" id="ad_soyad" name="ad_soyad" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Ad Soyad" required>
<input type="text" id="telefon" name="telefon" placeholder="05.." minlength="10" maxlength="11" required>
<input type="hidden" name="bagis_turu" value="Ekmek Parası">
</form>
</div>
</div>
</body>
</html>
[B][/B]pay.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// İstanbul'un saat dilimini kullan
date_default_timezone_set('Europe/Istanbul');
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";
// Veritabanı bağlantısını oluştur
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8mb4");
// Bağlantı hatası kontrolü
if ($conn->connect_error) {
die("Veritabanına bağlanılamadı: " . $conn->connect_error);
}
$random_id2 = mt_rand(100000, 999999);
$merchant_oid = $random_id2;
if (isset($_POST['bagis_tutari'])) {
$bagis_tutari = $_POST['bagis_tutari'];
$bagis_turu = $_POST['bagis_turu'];
$ad_soyad = $_POST['ad_soyad'];
$telefon = $_POST['telefon'];
$tarih = date('Y-m-d H:i:s');
// Veritabanına veri eklemek için SQL sorgusu
$sql = "INSERT INTO paytr (tutar, odeme_turu, adsoyad, telefon, tarih, durum, paytr_id, sms, mail) VALUES ('$bagis_tutari', '$bagis_turu', '$ad_soyad', '$telefon', '$tarih','BEKLEMEDE','$random_id2','BEKLEMEDE','BEKLEMEDE')";
if ($conn->query($sql) === TRUE) {
} else {
echo "Ödeme kaydedilirken hata oluştu: " . $conn->error;
}
} else {
echo "Form gönderilmedi veya işlenemedi.";
}
// Veritabanı bağlantısını kapat
$conn->close();
?>
<div style="width: 100%;margin: 0 auto;display: table;">
<?php
## 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 = 'id';
$merchant_key = 'key';
$merchant_salt = 'salt';
#
## Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi
$email = "meg@a.com";
#
## Tahsil edilecek tutar.
$payment_amount = $bagis_tutari * 100;
#
## Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir.
$merchant_oid = $random_id2;
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi
$user_name = $ad_soyad;
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi
$user_address = "İstanbul/Türkiye";
#
## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi
$user_phone = $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 = "https://a.com/success.html";
#
## Ö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 = "https://a.com/fail.html";
#
## Müşterinin sepet/sipariş içeriği
// $user_basket = $bagis_turu;
#
$user_basket = $bagis_turu;
############################################################################################
## 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 = 1; // 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
);
// echo "giden<pre>";print_r( $post_vals); echo "</pre>";
$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);
// echo "giden<pre>";print_r( $result); echo "</pre>";die();
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'];
else
die("PAYTR IFRAME failed. reason:".$result['reason']);
#########################################################################
?>
<!-- Ödeme formunun açılması için gereken HTML kodlar / Başlangıç -->
<script src="https://www.paytr.com/js/iframeResizer.min.js"></script>
<iframe src="https://www.paytr.com/odeme/guvenli/<?php echo $token;?>" id="paytriframe" frameborder="0" scrolling="no" style="width: 100%;"></iframe>
<script>iFrameResize({},'#paytriframe');</script>
<!-- Ödeme formunun açılması için gereken HTML kodlar / Bitiş -->
</div>
[B][/B]paysend.php
<?php
## 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 = 'key';
$merchant_salt = 'salt';
###########################################################################
####### 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');
###########################################################################
$merchant_oid = $post['merchant_oid'];
// Veritabanınıza bağlantı sağlayın (bağlantı bilgileri buraya eklenmelidir)
$servername = "localhost";
$username = "user";
$password = "pass";
$database = "db";
$conn = mysqli_connect($servername, $username, $password, $database);
$conn->set_charset("utf8");
// Veritabanı bağlantısı kontrolü
if (!$conn) {
die("Veritabanı bağlantısı başarısız: " . mysqli_connect_error());
}
// merchant_oid değerini kullanarak ilgili satırı bulun
$sql = "SELECT id, durum, tutar, odeme_turu, adsoyad, telefon FROM paytr WHERE paytr_id = '$merchant_oid'";
$result = mysqli_query($conn, $sql);
if (!$result) {
die("Sorgu hatası: " . mysqli_error($conn));
}
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$id = $row['id'];
$bagis = $row['tutar'];
$bagis_turu = $row['odeme_turu'];
$adsoyad = $row['adsoyad'];
$telefon = $row['telefon'];
$durum = $row['durum'];
if ($durum == "BAŞARILI")
{
echo "OK";
exit;
}
if ($post['status'] == 'success') {
$sqlUpdate = "UPDATE paytr SET durum = 'BAŞARILI' WHERE id = $id";
$resultUpdate = mysqli_query($conn, $sqlUpdate);
}
else {
$sqlUpdate = "UPDATE paytr SET durum = 'BAŞARISIZ' WHERE id = $id";
$resultUpdate = mysqli_query($conn, $sqlUpdate);
if (!$resultUpdate) {
}
}
}
echo "OK";
exit;
mysqli_close($conn);
?>
[B][/B]Veritabanı
