• 31-07-2023, 17:30:14
    #1
    Merhaba sayın r10
    paytr test modunda hiç bir hata almadan başarılı bir şekilde geçiyorum fakat canlı mod'a geçmeye çalıştığımda BİLDİRİM URL'DE SORUN VAR: Ödeme sonucu sitenize bildirilemiyor. hatası almaktayım 2. aşamadan.
    destek açtım paytr'ye gelen yanıt şu şekilde
    İlgili hata PayTR tarafından post edilen hash ile tarafınızca oluşuturulan hash değelerinin tip uyuşmazlığından kaynaklanabilmektedir. Hash değerlerinin aynı tipte olduğunu kontrol etmenizi rica ederiz. (Hataya Sebep Örnek : String hash , Byte hash)
    ALTTAKİ KODLARDA EKSİK BİR ŞEY VARMIDIR VEYA SORUN NEDEN KAYNAKLANABİLİR.
    paytr-bildirim.php kodlarım şu şekilde.


    <?php
    
    include 'panel/db-ayar.php';
    
    if($_POST){
    $paytr = $db->query("SELECT * FROM paytr_api LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    ## 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_id = $paytr[*********']; GÜVENLİK AMAÇLI GİZLENMİŞTİR
    $merchant_key = $paytr['*************']; GÜVENLİK AMAÇLI GİZLENMİŞTİR
    $merchant_salt = $paytr['************']; GÜVENLİK AMAÇLI GİZLENMİŞTİR 
    
    ###########################################################################
    
    ####### 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.
    $query = $db->prepare("SELECT * FROM siparis where siparis_key=:siparis_key LIMIT 1");
    $gel = $query->execute(array(":siparis_key"=>$post['merchant_oid']));
    $gel = $query->fetch(PDO::FETCH_ASSOC);
    
    if($gel){
    $islem = $db->prepare("UPDATE siparis SET kredi_karti_odendi = ? WHERE id = ?");
    $islem = $islem->execute(array(1,$gel['id']));
    echo "OK";
    }else{
    
    $query = $db->prepare("SELECT * FROM doping_siparis where siparis_key=:siparis_key LIMIT 1");
    $gel = $query->execute(array(":siparis_key"=>$post['merchant_oid']));
    $gel = $query->fetch(PDO::FETCH_ASSOC);
    
    if($gel){
    $islem = $db->prepare("UPDATE doping_siparis SET odendi = ? WHERE id = ?");
    $islem = $islem->execute(array(1,$gel['id']));
    }
    
    }
    
    
    } 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ı
    
    echo "error";
    }
    exit;
    }
    ?>
  • 31-07-2023, 17:30:57
    #2
    Geri dönüş linkini kontrol edin hocam.
  • 31-07-2023, 17:34:29
    #3
    nivova adlı üyeden alıntı: mesajı görüntüle
    Geri dönüş linkini kontrol edin hocam.
    detaylı anlatabilirmisiniz hocam.
  • 31-07-2023, 17:46:33
    #4
    API uyarılarında sorun olarak ne söylüyor
  • 31-07-2023, 17:54:35
    #5
    SauRonn adlı üyeden alıntı: mesajı görüntüle
    API uyarılarında sorun olarak ne söylüyor
    bana gelen bildirim : PAYTR notification failed: bad hash

    hash ile ilgili bir sorun var ancak nasıl düzenleyebileceğim konusunda fikrim yok.
  • 31-07-2023, 18:06:27
    #6
    anaxagoras adlı üyeden alıntı: mesajı görüntüle
    bana gelen bildirim : PAYTR notification failed: bad hash

    hash ile ilgili bir sorun var ancak nasıl düzenleyebileceğim konusunda fikrim yok.
    if($_POST){
    un altına
    file_put_contents("paytr.txt", json_encode($post));

    yazıp tekrar dener misiniz?

    Denedikten sonra siteadresiniz.com/paytr.txt adresine gidip merchant_oid, status, total_amount değerlerini kontrol edin boş mu dolu mu diye. Bunlardan biri ödeme kısmındaki değerlerle uyuşmuyordur.
  • 31-07-2023, 18:09:22
    #7
    değişen birşey olmadı hocam.
    bu şekilde ekledim.

    if($_POST){
    file_put_contents("paytr.txt", json_encode($post));
    $paytr = $db->query("SELECT * FROM paytr_api LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    ## 2. ADIM için örnek kodlar ##
    SauRonn adlı üyeden alıntı: mesajı görüntüle
    if($_POST){
    un altına
    file_put_contents("paytr.txt", json_encode($post));

    yazıp tekrar dener misiniz?

    Denedikten sonra siteadresiniz.com/paytr.txt adresine gidip merchant_oid, status, total_amount değerlerini kontrol edin boş mu dolu mu diye. Bunlardan biri ödeme kısmındaki değerlerle uyuşmuyordur.
  • 31-07-2023, 18:10:13
    #8
    anaxagoras adlı üyeden alıntı: mesajı görüntüle
    değişen birşey olmadı hocam.
    bu şekilde ekledim.

    if($_POST){
    file_put_contents("paytr.txt", json_encode($post));
    $paytr = $db->query("SELECT * FROM paytr_api LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    ## 2. ADIM için örnek kodlar ##
    siteadresiniz.com/paytr.txt adresine girdiniz mi
  • 31-07-2023, 18:12:20
    #9
    SauRonn adlı üyeden alıntı: mesajı görüntüle
    siteadresiniz.com/paytr.txt adresine girdiniz mi
    hocam normalde yazılımın içinde paytr.txt dosyası yoktu ancak şuan ftp'de baktığımda paytr.txt diye bir dosya oluşmuş fakat içeriğinde sadece null yazmakta