Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
berkansahin opened this issue Mar 27, 2024 · 5 comments
Closed

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

berkansahin opened this issue Mar 27, 2024 · 5 comments

Comments

@berkansahin
Copy link

berkansahin commented Mar 27, 2024

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
Copy link
Collaborator

Merhabalar, bildirim icin tesekkurler.

  1. VakifBankPos artik deprecated yeni versiyonda kaldirilacak. Yerine PayFlexV4Pos kullanmaniz gerekiyor. Sadece sinif ismini degistirmeniz yeterli.
  2. 'success1' => [
    'threeDResponseData' => [
    'MerchantId' => '000000000111111',
    'SubMerchantNo' => '0',
    'SubMerchantName' => null,
    'SubMerchantNumber' => null,
    'PurchAmount' => 100,
    'PurchCurrency' => '949',
    'VerifyEnrollmentRequestId' => 'order-id-123',
    'SessionInfo' => ['data' => 'sss'],
    'InstallmentCount' => null,
    'Pan' => '5555444433332222',
    'Expiry' => 'cv',
    'Xid' => 'xid0393i3kdkdlslsls',
    'Status' => 'Y',
    'Cavv' => 'AAABBBBBBBBBBBBBBBIIIIII=',
    'Eci' => '02',
    'ExpSign' => null,
    'ErrorCode' => null,
    'ErrorMessage' => null,
    ],
    'paymentData' => [
    'MerchantId' => '000000000111111',
    'TerminalNo' => 'VP999999',
    'TransactionType' => 'Sale',
    'TransactionId' => '20230309B838',
    'ResultCode' => '0000',
    'ResultDetail' => 'İŞLEM BAŞARILI',
    'CustomItems' => [],
    'InstallmentTable' => null,
    'CampaignResult' => null,
    'AuthCode' => '822641',
    'HostDate' => '20220404123456',
    'Rrn' => '209411062014',
    'CurrencyAmount' => 100,
    'CurrencyCode' => '949',
    'OrderId' => 'order-id-123',
    'TLAmount' => 100,
    'ECI' => '02',
    'ThreeDSecureType' => '2',
    'TransactionDeviceSource' => '0',
    'BatchNo' => '1',
    ],
    'expectedData' => [
    'cavv' => 'AAABBBBBBBBBBBBBBBIIIIII=',
    'md_status' => 'Y',
    'md_error_message' => null,
    'transaction_security' => null,
    'trans_id' => '20230309B838',
    'ref_ret_num' => '20230309B838',
    'proc_return_code' => '0000',
    'transaction_type' => 'pay',
    'eci' => '02',
    'auth_code' => '822641',
    'order_id' => 'order-id-123',
    'status' => 'approved',
    'status_detail' => 'İŞLEM BAŞARILI',
    'error_code' => null,
    'error_message' => null,
    ]
    ],

    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

$this->logger->log(LogLevel::DEBUG, 'mapping 3D payment data', [
burda bana $raw3DAuthResponseData ve $rawPaymentResponseData parametrelerin icerigi lazim.

@berkansahin
Copy link
Author

berkansahin commented 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

@nuryagdym
Copy link
Collaborator

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
Copy link
Author

berkansahin commented Mar 29, 2024

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

@berkansahin
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants