mewebstudio / pos

Türk bankaları için sanal pos paketi (PHP)
Other
255 stars 101 forks source link

Vakıf Bank sanal pos ödeme durum kontrolü hatası #193

Closed berkansahin closed 3 months ago

berkansahin commented 5 months ago
Information Description
Kütüphane versiyonu 0.16.1
PHP versiyonu 8.2
Gateway ismi vakifbank
Banka ismi Vakıf Bank

Hatanın özeti

Vakıf Bankta 3D ödeme işlemi geçiriyorum ancak bir kullanıcımda limit yetersiz olduğunda işlem başarılı olarak kabul edip kod devam etti.

Bağımsız kod veya hatayı yeniden oluşturmanın bir yolu

Gelen response için bir örnek

{
  "MerchantId": "XXX",
  "Pan": "XXX",
  "Expiry": "XXXX",
  "PurchAmount": "856100",
  "PurchCurrency": "949",
  "VerifyEnrollmentRequestId": "XXXXX",
  "Xid": "XXXX",
  "SessionInfo": null,
  "Status": "Y",
  "Cavv": "XXX=",
  "Eci": "02",
  "ExpSign": null,
  "InstallmentCount": null,
  "SubMerchantNo": null,
  "SubMerchantName": null,
  "SubMerchantNumber": null,
  "ErrorCode": null,
  "ErrorMessage": null,
  "status": "success"
}

Kod kısmında başarılıyı anlamak için bunu yapıyoruz.

if ($request->get('status') == 'success' && is_null($request->get('ErrorCode'))) {

Beklenen Sonuç

Ödemenin gerçekten başarılı olup olmadığı

nuryagdym commented 5 months ago

Merhabalar, bildirim icin tesekkurler.

  1. VakifBankPos artik deprecated yeni versiyonda kaldirilacak. Yerine PayFlexV4Pos kullanmaniz gerekiyor. Sadece sinif ismini degistirmeniz yeterli.
  2. https://github.com/mewebstudio/pos/blob/af545367050b091d604cce92365c9be91f13dd1f/tests/DataMapper/ResponseDataMapper/PayFlexV4PosResponseDataMapperTest.php#L461-L521 bu teste gore (kod biraz karisik o yuzden kodu anlatmaya calismayayim) islemin basarili olmasi icin
    1. $request icinde gelen veride, yani 3D otorizasyon onayi sonucunda gelen veride, "Status" => "Y" olmasi gerekiyor.
    2. ve 3D basarili ise provizyon islemi yapiyoruz, provizyon sonucunda bankadan gelen responseda 'ResultCode' => '0000' degeri olmasi gerekiyor.
  3. Sizin if ($request->get('status') == 'success' && is_null($request->get('ErrorCode'))) { ile kontrol ettiginiz durum sadece 3D otorizasyon islemin basarili olup olmadigini kontrol eder, ki kart limiti yetersiz oldugu durumda 3D otorizasyon basarili olur ve provizyon sorgusu basarisiz olur diye dushunuyorum.

Durum tam olarak anlayabilmem acidan https://github.com/mewebstudio/pos/blob/af545367050b091d604cce92365c9be91f13dd1f/src/DataMapper/ResponseDataMapper/PayFlexV4PosResponseDataMapper.php#L26 burda bana $raw3DAuthResponseData ve $rawPaymentResponseData parametrelerin icerigi lazim.

berkansahin commented 5 months ago

Merhabalar,

Öncelikle cevabınız için teşekkür ederim @nuryagdym

Evet dediğiniz gibi limit yetersiz olduğunda başarısız oldu işlem. Gateway olarak vakifbank-cp olarak anahtarı değiştirdim test ortamında testi bitirmeye çalışıyorum ancak 3D sayfasını geçtikten sonra callback url kısmına gelmeden aşağıdaki urllede takılıp kalıyor. Test ortamına özel bir durum mu live bilgiler ile sizce bir deneme yapmam mantıklı olur mu ?

Koşuluda dediğiniz gibi değiştirdim.

if ($request->get('status') == 'Y' && is_null($request->get('ErrorCode')) && $request->get('ResultCode') == '0000') {

Takılan url : https://cptest.vakifbank.com.tr/CommonPayment/SecurePayment/PaymentReview

3D sayfası örneği;

Screenshot 2024-03-29 at 16 31 59
nuryagdym commented 5 months ago

Merhabalar,

Kodu degistirmeden de kart limit yetersiz oldugunda kutuphane basarisiz olarak donus yapmasi gerekiyor.

Bazi Gatewaylerin test ortami stabil degil, canli ortamda denemekte fayda var, belki kartinizi verdigi bankanin telefon uygulamasindan online alisveris limitinizi az bir miktar belirleyip deneme yapabilirsiniz.

Dedigim gibi, kart limiti yetersiz oldugunda kutuphane basarili donuyorsa, dedigim verilerin icerigi lazim olacak.

berkansahin commented 5 months ago

Tamamdır çok teşekkür ederim. Duruma göre bişey olursa tekrar dönüş yaparım mutlaka

berkansahin commented 3 months ago

Buradaki durum düzeldi bilginize paket içindeki success fonksiyonunu kullanmam yetti