• 23-12-2021, 15:52:12
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba, sanal pos entegrasyonu sırasında basit ama saçma bir hata ile karşılaştım. Bankaya sorgu gönderilirken fiyat değeri integer olarak gönderilmeli. Fiyat verisini ödeme sayfasına post ediyorum. Fiyatlar veritabanında 99,90 tarzı kayıtlı olduğu için veritabanından çekerken string olarak alıp virgülü siliyorum ve int haline getirip post ediyorum. ( Banka 1.00₺'lik ödeme için gönderilen fiyatın 100 olmasını talep ediyor. ) Sorun şu ki ben fiyatı ne yaparsam yapayım kabul etmiyor. Şöyle örnek vereyim.

    $fiyat = 100; // 1₺ olarak gidiyor ve bu fiyat bilgisiyle ödeme başarılı tamamlanıyor.
    
    $fiyat = isset($_POST['fiyat']) ? $_POST['fiyat'] : null; // Fiyat verisini böyle çekiyorum, int olarak post etmeme rağmen string oluyor.
    $fiyat = (int) $fiyat;
    $fiyat = intval($fiyat);
    settype($fiyat, 'integer');
    // Bu üç yolu da tek tek denedim.
    echo gettype($fiyat)."-> $fiyat"; // Çıktısı : integer -> 100 Fakat banka bu veri ile işlem yapılmaya çalıştığında hata veriyor. Aynı işlemi ilk satırdaki gibi $fiyat = 100 olarak tanımlarsam işlem gerçekleşiyor.
    Veriyi Session'dan çekerek de denedim, sonuç yine aynı. Neden kaynaklanıyor, nasıl çözeceğim bir fikrim yok bilgisi olan varsa yardımcı olabilirse teşekkür ederim.
  • 23-12-2021, 15:54:53
    #2
    Üyeliği durduruldu
    Veritabanında string olarak değil de float olarak tutun düzelir sanırım hocam
  • 23-12-2021, 15:57:44
    #3
    DB den çektiğin fiyatı 100ile çarp öyle gönder. string e felan çevirip virgül silmeyle uğraşma
  • 23-12-2021, 15:59:17
    #4
    Polat adlı üyeden alıntı: mesajı görüntüle
    DB den çektiğin fiyatı 100ile çarp öyle gönder. string e felan çevirip virgül silmeyle uğraşma
    DB'deki fiyat tipini VARCHAR olarak belirtmişim, onu floata çevirip deneyeceğim
  • 23-12-2021, 16:01:31
    #5
    petri adlı üyeden alıntı: mesajı görüntüle
    DB'deki fiyat tipini VARCHAR olarak belirtmişim, onu floata çevirip deneyeceğim
    başta bunu yapman hatalı zaten. double(x,2) || float(x,2) tipinde tutmalısın fiyatlarını hangisi varsa işte mysql kullanmayalı çok oldu
  • 23-12-2021, 16:11:25
    #6
    $fiyat = (int) $fiyat;
    $fiyat = (int)number_format($fiyat,2,"","");
    Bu şekilde bir dener misin
  • 23-12-2021, 18:40:13
    #7
    salihbey24 adlı üyeden alıntı: mesajı görüntüle
    $fiyat = (int) $fiyat;
    $fiyat = (int)number_format($fiyat,2,"","");
    Bu şekilde bir dener misin
    Denedim olmadı.
    Polat adlı üyeden alıntı: mesajı görüntüle
    başta bunu yapman hatalı zaten. double(x,2) || float(x,2) tipinde tutmalısın fiyatlarını hangisi varsa işte mysql kullanmayalı çok oldu
    $araToplam = (float)$araToplam;
         if ( $araToplam < 0 ) {
              $araToplam *= 10;
         }
         elseif ( $araToplam > 0 ) {
              $araToplam *= 100;
         }
         echo gettype($araToplam)."-> $araToplam";
         settype($araToplam, "integer");
         echo gettype($araToplam)."-> $araToplam";
    /* ÇIKTI:
    double -> 90
    float -> 90 */
    Hala hata veriyor, integer'a çevirmeden direk float gönderdim yine aynı.
  • 23-12-2021, 20:04:16
    #8
    Her sepete eklenmeden sonra SESSSION'a ödenecek tutar kaydedip parametreler içine sprintf ile işleyerek hatayı ortadan kaldırdım. Yardımcı olanlara teşekkürler