pos
pos copied to clipboard
QNB Finans bank Hash Mismatch! hatası
Information | Description |
---|---|
Kütüphane versiyonu | 0.16.0 |
PHP versiyonu | 8.2 |
Gateway ismi | payforpos |
Banka ismi | qnb finans bank |
Hatanın özeti
Hash Mismatch! hatası almaya başladım. Eski versiyon kullanıldığı için sorun olmuyordu. Şu an güncel versiyonda bu blog değişmiş bu sebeple burada sorun olduğunu düşünüyorum.
eski hata almadığım blok
public function make3DPayment(Request $request)
{
$request = $request->request;
$bankResponse = null;
//if customer 3d verification passed finish payment
if ($this->check3DHash($this->account, $request->all()) && '1' === $request->get('3DStatus')) {
//valid ProcReturnCode is V033 in case of success 3D Authentication
$contents = $this->create3DPaymentXML($request->all());
$bankResponse = $this->send($contents);
} else {
$this->logger->log(LogLevel::ERROR, '3d auth fail', ['md_status' => $request->get('3DStatus')]);
}
$this->response = $this->map3DPaymentData($request->all(), $bankResponse);
return $this;
}
güncel hatalı blok
public function make3DPayment(Request $request)
{
$request = $request->request;
$bankResponse = null;
if (!$this->requestDataMapper->getCrypt()->check3DHash($this->account, $request->all())) {
throw new HashMismatchException();
}
//if customer 3d verification passed finish payment
if ('1' === $request->get('3DStatus')) {
//valid ProcReturnCode is V033 in case of success 3D Authentication
$contents = $this->create3DPaymentXML($request->all());
$bankResponse = $this->send($contents);
} else {
$this->logger->log(LogLevel::ERROR, '3d auth fail', ['md_status' => $request->get('3DStatus')]);
}
$this->response = $this->responseDataMapper->map3DPaymentData($request->all(), $bankResponse);
return $this;
}
Merhaba, kod refactor edildi, ama hash hesaplama algoritmasi degismedi. Eskiden hash degerler eslesmediginde odemeyi tamamlamiyorduk, $this->response'de odeme basariz oldugunu belirtiyorduk. Son yapilan degisimlerle ise exception firlatiyoruz, bu da odeme basarisiz olmadigi anlamina geliyor.
Su an test ortamda test ettigimde sorunsuz calisiyor.
Test ortamda calisip prod ortamda calismiyorsa buyuk ihtimalle sizde kodda bir sorun vardir.
burdaki hash data verileri dogru oldugunu kontrol ediniz, ozellikle $account
verileri:
https://github.com/mewebstudio/pos/blob/af545367050b091d604cce92365c9be91f13dd1f/src/Crypt/PayForPosCrypt.php#L39-L48
Merhaba, kod refactor edildi, ama hash hesaplama algoritmasi degismedi. Su an test ortamda test ettigimde sorunsuz calisiyor.
Test ortamda calisip prod ortamda calismiyorsa buyuk ihtimalle sizde kodda bir sorun vardir.
burdaki hash data verileri dogru oldugunu kontrol ediniz, ozellikle
$account
verileri:https://github.com/mewebstudio/pos/blob/af545367050b091d604cce92365c9be91f13dd1f/src/Crypt/PayForPosCrypt.php#L39-L48
Selam,
Sorunun kaynağını buldum. Aslında burada hash kontrolü yapmandan önce gelen mesajı görmemiz gerekiyor çünkü gelen mesajı yazdırdığımda: "bu sipariş numarası ile daha önce kayıt vardır" uyarısı aldım. Hash mantığımız doğru fakat bankalar onun öncesinde hata da iletiyorlar.
Destek için teşekkürler @nuryagdym
@sekizlipenguen ornek response'u paylasir misiniz, ona gore guncellerim belki
Tabiii örnek tekrar oluşturdum. @nuryagdym
Şu ikisi ile kontrol yapılabilir gibi duruyor.
"ErrMsg" => "Verilen sipariş no önceden kullanılmıştır."
"ProcReturnCode" => "101310"
uzun hali
array:120 [▼ // vendor/mews/pos/src/Gateways/PayForPos.php:48
"RequestGuid" => "0"
"TransactionDate" => "01.03.2024 13:22:05"
"MbrId" => "5"
"MerchantID" => "guvenliksebebi-ile-gizlendi"
"OrderId" => "guvenliksebebi-ile-gizlendi"
"RequestIp" => ""
"RequestStat" => "1,5"
"SecureType" => "3DModel"
"PurchAmount" => "374.99"
"Exponent" => ""
"Currency" => "guvenliksebebi-ile-gizlendi"
"Description" => ""
"OkUrl" => "guvenliksebebi-ile-gizlendi"
"FailUrl" => "guvenliksebebi-ile-gizlendi"
"PayerTxnId" => ""
"PayerAuthenticationCode" => ""
"Eci" => ""
"MD" => ""
"Hash" => "guvenliksebebi-ile-gizlendi+Zh/tuY="
"TerminalID" => ""
"TxnType" => "Auth"
"OrgOrderId" => ""
"SubMerchantCode" => ""
"recur_frequency" => ""
"recur_expiry" => ""
"CardType" => ""
"Lang" => "TR"
"BonusAmount" => ""
"InstallmentCount" => "0"
"Rnd" => "guvenliksebebi-ile-gizlendi"
"AlphaCode" => ""
"Ecommerce" => "1"
"MrcCountryCode" => ""
"MrcName" => ""
"MerchantHomeUrl" => ""
"CardHolderName" => "guvenliksebebi-ile-gizlendi guvenliksebebi-ile-gizlendi"
"IrcDet" => ""
"IrcCode" => ""
"Version" => ""
"TxnStatus" => ""
"CavvAlg" => ""
"ParesVerified" => ""
"ParesSyntaxOk" => ""
"ErrMsg" => "Verilen sipariş no önceden kullanılmıştır."
"VendorDet" => ""
"D3Stat" => ""
"3DStatus" => "-1"
"TxnResult" => ""
"AuthCode" => ""
"HostRefNum" => ""
"ProcReturnCode" => "101310"
"ReturnUrl" => "guvenliksebebi-ile-gizlendi"
"ErrorData" => ""
"BatchNo" => "0"
"VoidDate" => ""
"CardMask" => ""
"ReqId" => "0"
"UsedPoint" => "0"
"SrcType" => "VPO"
"RefundedAmount" => "0"
"RefundedPoint" => "0"
"ReqDate" => "0"
"SysDate" => "0"
"F11" => "0"
"F37" => ""
"RRN" => ""
"IsRepeatTxn" => ""
"CavvResult" => ""
"VposElapsedTime" => "0"
"BankingElapsedTime" => "0"
"SocketElapsedTime" => "0"
"HsmElapsedTime" => "0"
"MpiElapsedTime" => "0"
"hasOrderId" => "False"
"TemplateType" => "0"
"HasAddressCount" => "False"
"IsPaymentFacilitator" => "False"
"MerchantCountryCode" => ""
"OrgTxnType" => ""
"F11_ORG" => "0"
"F12_ORG" => "0"
"F13_ORG" => ""
"F22_ORG" => "0"
"F25_ORG" => "0"
"MTI_ORG" => "0"
"DsBrand" => ""
"IntervalType" => "0"
"IntervalDuration" => "0"
"RepeatCount" => "0"
"CustomerCode" => ""
"RequestMerchantDomain" => ""
"RequestClientIp" => "guvenliksebebi-ile-gizlendi"
"ResponseRnd" => "guvenliksebebi-ile-gizlendi"
"ResponseHash" => "guvenliksebebi-ile-gizlendi="
"BankInternalResponseCode" => ""
"BankInternalResponseMessage" => ""
"BankInternalResponseSubcode" => ""
"BankInternalResponseSubmessage" => ""
"BayiKodu" => ""
"VoidTime" => "0"
"VoidUserCode" => ""
"PaymentLinkId" => "0"
"ClientId" => ""
"IsQRValid" => ""
"IsFastValid" => ""
"IsQR" => ""
"IsFast" => ""
"QRRefNo" => ""
"FASTGonderenKatilimciKodu" => ""
"FASTAlanKatilimciKodu" => ""
"FASTReferansNo" => ""
"FastGonderenIBAN" => ""
"FASTGonderenAdi" => ""
"MobileECI" => ""
"HubConnId" => ""
"WalletData" => ""
"Tds2dsTransId" => ""
"Is3DHost" => ""
"ArtiTaksit" => "0"
"AuthId" => ""
]
tmm tesekkurler, zaman bulunca ilgilenirim
v1.0.0 versiyonda, once 3D/MD statusu kontrole ediyoruz, sonra hash kontrolu yapiyoruz. Bu sekilde artik hatali HashMismatchException'i firlatmamasi gerekiyor