[GH-ISSUE #193] Vakıf Bank sanal pos ödeme durum kontrolü hatası #109

Closed
opened 2026-03-03 15:43:07 +03:00 by kerem · 5 comments
Owner

Originally created by @berkansahin on GitHub (Mar 27, 2024).
Original GitHub issue: https://github.com/mewebstudio/pos/issues/193

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ığı

Originally created by @berkansahin on GitHub (Mar 27, 2024). Original GitHub issue: https://github.com/mewebstudio/pos/issues/193 | 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 ```json { "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. ```php if ($request->get('status') == 'success' && is_null($request->get('ErrorCode'))) { ``` ### Beklenen Sonuç Ödemenin gerçekten başarılı olup olmadığı
kerem 2026-03-03 15:43:07 +03:00
Author
Owner

@nuryagdym commented on GitHub (Mar 27, 2024):

Merhabalar, bildirim icin tesekkurler.

  1. VakifBankPos artik deprecated yeni versiyonda kaldirilacak. Yerine PayFlexV4Pos kullanmaniz gerekiyor. Sadece sinif ismini degistirmeniz yeterli.
  2. github.com/mewebstudio/pos@af54536705/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 github.com/mewebstudio/pos@af54536705/src/DataMapper/ResponseDataMapper/PayFlexV4PosResponseDataMapper.php (L26) burda bana $raw3DAuthResponseData ve $rawPaymentResponseData parametrelerin icerigi lazim.

<!-- gh-comment-id:2023772295 --> @nuryagdym commented on GitHub (Mar 27, 2024): 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.
Author
Owner

@berkansahin commented on GitHub (Mar 29, 2024):

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

<!-- gh-comment-id:2027248756 --> @berkansahin commented on GitHub (Mar 29, 2024): 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. ```php 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; <img width="623" alt="Screenshot 2024-03-29 at 16 31 59" src="https://github.com/mewebstudio/pos/assets/4026967/f09168e4-11d2-4f06-9bd0-83222fcfbe7a">
Author
Owner

@nuryagdym commented on GitHub (Mar 29, 2024):

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.

<!-- gh-comment-id:2027297921 --> @nuryagdym commented on GitHub (Mar 29, 2024): 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.
Author
Owner

@berkansahin commented on GitHub (Mar 29, 2024):

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

<!-- gh-comment-id:2027654960 --> @berkansahin commented on GitHub (Mar 29, 2024): Tamamdır çok teşekkür ederim. Duruma göre bişey olursa tekrar dönüş yaparım mutlaka
Author
Owner

@berkansahin commented on GitHub (Jun 10, 2024):

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

<!-- gh-comment-id:2158412582 --> @berkansahin commented on GitHub (Jun 10, 2024): Buradaki durum düzeldi bilginize paket içindeki success fonksiyonunu kullanmam yetti
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/pos#109
No description provided.