PayU (Hindistan)
PayU India Hosted Checkout, kart, UPI, net banking ve cüzdanlar PayU'nun sayfasında; yalnız INR.
Gereken bilgiler
PayU Dashboard (onboarding.payu.in) → sol menüde Developer → API Keys sekmesi:
merchant_key: PayU'nun "Key" alanımerchant_salt: "Salt-32 bit" (Salt v1; v2 değil). Gizli tutulur, tarayıcıya hiç gönderilmez.
Panelinizde Ayarlar → Ödemeler → Yöntem ekle → PayU seçin, iki değeri girin.
Test ortamı: Dashboard'da menü çubuğundaki Test Mode anahtarını açın; Developer sayfasında test key/salt görünür. Bunları girip panelde sandbox (test) modu kutusunu işaretleyin; form test.payu.in/_payment adresine gönderilir. Canlıya geçerken canlı key/salt girip kutuyu kaldırın (secure.payu.in/_payment).
Dönüş adresi (surl ve furl) her ödemeye otomatik eklenir; PayU tarafında ayrıca bir ayar gerekmez. Adres kalıbı:
https://<panel-alan-adınız>/payments/payu/callback
İsteğe bağlı: PayU Dashboard → Webhooks'ta aynı adresi "Successful Payment / Failed Payment" olayları için sunucudan sunucuya bildirim adresi olarak da tanımlayabilirsiniz. Bildirim gövdesi tarayıcı dönüşüyle aynı biçim ve imzadadır; panel ikisini de aynı şekilde doğrular, aynı mihpayid iki kez yüklenmez.
Akış
- Müşteri tutarı ve telefon numarasını girer, PayU'yu seçer. (Telefon PayU'nun zorunlu alanıdır.)
- Panel
key,txnid(bizim ödeme referansımız),amount,productinfo,firstname,email,phone,surl,furlve sunucuda hesaplanan SHA-512hashalanlarıyla gizli bir form üretir; müşterinin tarayıcısı bu formu PayU'ya POST eder ve PayU'nun barındırdığı ödeme sayfası açılır. Kart/UPI bilgisi sizin sunucunuza hiç uğramaz. - Ödeme bitince PayU müşterinin tarayıcısını
surl/furladresine (ikisi de aynı callback)status,mihpayid,txnid,amountve tershashile POST eder. - Panel ters hash'i kendi salt'ıyla yeniden hesaplar (
salt|status||||||udf5…udf1|email|firstname|productinfo|amount|txnid|key; PayU ek ücret eklediyse başınaadditional_charges|). Hash tutmuyorsa,keybizim değilse ya datxnidbizim ödememiz değilse dönüş yok sayılır, bakiye yüklenmez. - Hash doğru ve
status = successise bakiye yüklenir; müşteri "Bakiye yükle" sayfasına başarı mesajıyla döner.failure'da ödeme "başarısız" olur, PayU'nunerror_Message'ı ödeme notuna yazılır.
Aynı mihpayid + durum için ikinci dönüş yok sayılır; bakiye iki kez yüklenmez.
Durumlar
success→ tamamlandı, bakiye yüklendi.pending→ panelde beklemede; bakiye yüklenmez. PayU sonradansuccessbildirirse (webhook ya da müşterinin geç dönüşü) o zaman yüklenir; gelmezse Admin → Ödemeler'den elle tamamlayabilirsiniz.unmappedstatususercancelled/bounced/droppedise beklemede değil başarısız sayılır.failure→ başarısız.
Para birimleri
Bu sürücü yalnız INR ile çalışır; yöntem para birimi INR değilse ödeme başlatılmaz. PayU'nun çoklu para birimi (transactionCurrency) özelliği ayrı bir sözleşme ister ve bu sürücüde yoktur.
Sınırlar
PayU txnid için 25 karakter, firstname için test ortamında 20 karakter, productinfo için 100 karakter kabul eder. Panel adı ve ürün metnini ASCII'ye indirir ve kısaltır; referans 25 karakteri aşarsa ödeme başlamadan hata verir.
Sık sorunlar
- "Hash mismatch" / PayU sayfası açılmıyor: Key ile salt aynı ortama (test/canlı) ait değil ya da Salt v2 girilmiş. Salt v1'i kullanın ve sandbox kutusunun ortamla eşleştiğinden emin olun.
- Dönüşte "invalid signature": Paneldeki salt, PayU'nun imzaladığı salt değil (yanlış değer, Salt v2 ya da test/canlı karışmış). Ödeme "bekliyor"da kalır, bakiye yüklenmez; salt'ı düzeltip müşteriden yeniden denemesini isteyin ya da PayU Dashboard'da gördükten sonra elle tamamlayın.
- Ödeme başarılı ama bakiye yok: Dönüş tarayıcıdan geldiği için müşteri sayfayı kapatmışsa panel sonucu görmemiş olabilir. PayU Dashboard'da webhook tanımlayın (yukarıdaki adres) ki PayU sonucu sunucudan sunucuya da bildirsin; o zamana kadar PayU Dashboard'da
mihpayid'yi doğrulayıp ödemeyi Admin → Ödemeler'den tamamlayın. - Telefon istiyor: PayU
phonealanını zorunlu tutar; müşteri numara girmeden bu yöntemle ödeme yapamaz.
FollowerHQ