[GH-ISSUE #169] Ziraat (EST) POS "Hash Mismatch !" Exception Hk. #90

Closed
opened 2026-03-03 15:42:53 +03:00 by kerem · 7 comments
Owner

Originally created by @FikretCin on GitHub (Dec 11, 2023).
Original GitHub issue: https://github.com/mewebstudio/pos/issues/169

EstV3POS'ta sadece Ziraat kullanırken karşılaşılan bir durum söz konusu. Gateway gayet sağlıklı çalışıyor ödemeleri alıyorken nedenini bilmediğimiz bir şekilde sıkça Hash Mismatch exceptionuna takılıyor. Aşağıda ilettiğim örnekte mdStatus, mdErrorMsg, ProcReturnCode, Response gibi işlemin başarılı olma durumunu kontrol eden tüm parametreler olumlu olmasına rağmen işlem gerçekleşmiyor.

"TranType": "Auth",
"mdErrorMsg": "Success",
"Email": "@.com",
"clientid": "190779401",
"Ecom_Payment_Card_ExpDate_Year": "",
"ErrMsg": "",
"Ecom_Payment_Card_ExpDate_Month": "
",
"failUrl": "https:///34444/",
"eci": "02",
"oid": "34444",
"ProcReturnCode": "00",
"merchantName": "
",
"EXTRA_KAZANILANPUAN": "000000000000",
"xid": "QXHP5xn1YbqwEgrqN7QcMCRnbf4=",
"md": "534981:0ACFEF361050442AF716059AFB4C8C2CFBC9CDF1328B3806BC90DE46FA5DE5DD:4221:##190779401",
"EXTRA_KULLANILABILIRPUAN": "000000000027",
"EXTRA_CARDHOLDERNAME": "AD* ŞE*",
"MaskedPan": "5349813855",
"callbackUrl": "https://
/34444/",
"currency": "949",
"callbackCall": "true",
"lang": "tr",
"TransId": "23345OVZD19023939",
"EXTRA_CARDISSUER": "ZİRAAT BANKASI",
"EXTRA_KULLANILANPUAN": "000000000000",
"HostRefNum": "334514704016",
"amount": "1",
"maskedCreditCard": "5349 81
**** 3855",
"AuthCode": "433766",
"dsId": "2",
"mdStatus": "1",
"EXTRA_CARDBRAND": "MASTERCARD",
"rnd": "w995JfTZOAnZEJlvkcg3",
"encoding": "UTF-8",
"ReturnOid": "34444",
"HASH": "UfhgMdF8jjQA8fnU96vQSFkI+PmvbMrU2QiJ/mKQu5laq/PTOJyFR4655MVb/T76ZPOmPmubli4X1V3FYfgHKg==",
"Response": "Approved",
"cavv": "ABIBAVEAAP/DAAABAAAAAAAAAAA=",
"acqStan": "704016",
"EXTRA_TRXDATE": "20231211 14:21:25",
"storetype": "3d_pay",
"clientIp": ".237.164.",
"SettleId": "112",
"taksit": "",
"okUrl": "https://**/34444/",
"hashAlgorithm": "ver3",
"firmaadi": "
***",
"NATIONALIDNO": ""

Not : Veriler **** ile gizlenmiştir ihtiyaç duyulması halinde özelden iletebilirim

Originally created by @FikretCin on GitHub (Dec 11, 2023). Original GitHub issue: https://github.com/mewebstudio/pos/issues/169 EstV3POS'ta sadece Ziraat kullanırken karşılaşılan bir durum söz konusu. Gateway gayet sağlıklı çalışıyor ödemeleri alıyorken nedenini bilmediğimiz bir şekilde sıkça Hash Mismatch exceptionuna takılıyor. Aşağıda ilettiğim örnekte mdStatus, mdErrorMsg, ProcReturnCode, Response gibi işlemin başarılı olma durumunu kontrol eden tüm parametreler olumlu olmasına rağmen işlem gerçekleşmiyor. "TranType": "Auth", "mdErrorMsg": "Success", "Email": "****@****.com", "clientid": "190779401", "Ecom_Payment_Card_ExpDate_Year": "**", "ErrMsg": "", "Ecom_Payment_Card_ExpDate_Month": "**", "failUrl": "https://*****/34444/", "eci": "02", "oid": "34444", "ProcReturnCode": "00", "merchantName": "*****", "EXTRA_KAZANILANPUAN": "000000000000", "xid": "QXHP5xn1YbqwEgrqN7QcMCRnbf4=", "md": "534981:0ACFEF361050442AF716059AFB4C8C2CFBC9CDF1328B3806BC90DE46FA5DE5DD:4221:##190779401", "EXTRA_KULLANILABILIRPUAN": "000000000027", "EXTRA_CARDHOLDERNAME": "AD* ŞE*", "MaskedPan": "534981***3855", "callbackUrl": "https://*****/34444/", "currency": "949", "callbackCall": "true", "lang": "tr", "TransId": "23345OVZD19023939", "EXTRA_CARDISSUER": "ZİRAAT BANKASI", "EXTRA_KULLANILANPUAN": "000000000000", "HostRefNum": "334514704016", "amount": "1", "maskedCreditCard": "5349 81** **** 3855", "AuthCode": "433766", "dsId": "2", "mdStatus": "1", "EXTRA_CARDBRAND": "MASTERCARD", "rnd": "w995JfTZOAnZEJlvkcg3", "encoding": "UTF-8", "ReturnOid": "34444", "HASH": "UfhgMdF8jjQA8fnU96vQSFkI+PmvbMrU2QiJ/mKQu5laq/PTOJyFR4655MVb/T76ZPOmPmubli4X1V3FYfgHKg==", "Response": "Approved", "cavv": "ABIBAVEAAP/DAAABAAAAAAAAAAA=", "acqStan": "704016", "EXTRA_TRXDATE": "20231211 14:21:25", "storetype": "3d_pay", "clientIp": "***.237.164.***", "SettleId": "112", "taksit": "", "okUrl": "https://*****/34444/", "hashAlgorithm": "ver3", "firmaadi": "*** ***", "NATIONALIDNO": "" Not : Veriler **** ile gizlenmiştir ihtiyaç duyulması halinde özelden iletebilirim
kerem 2026-03-03 15:42:53 +03:00
Author
Owner

@nuryagdym commented on GitHub (Dec 11, 2023):

Gecende biri bununla ilgili issue acmisti, orda kendisi kodda kutuphane kodu calismadan bankadan gelen POST degerleri guncelliyormus.
Boyle bir durum yok ise
github.com/mewebstudio/pos@f2640ff7b2/src/Crypt/EstV3PosCrypt.php (L21) burdaki kodu ayni bankanin ornek kodlardaki olacak sekilde guncelleyip denenmesi gerekiyor.

Ben bankadan kopyalarken hash hesaplama algorithmasina iyilestirme yaptim diye hatirliyorum, o yuzden bankanin verdigi ornek ile ayni sekilde guncellenip denenmesi gerekiyor

<!-- gh-comment-id:1850150544 --> @nuryagdym commented on GitHub (Dec 11, 2023): Gecende biri bununla ilgili issue acmisti, orda kendisi kodda kutuphane kodu calismadan bankadan gelen POST degerleri guncelliyormus. Boyle bir durum yok ise https://github.com/mewebstudio/pos/blob/f2640ff7b2a6abca47b783bffd75d7b331e4e794/src/Crypt/EstV3PosCrypt.php#L21 burdaki kodu ayni bankanin ornek kodlardaki olacak sekilde guncelleyip denenmesi gerekiyor. Ben bankadan kopyalarken hash hesaplama algorithmasina iyilestirme yaptim diye hatirliyorum, o yuzden bankanin verdigi ornek ile ayni sekilde guncellenip denenmesi gerekiyor
Author
Owner

@FikretCin commented on GitHub (Dec 12, 2023):

Payten ile iletişime geçtim, ilettikleri hash string için gerekli parametrelerin dışında bir kaç tane daha fazladan post_data içerisinde key göndermekteler. Örneğin "NATIONALIDNO": "" parametresi hash içerisine dahil edilmemesi gereken bir parametreymiş bunun yanı sıra bazı isteklerde "EXTRA_TAKSITTUTARI_1:"000000000025" gibi veriler geliyor Ziraat tarafından bu nedenle ksort yapılmadan önce arrayden gereksiz parametrelerin temizlenmesi gerekiyor.

Issueya örnek olarak eklediğim istek için "NATIONALIDNO": "" parametresini kaldırarak doğru sonuca ulaşabildim.

Payten tarafındna iletilen hash sıralaması aşağıdaki gibidir.

'acqStan',
'amount',
'AuthCode',
'callbackCall',
'callbackUrl',
'cavv',
'clientid',
'clientIp',
'currency',
'dsId',
'eci',
'Ecom_Payment_Card_ExpDate_Month',
'Ecom_Payment_Card_ExpDate_Year',
'Email',
'ErrMsg',
'EXTRA_CARDBRAND',
'EXTRA_CARDHOLDERNAME',
'EXTRA_CARDISSUER',
'EXTRA_KAZANILANPUAN',
'EXTRA_KULLANILABILIRPUAN',
'EXTRA_KULLANILANPUAN',
'EXTRA_TRXDATE',
'failUrl',
'firmaadi',
'hashAlgorithm',
'HostRefNum',
'lang',
'maskedCreditCard',
'MaskedPan',
'md',
'mdErrorMsg',
'mdStatus',
'merchantName',
'oid',
'okUrl',
'ProcReturnCode',
'Response',
'ReturnOid',
'rnd',
'SettleId',
'storetype',
'taksit',
'TransId',
'TranType',
'xid',

Edit : EXTRA_TAKSITTUTARI_X parametreleri body içerisinde ise hashe dahilmiş, sadece NATIONALIDNO parametresini unset etmemiz yeterli oldu.

<!-- gh-comment-id:1851451330 --> @FikretCin commented on GitHub (Dec 12, 2023): Payten ile iletişime geçtim, ilettikleri hash string için gerekli parametrelerin dışında bir kaç tane daha fazladan post_data içerisinde key göndermekteler. Örneğin `"NATIONALIDNO": ""` parametresi hash içerisine dahil edilmemesi gereken bir parametreymiş bunun yanı sıra bazı isteklerde `"EXTRA_TAKSITTUTARI_1:"000000000025"` gibi veriler geliyor Ziraat tarafından bu nedenle ksort yapılmadan önce arrayden gereksiz parametrelerin temizlenmesi gerekiyor. Issueya örnek olarak eklediğim istek için `"NATIONALIDNO": ""` parametresini kaldırarak doğru sonuca ulaşabildim. Payten tarafındna iletilen hash sıralaması aşağıdaki gibidir. 'acqStan', 'amount', 'AuthCode', 'callbackCall', 'callbackUrl', 'cavv', 'clientid', 'clientIp', 'currency', 'dsId', 'eci', 'Ecom_Payment_Card_ExpDate_Month', 'Ecom_Payment_Card_ExpDate_Year', 'Email', 'ErrMsg', 'EXTRA_CARDBRAND', 'EXTRA_CARDHOLDERNAME', 'EXTRA_CARDISSUER', 'EXTRA_KAZANILANPUAN', 'EXTRA_KULLANILABILIRPUAN', 'EXTRA_KULLANILANPUAN', 'EXTRA_TRXDATE', 'failUrl', 'firmaadi', 'hashAlgorithm', 'HostRefNum', 'lang', 'maskedCreditCard', 'MaskedPan', 'md', 'mdErrorMsg', 'mdStatus', 'merchantName', 'oid', 'okUrl', 'ProcReturnCode', 'Response', 'ReturnOid', 'rnd', 'SettleId', 'storetype', 'taksit', 'TransId', 'TranType', 'xid', Edit : EXTRA_TAKSITTUTARI_X parametreleri body içerisinde ise hashe dahilmiş, sadece NATIONALIDNO parametresini unset etmemiz yeterli oldu.
Author
Owner

@nuryagdym commented on GitHub (Dec 12, 2023):

o zaman cozum olarak hash hesaplamadan once

  • EXTRA_TAKSITTUTARI_x
  • NATIONALIDNO
    parametreleri POST verisinden cikariyoruz, sonra hesapliyoruz, dogru mu anladim?
<!-- gh-comment-id:1851482032 --> @nuryagdym commented on GitHub (Dec 12, 2023): o zaman cozum olarak hash hesaplamadan once - EXTRA_TAKSITTUTARI_x - NATIONALIDNO parametreleri POST verisinden cikariyoruz, sonra hesapliyoruz, dogru mu anladim?
Author
Owner

@FikretCin commented on GitHub (Dec 12, 2023):

Sadece NATIONALIDNO parametresini çıkartmamız yeterli olacak anladığım kadarıyla testlerim ve iletişimim devam etmekte, farklı bir durumda sizi tekrar bilgilendireceğim.

<!-- gh-comment-id:1851486433 --> @FikretCin commented on GitHub (Dec 12, 2023): Sadece NATIONALIDNO parametresini çıkartmamız yeterli olacak anladığım kadarıyla testlerim ve iletişimim devam etmekte, farklı bir durumda sizi tekrar bilgilendireceğim.
Author
Owner

@FikretCin commented on GitHub (Dec 12, 2023):

github.com/mewebstudio/pos@f2640ff7b2/src/Crypt/EstV3PosCrypt.php (L26)

Kod satırındaki hashe dahil edilmemesi gerekenler arrayini ['hash', 'encoding', 'nationalidno'] olarak güncelledik.

Canlıda bir çok ödeme geçerek işlemi test ettik. Tüm işlemler başarılı oldu. Parametrenin paket içerisine eklenmesi için dilerseniz PR çalışmasıda yapabilirim.

<!-- gh-comment-id:1851686225 --> @FikretCin commented on GitHub (Dec 12, 2023): https://github.com/mewebstudio/pos/blob/f2640ff7b2a6abca47b783bffd75d7b331e4e794/src/Crypt/EstV3PosCrypt.php#L26 Kod satırındaki hashe dahil edilmemesi gerekenler arrayini `['hash', 'encoding', 'nationalidno']` olarak güncelledik. Canlıda bir çok ödeme geçerek işlemi test ettik. Tüm işlemler başarılı oldu. Parametrenin paket içerisine eklenmesi için dilerseniz PR çalışmasıda yapabilirim.
Author
Owner

@nuryagdym commented on GitHub (Dec 12, 2023):

PR guzel olur, ama bir kac ricam olacak:

  • unit test ile bu durumun test edilmesi, yani NATIONALIDNO iceren bir data verilecek testte
  • 26 satir uzerine neden nationalidno'nun filtreledigimiz yorum olarak aciklanmasi
<!-- gh-comment-id:1851753583 --> @nuryagdym commented on GitHub (Dec 12, 2023): PR guzel olur, ama bir kac ricam olacak: - unit test ile bu durumun test edilmesi, yani NATIONALIDNO iceren bir data verilecek testte - 26 satir uzerine neden nationalidno'nun filtreledigimiz yorum olarak aciklanmasi
Author
Owner

@nuryagdym commented on GitHub (Dec 14, 2023):

v0.16.1 'de yayina alindi

<!-- gh-comment-id:1855343160 --> @nuryagdym commented on GitHub (Dec 14, 2023): v0.16.1 'de yayina alindi
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#90
No description provided.