Öncelikle geçmiş olsun.

Sanal pos entegrasyonunuzda bir sıkıntı var belli ki.

Bankaya gönderilen veriler açık seçik yazar form verisinde ve kaynakta. Tutar da buna dahildir, ne kadar çekileceği bankaya gönderilir. Kişi de atıyorum Chrome ile incele yapıp bu tutar üzerinde oynama yapabilir ve yine atıyorum 1500 TL olan bir çekilecek tutar post verisini 8 TL olarak değiştirip formu post eder ve 3d ödeme sayfasına 8TL çekilecek şekilde gidilir.

Kısaca banka sisteminde değil sizdeki entegrasyonda sorun var.

Banka kaç çek derseniz onu çeker velhasıl kelam burada sıkıntılı olan kısım, ödeme gerçekleştikten sonra return url adresinize dönüş yapıldığında kontrol eksiğiniz olmasıdır.

Burada yalnızca $_POST[response] == "SUCCESS" şeklinde bir kontrol yeterli değildir. Akabinde, tutar ve hash kontrolü de yapmalısınız.

Kullanıcı ödemeyi yapıp returnurl ye döndüğünde satın alınan ürün veya kullanıcıyı ödeme sayfasına göndermeden önce kaydı alınmış meta bilgisindeki tutar ve hash kodları karşılaştırılırsa herhangi bir açık kalmaz. Böylece adam 0.1 tl dahi yapsa geri dönüşte siz satın alının ürünün gerçek fiyatını tekrardan veritabanından çekip bankanın size döndürdüğü hash kodu ile karşılaştırırsanız, hash kodu içerisinde ürün fiyatı da olduğundan ortada bir hata olduğu anlaşılır

Bunun önünde geçmenin bir yöntemi de yani en azından lamer arkadaşlar için işe yarayacak bir diğer yöntem de 3d pos form verisini sıkıştırılmış kaynaklı bir javascript dosyası ile tıklandığında ajax kullanarak dinamik oluşturmak ve öyle post etmektir.

Herhangi bir bankanın 3d ödeme sayfasında sıkıntı olsa kıyamet kopar hocam o düşük bir ihtimal Sisteminizi iyi inceleyin. Eğer herkese dağıtılan veya satılan wordpress için opencart için bir 3d modülü kullanıyorsanız onun açığı bulunmuş veya yayılmış olabilir kendinize özel bir entegrasyon yaptırın.

Ek olarak hesapladığınız hash kodu içerisinde mutlaka size özel bir şifre gibi bir şey olsun hep şayet bankanın sistemi bununla uyumlu ise. Formdaki tüm verilerden hesapladığınız hashin sonuna 124xx231! şeklinde kendi şifrenizi ekleyin böylece programlama bilgisi olan birisinin form verisine bakarak hash hesaplayabilme ihtimalinin önüne geçmiş olursunuz.

Son olarak da siparişi onaylamadan önce her zaman pos panelinden veya hesaptan para gerçekten gelmiş mi diye kontrol etmek en basit çözümdür