Closed fetullahyldz closed 2 years ago
Merhaba, Debug ederek işlem nerede kalıyor ve oradaki cevap ne dönüyor bakmanız gerek.
O kısmı çözdüm nopcommercede farklı olduğu için farklı şekilde çözdüm 3d ekranı açıldı telefona kod geldi ve calbackurl sayfasına düştü ancak orda bir hata aldım forum üzerinden gelen verileri nasıl decrypt etmem gerekiyor.
bu arada sorunu aşağıdaki gibi çözdüm
Dictionary<string, string> httpParameters = new Dictionary<string, string>();
httpParameters.Add("xmldata", requestXml);
var content = new FormUrlEncodedContent(httpParameters);
var response = httpClient.PostAsync(_ThreeDPaymentPaymentSettings.VerifyUrl, content);
string responseContent = response.Result.Content.ReadAsStringAsync().Result;
Callback(IFormCollection form) burda gelen forum değeri aşağıdaki gibi atıyorum ama orda hata veriyor.
var order = _orderService.GetOrderById(Convert.ToInt32(form["Xid"]));
Callback Bu şekilde geri dönüş sayfası bankadan forum ile değerler geliyor ancak form["xid"]; buda hata veriyor. ben bunu nopcommerce için entegre ediyorum yardımcı olursanız sevinirim
public IActionResult Callback(IFormCollection form) { var OrderId = form["xid"]; var order = _orderService.GetOrderById(Convert.ToInt32(Decrypt(OrderId)));
var GetForum = form;
VerifyGatewayResult verifyResult = VerifyGateway(GetForum);
verifyResult.OrderNumber = order.OrderGuid.ToString();
if (verifyResult.Success)
{
order.AuthorizationTransactionId = form["posnetResponse"];
order.PaymentStatusId = 30;
order.OrderStatusId = 20;
_orderService.UpdateOrder(order);
return RedirectToRoute("CheckoutCompleted", new { orderId = order });
}
PosErrorModel model = new PosErrorModel();
var toostds = form["posnetResponse"];
string str = form["txnStatus"];
model.StrRespText = toostds;
model.StrtdsStatus = str;
return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
}
Sorunu Çözdüm Sonunda ama bu sefer bir hata var bankadan dönen hata aşağıdaki gibi bankaya yazdım
"<?xml version='1.0' encoding='iso-8859-9'?>
Sorunun çözümü ile ilgili yapmamız gerektiğini düşündüğün bir düzeltme varsa pull request gönderebilirsin veya burada bahsedip benim de değişikliği yapmama destek olabilirsin.
Merhaba VerifyGateway kısmında eksik parametre var mac bilgisi istiyorlar şifreli aşağıdaki gibi herşey çalıştı ancak bir sorun var bankaya ödeme düşmüyor. bankaya gönderdim kodyapısını inceliyorlar ama kendilerinde sorun var gibi halen dönüş yapmadılar.
string firstHash = HASH(encKey + ';' + terminalId); string MAC = HASH(xid + ';' + amount + ';' + currency + ';' + merchantId + ';' + firstHash);
string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<posnetRequest>
<mid>{merchantId}</mid>
<tid>{terminalId}</tid>
<oosResolveMerchantData>
<bankData>{form["BankPacket"]}</bankData>
<merchantData>{form["MerchantPacket"]}</merchantData>
<sign>{form["Sign"]}</sign>
<mac>{MAC}</mac>
</oosResolveMerchantData>
</posnetRequest>";
Burdada Bankadan Dönen Değerler aşağıdaki gibi
"<?xml version='1.0' encoding='iso-8859-9'?>
"<?xml version='1.0' encoding='iso-8859-9'?><posnetResponse><approved>1</approved><respCode /><respText /><oosResolveMerchantDataResponse><amount>204</amount><currency>TL</currency><installment>00</installment><xid>wwwwwwwwwwwwwwwwww54</xid><point>0</point><pointAmount>0</pointAmount><txStatus>Y</txStatus><mdStatus>1</mdStatus><mdErrorMessage>Authenticated</mdErrorMessage><mac>sFW7mgE6NFaUJjxPUN7N5odGw98+oXH/JjOyleRX7us=</mac></oosResolveMerchantDataResponse></posnetResponse>"
https://www.yapikredipos.com.tr/_assets/pdf/sanal-pos-entegrasyon-dokumanlari/POSNET-3D-Secure-Integration-Tr.pdf burdaki pdf te baktım herşey doğru ama en sonda 15 sayfada Finansallaştırma var orası sizin kod kısında yok bi bakarmısınız oraya
Sorunu çözdüm ve çalıştı bankaya ödeme düştü
ne gibi değişiklikler yaptınız?
Merhaba Müsait olunca Yazacağım Değişiklikleri
fetullahyldz finansallaşma sorununu nasıl çözdünüz ?
@sefacan
0E216Mac Doğrulama hatalı hatası şu sebepten olabiliyor.
Eğer çekilen tutar kuruşlu bir tutarsa, ve kuruşun sonu 0 ise, örneğin 1000,20 TL, bu hatayı alıyoruz. Eğer 1000,21 çekersen sorun olmuyor. API'dan dönen tutar değerini MAC hesabına eklerken bir sorun olabilir. İşlemin tüm API isteklerinde kullanılan/gönderilen tutar değerinin aynı olmadığı durumda bu yaşanabiliyor.
Belki birilerine yardımcı olur.
bende tam sayılı ödemelerde de aynı hatayı alıyorum.
ahmetkocadogan @.***>, 27 Haz 2022 Pzt, 10:50 tarihinde şunu yazdı:
@sefacan https://github.com/sefacan
0E216Mac Doğrulama hatalı hatası şu sebepten olabiliyor.
Eğer çekilen tutar kuruşlu bir tutarsa, ve kuruşun sonu 0 ise, örneğin 1000,20 TL, bu hatayı alıyoruz. Eğer 1000,21 çekersen sorun olmuyor. API'dan dönen tutar değerini MAC hesabına eklerken bir sorun olabilir. İşlemin tüm API isteklerinde kullanılan/gönderilen tutar değerinin aynı olmadığı durumda bu yaşanabiliyor.
Belki birilerine yardımcı olur.
— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1167005923, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5CMIHM2HHQXAA4P5QDVRFMLRANCNFSM4VZG5XUQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>
--
[image: metin, küçük resim içeren bir resim Açıklama otomatik olarak oluşturuldu]
Murat BİRER
Yönetim Bilişim Sistemleri Uzmanı
TANRIVERDI TEKSTIL SAN. VE PAZ. A.Ş. | Member Of Tanrıverdi Holding A.Ş.
Mobil: +90 546 599 02 10 | Ofis: 444 7 134 | Fax: +90 212 514 81 67
Etiler Mahallesi, Etiler Sok. No:2 34337 Beşiktaş, İSTANBUL
http://verdihome.com/ | https://tanriverdi.com/
[image: signature_4287678944]
Bu mesajı yazdırmadan önce çevreye olan sorumluluğumuzu bir kez daha düşünelim. Please consider the environment before printing this e-mail.
@mrthanbrr MAC hesabını yaparken kullanılan parametrelerin her istekte, her oluşturmada aynı olup olmadığını kontrol etmen faydalı olabilir. Sorun herkes için kuruş olmayabilir, bir şekilde sorunun sebebi MAC datasını hatalı oluşturmak, ya da farklı API isteklerinde farklı MAC datası kullanmak gibi duruyor.
üstadım, bankada ki personelin dediğine göre mac datası uyumsuzlugu varmış. bir de bana diyor ki, sen eski sistemi kullanıyorsun dll lerin olduğu. oysa ki 1 hafta öncesine kadar sorunsuz kullanabiliyordum. ilk şey dedi bana 100 ile çarpma gerek yok "amount" değerini. zaten 2 sayfada tamamlanıyor butun ödeme. Bana bir pdf dökümanı attı entegrasyon için, örnek kod falan yok. şaştım kaldım, çok sıkıntıya girdim. tek çalışıyorum başıma bela oldu.
ahmetkocadogan @.***>, 27 Haz 2022 Pzt, 10:58 tarihinde şunu yazdı:
@mrthanbrr https://github.com/mrthanbrr MAC hesabını yaparken kullanılan parametrelerin her istekte, her oluşturmada aynı olup olmadığını kontrol etmen faydalı olabilir. Sorun herkes için kuruş olmayabilir, bir şekilde sorunun sebebi MAC datasını hatalı oluşturmak, ya da farklı API isteklerinde farklı MAC datası kullanmak gibi duruyor.
— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1167013320, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5CMDV5OYQB57CPJHFDVRFNKPANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>
--
[image: metin, küçük resim içeren bir resim Açıklama otomatik olarak oluşturuldu]
Murat BİRER
Yönetim Bilişim Sistemleri Uzmanı
TANRIVERDI TEKSTIL SAN. VE PAZ. A.Ş. | Member Of Tanrıverdi Holding A.Ş.
Mobil: +90 546 599 02 10 | Ofis: 444 7 134 | Fax: +90 212 514 81 67
Etiler Mahallesi, Etiler Sok. No:2 34337 Beşiktaş, İSTANBUL
http://verdihome.com/ | https://tanriverdi.com/
[image: signature_4287678944]
Bu mesajı yazdırmadan önce çevreye olan sorumluluğumuzu bir kez daha düşünelim. Please consider the environment before printing this e-mail.
public async Task
string amount = Math.Round(request.TotalAmount, 2).ToString().Replace(",", string.Empty).Replace(".", string.Empty);
string currencyCode = "TL";//yapıkredi halen eski Türk lirası kodunu kullanıyor
string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<posnetRequest>
<mid>{merchantId}</mid>
<tid>{terminalId}</tid>
<oosRequestData>
<posnetid>{posnetId}</posnetid>
<XID>{request.OrderNumber}</XID>
<amount>{amount}</amount>
<currencyCode>{currencyCode}</currencyCode>
<installment>{string.Format("{0:00}", request.Installment)}</installment>
<tranType>Sale</tranType>
<cardHolderName>{request.CardHolderName}</cardHolderName>
<ccno>{request.CardNumber}</ccno>
<expDate>{request.ExpireYear}{request.ExpireMonth}</expDate>
<cvc>{request.CvvCode}</cvc>
</oosRequestData>
</posnetRequest>";
var httpParameters = new Dictionary<string, string>();
httpParameters.Add("xmldata", requestXml);
var response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters));
response.EnsureSuccessStatusCode();
string responseContent = await response.Content.ReadAsStringAsync();
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(responseContent);
if (xmlDocument.SelectSingleNode("posnetResponse/approved") == null ||
xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "1")
{
string errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText ?? string.Empty;
if (string.IsNullOrEmpty(errorMessage))
errorMessage = "Bankadan hata mesajı alınamadı.";
return PaymentGatewayResult.Failed(errorMessage);
}
var data1Node = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/data1");
var data2Node = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/data2");
var signNode = xmlDocument.SelectSingleNode("posnetResponse/oosRequestDataResponse/sign");
var parameters = new Dictionary<string, object>();
parameters.Add("posnetData", data1Node.InnerText);
parameters.Add("posnetData2", data2Node.InnerText);
parameters.Add("digest", signNode.InnerText);
parameters.Add("mid", merchantId);
parameters.Add("posnetID", posnetId);
//Vade Farklı işlemler için kullanılacak olan kampanya kodunu belirler.
//Üye İşyeri için tanımlı olan kampanya kodu, İşyeri Yönetici Ekranlarına giriş yapıldıktan sonra, Üye İşyeri bilgileri sayfasından öğrenilebilinir.
parameters.Add("vftCode", string.Empty);
parameters.Add("merchantReturnURL", request.CallbackUrl);//geri dönüş adresi
parameters.Add("lang", request.LanguageIsoCode);
parameters.Add("url", string.Empty);//openANewWindow 1 olarak ayarlanırsa buraya gidilecek url verilmeli
parameters.Add("openANewWindow", "0");//POST edilecek formun yeni bir sayfaya mı yoksa mevcut sayfayı mı yönlendirileceği
parameters.Add("useJokerVadaa", "1");//yapıkredi kartlarında vadaa kullanılabilirse izin verir
return PaymentGatewayResult.Successed(parameters, request.BankParameters["gatewayUrl"]);
}
catch (Exception ex)
{
return PaymentGatewayResult.Failed(ex.ToString());
}
}
var paymentGatewayResult = await ThreeDGatewayRequest(new PaymentGatewayRequest
{
CardHolderName = CardHolderName,
CardNumber = CardNumber,
ExpireMonth = ExpireMonth,
ExpireYear = Convert.ToInt32(ExpireYear),
CvvCode = CvvCode,
Installment = Convert.ToInt32(Installment),
TotalAmount = Convert.ToDecimal(totalAmount),
LanguageIsoCode = LanguageIsoCode,
CardType = "1",
OrderNumber = OrderId,
BankName = BankNames.Yapikredi,
CallbackUrl = CallbackUrl,
BankParameters = TestParameters //canli ortam bilgileri veritabanından gelecek
});
if (paymentGatewayResult.Success)
{
var ForumPost = CreatePaymentFormHtml(paymentGatewayResult.Parameters, paymentGatewayResult.GatewayUrl);
_httpContext.HttpContext.Response.Redirect(ForumPost);
}
else
{
string CallbackUrlError = storeLocation + "Plugins/PaymentThreeDPayment/PosError";
_httpContext.HttpContext.Response.Redirect(CallbackUrlError);
}
public async Task
var order = _orderService.GetOrderById(Convert.ToInt32(form["Xid"]));
if (HttpContext.Session.TryGetValue(PaymentSessionName, out byte[] paymentInfo))
return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
var paymentModel = JsonConvert.DeserializeObject<PaymentViewModel>(paymentInfo.ToString());
if (paymentModel == null)
return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
//clear payment info session
HttpContext.Session.Remove(PaymentSessionName);
var verifyGatewayResult = await VerifyGateway(new VerifyGatewayRequest
{
}, form);
HttpContext.Session.Set(PaymentResultSessionName, JsonConvert.SerializeObject(verifyGatewayResult));
if (verifyGatewayResult.Success)
{
order.AuthorizationTransactionId = form["posnetResponse"];
order.PaymentStatusId = 30;
order.OrderStatusId = 20;
_orderService.UpdateOrder(order);
return RedirectToRoute("CheckoutCompleted", new { orderId = order });
}
PosErrorModel model = new PosErrorModel();
var toostds = form["posnetResponse"];
string str = form["txnStatus"];
model.StrRespText = toostds;
model.StrtdsStatus = str;
return base.View("~/Plugins/Payments.ThreeDPayment/Views/PosError.cshtml", order);
}
public async Task<VerifyGatewayResult> VerifyGateway(VerifyGatewayRequest request, IFormCollection form)
{
if (form == null)
{
return VerifyGatewayResult.Failed("Form verisi alınamadı.");
}
if (!form.ContainsKey("BankPacket") || !form.ContainsKey("MerchantPacket") || !form.ContainsKey("Sign"))
{
return VerifyGatewayResult.Failed("Form verisi alınamadı.");
}
var merchantId = request.BankParameters["merchantId"];
var terminalId = request.BankParameters["terminalId"];
string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?>
<posnetRequest>
<mid>{merchantId}</mid>
<tid>{terminalId}</tid>
<oosResolveMerchantData>
<bankData>{form["BankPacket"]}</bankData>
<merchantData>{form["MerchantPacket"]}</merchantData>
<sign>{form["Sign"]}</sign>
</oosResolveMerchantData>
</posnetRequest>";
var httpParameters = new Dictionary<string, string>();
httpParameters.Add("xmldata", requestXml);
var httpClient = new HttpClient();
var response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters));
string responseContent = await response.Content.ReadAsStringAsync();
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(responseContent);
if (xmlDocument.SelectSingleNode("posnetResponse/approved") == null ||
xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "1" ||
xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "2")
{
string errorMessage = "3D doğrulama başarısız.";
if (xmlDocument.SelectSingleNode("posnetResponse/respText") != null)
errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText").InnerText;
return VerifyGatewayResult.Failed(errorMessage, form["ApprovedCode"],
xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText);
}
return VerifyGatewayResult.Successed(form["HostLogKey"], $"{form["HostLogKey"]}-{form["AuthCode"]}",
int.Parse(form["InstalmentNumber"]),
xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText,
form["ApprovedCode"]);
}
Merhaba Arkadaşlar Ben bu şekilde çözmüştüm Burdaki Kodlara Bakabilirsiniz Yapıkredi Bankası 2 kez istekte bulunmanızı istiyor ödemenin tamalnması için
Selamlar, destek için teşekkürler bu kodlarda yaptığınız düzenleme için pull request açabilir misiniz. Github reponun da güncel kalması için.
On Mon, Jul 4, 2022, 5:59 PM Fatih Yıldız @.***> wrote:
Merhaba Arkadaşlar Ben bu şekilde çözmüştüm Burdaki Kodlara Bakabilirsiniz Yapıkredi Bankası 2 kez istekte bulunmanızı istiyor ödemenin tamalnması için
— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1173913660, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB4QUGGJPGRTG3E33K4WZ63VSL34RANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>
Bu sayfadan ResultPage e mi yonlendirme yapıyorduk üstadım.
4 Tem 2022 Pzt 17:58 tarihinde Fatih Yıldız @.***> şunu yazdı:
public async Task
VerifyGateway(VerifyGatewayRequest request, IFormCollection form) { if (form == null) { return VerifyGatewayResult.Failed("Form verisi alınamadı."); } if (!form.ContainsKey("BankPacket") || !form.ContainsKey("MerchantPacket") || !form.ContainsKey("Sign")) { return VerifyGatewayResult.Failed("Form verisi alınamadı."); } var merchantId = request.BankParameters["merchantId"]; var terminalId = request.BankParameters["terminalId"]; string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <posnetRequest> <mid>{merchantId}</mid> <tid>{terminalId}</tid> <oosResolveMerchantData> <bankData>{form["BankPacket"]}</bankData> <merchantData>{form["MerchantPacket"]}</merchantData> <sign>{form["Sign"]}</sign> </oosResolveMerchantData> </posnetRequest>"; var httpParameters = new Dictionary<string, string>(); httpParameters.Add("xmldata", requestXml); var httpClient = new HttpClient(); var response = await httpClient.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(httpParameters)); string responseContent = await response.Content.ReadAsStringAsync(); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(responseContent); if (xmlDocument.SelectSingleNode("posnetResponse/approved") == null || xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "1" || xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText != "2") { string errorMessage = "3D doğrulama başarısız."; if (xmlDocument.SelectSingleNode("posnetResponse/respText") != null) errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText").InnerText; return VerifyGatewayResult.Failed(errorMessage, form["ApprovedCode"], xmlDocument.SelectSingleNode("posnetResponse/approved").InnerText); } return VerifyGatewayResult.Successed(form["HostLogKey"], $"{form["HostLogKey"]}-{form["AuthCode"]}", int.Parse(form["InstalmentNumber"]), xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText, form["ApprovedCode"]); }
— Reply to this email directly, view it on GitHub https://github.com/sefacan/3DPayment/issues/21#issuecomment-1173912698, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQCZ5FEE3Q4JQUYHZ3YDD3VSL3YLANCNFSM4VZG5XUQ . You are receiving this because you were mentioned.Message ID: @.***>
Merhaba Test etiğimde gerçek ortam bilgileri ile yapıkredi için hata var ve şöyle ThreeDGatewayRequest kısmında datalar gidiyor ancak ilk xml post edildiğinde aşağıdaki gibi orda işlemi bitiriyor ikinci post ksımına gitmiyor. yani CreatePaymentFormHtml bu kısıma gitmiyor burda formu alıp tekrar post etmesi gerekiyor. 3d olarak ama hiç gimiyor.
httpParameters.Add("xmldata", requestXml);