Merhaba, basitçe seriden geliştirdiğim web sitesi sayesinde Paytr hesabım onaylandı ve ödeme alabilirim. Forum kültürünün genişlemesi adına kaynak kodları siz değerli üyelerle paylaşıyorum. Kendini geliştirmek isteyen arkadaşlarımız için umarım yararlı olur
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ı