Havale/EFT iFrame API 2. Adım

Mağaza bildirim sayfasına (Bildirim URL) yapılacak isteğe Üye işyerinin dönmesi gereken yanıt (RESPONSE) text (düz yazı) formatında ve yalnızca OK değeri olmalıdır.

Önemli: OK yanıtının öncesinde veya sonrasında HTML veya herhangi başka bir içerik ekrana basılmamalıdır. Bildirim URL sayfası, müşterinin göreceği bir sayfa değildir, PayTR ile Mağaza arasında arka planda (server-side) bir iletişimde kullanılır. OK yanıtı alınmayan ödeme işlemleri, Mağaza Paneli'ndeki İşlemler sayfasında “Devam Ediyor” olarak görünür. PayTR sistemi OK cevabını istendiği şekilde almadığı durumda, bildirimin başarısız olduğunu varsayarak bir süre daha tekrar tekrar bildirim göndermeye çalışacaktır.

Önemli: PayTR bildirim sistemi, ağ trafik sorunları ve benzeri nedenlerden dolayı aynı ödeme işlemi için birden fazla onay bildirimi gönderebilir. Bu durumda yalnızca ilk bildirim göz önünde bulundurulmalı, sonraki bildirimler için müşteriye tekrar ürün/hizmet sunulmamalı, yalnızca OK yanıtı gönderilerek işlem sonuçlandırılmalıdır. Tekrarlayan bildirimlerin tespiti Mağaza sipariş no (merchant_oid) temel alınarak yapılabilir.

  • Ödeme işleminin başarısız olması durumunda bildirim POST içeriğinde “failed_reason_code” ve “failed_reason_msg” olmak üzere iki alan daha gelir. Bu alanlar hash hesaplamasında kullanılmaz. Bu mesajlar istenirse müşteriyi bilgilendirme amacıyla eposta veya mağaza mesaj sistemi üzerinden müşteriye iletilebilir
failed_reason_code failed_reason_msg Açıklama
4 Havale/EFT ödemesi tespit edilemedi. Ödeme bildirimi formunda müşterinin belirtmiş olduğu bilgiler ile ödemeye ulaşılamamıştır
5 Havale/EFT ödeme tutarı yetersiz. Lütfen gönderdiğiniz tutar kadar bildirim yapın. Müşterinin bankaya gönderdiği tutar, alışveriş tutarından (payment_amount) az olduğundan onay verilmemiştir.
6 Müşteri ödeme yapmaktan vazgeçti ve ödeme sayfasından ayrıldı. Müşteri, kendisine tanınmış olan işlem süresinde (1. ADIM’da tanımlanan timeout_limit değeri) işlemini tamamlamadı veya müşteri ödeme sayfasını kapatarak işlemi sonlandırdı.
7 Bildiriminiz alınmadı, lütfen önceki bildiriminizin kontrolünün sonuçlanmasını bekleyin. Müşteri henüz kontrolü sonuçlanmamış bir ödeme bildirimi bulunurken, tekrar bildirim yaptı.
41 Havale/EFT ödemesi ile bildirimdeki Ad Soyadı uyuşmuyor. Müşterinin bildirim yaparken girdiği Ad Soyadı ile banka kayıtlarındaki Ad Soyadı uyuşmadı.
42 Havale/EFT ödemesi ile bildirimdeki TCKN uyuşmuyor. Müşterinin bildirim yaparken girdiği TCKN ile banka kayıtlarındaki TCKN uyuşmadı.
43 Bu Havale/EFT ödemesi daha önce onaylanmış. Müşterinin bildirimi sonrası yapılan kontrolde, bu ödemenin daha önce bildirilip onay aldığı görüldü.
44 Bu Havale/EFT ödemesi iade edilmiş. Müşterinin bildirimi sonrası yapılan kontrolde, bu ödemenin daha önce iade edildiği görüldü.
45 Dekonttaki iki farklı Ad-Soyadından yalnızca birisi yazılmış Müşterinin bildirimi sonrası yapılan kontrolde,dekontta yazan iki Ad Soyadı bilgisinden yalnızca birisinin girildiği görüldü


<?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   = '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;
?>

Opsiyonel: Ara bildirimleri alma

Müşterinizin, IFrame içerisinde bildirim formunu doldurmasıyla birlikte, talep etmeniz halinde PayTR alt yapısı belirteceğiniz “Ara Bildirim URL” adresine bir ara bildirim yapacaktır. Bildirim içeriğinde EFT/Havale isteğinde göndermiş olduğunuz sipariş numarası ve müşterinizin işlem için seçtiği banka bilgisi bulunur. “Ara Bildirim URL” olarak kullanmak istediğiniz URL bilgisini Paytr Mağaza Paneli > Ayarlar bölümünden ekleyebilirsiniz.

Alan Adı Açıklama
hash Hash: Bildirimin doğruluğunu belirten hash bilgisi
status Durum: Ara bildirim için “info” değeri gelir
merchant_oid Sipariş numarası: EFT/Havale bildirimin başlatırken gönderdiğiniz sipariş numarası
bank Banka: EFT/Havale bildirimin yapıldığı banka


ÖNEMLİ UYARI: Bildirim URL’iniz Paytr Mağaza Paneli > Ayarlar > Bildirim URL Ayarları kısmından, eğer sitenizde SSL var ise Bildirim URL protokolünü HTTPS olarak ayarlamanız gerekmektedir. SSL sertifikanız yok ise, kesinlikle HTTPS’li link kullanmayın. Eğer sitenizde Paytr entegrasyonundan sonra SSL kurulumu yaptıysanız, Bildirim URL Ayarları bölümüne giderek, buradan protokolü HTTPS olarak değiştirerek kaydedin. Eğer kurulumdan sonra sitenizdeki SSL sertifikasını iptal ederseniz, Bildirim URL Ayarları bölümüne giderek, buradan protokolü HTTP olarak değiştirerek kaydedin.

<?php
// Ara Bildirim URL için örnek kodlar

$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'].$post['bank'].$merchant_salt,$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');
###########################################################################

## DÖNÜLEN POST DEĞERLERİ
/*
    $post[merchant_oid]      => Sipariş Numarası
    $post[status]            => "info"
    $post[hash]              => PayTR Tarafından Hesaplanan Hash Değeri

    ## AŞAĞIDAKİLER MÜŞTERİNİN FORMA GİRDİĞİ BİLGİLERDİR ##
    $post[payment_sent_date] => Ödeme Yapılan Tarih
    $post[bank]              => Ödeme Yapılan Banka
    $post[user_name]         => Ödeme Yapan Adı Soyadı
    $post[user_phone]        => Ödeme Yapan Telefon Numarası
    $post[tc_no_last5]       => T.C. Kimlik Numarası Son 5 Hanesi
*/
###########################################################################
>

Havale/EFT iFrame API 2. ADIM örnek kodları indirmek için tıklayın.