public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request) { string merchantId = request.BankParameters["merchantId"]; string terminalId = request.BankParameters["terminalId"]; var xmlBuilder = new StringBuilder(); xmlBuilder.Append($@"<?xml version=""1.0"" encoding=""utf-8""?> <posnetRequest> <mid>{merchantId}</mid> <tid>{terminalId}</tid> <reverse> <transaction>sale</transaction> <hostLogKey>{request.ReferenceNumber.Split('-').First().Trim()}</hostLogKey>"); //taksitli işlemde 6 haneli auth kodu isteniyor if (request.Installment > 0) { xmlBuilder.Append($"<authCode>{request.ReferenceNumber.Split('-').Last().Trim()}</authCode>"); } xmlBuilder.Append(@"</reverse> </posnetRequest>"); var httpParameters = new Dictionary <string, string>(); httpParameters.Add("xmldata", xmlBuilder.ToString()); var response = await client.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") { string errorMessage = xmlDocument.SelectSingleNode("posnetResponse/respText")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(CancelPaymentResult.Failed(errorMessage)); } var transactionId = xmlDocument.SelectSingleNode("posnetResponse/hostlogkey")?.InnerText; return(CancelPaymentResult.Successed(transactionId, transactionId)); }
public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request) { string clientId = request.BankParameters["clientId"]; string userName = request.BankParameters["cancelUsername"]; string password = request.BankParameters["cancelUserPassword"]; string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <CC5Request> <Name>{userName}</Name> <Password>{password}</Password> <ClientId>{clientId}</ClientId> <Type>Void</Type> <OrderId>{request.OrderNumber}</OrderId> </CC5Request>"; var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(requestXml, Encoding.UTF8, "text/xml")); string responseContent = await response.Content.ReadAsStringAsync(); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(responseContent); if (xmlDocument.SelectSingleNode("CC5Response/Response") == null || xmlDocument.SelectSingleNode("CC5Response/Response").InnerText != "Approved") { var errorMessage = xmlDocument.SelectSingleNode("CC5Response/ErrMsg")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(CancelPaymentResult.Failed(errorMessage)); } if (xmlDocument.SelectSingleNode("CC5Response/ProcReturnCode") == null || xmlDocument.SelectSingleNode("CC5Response/ProcReturnCode").InnerText != "00") { var errorMessage = xmlDocument.SelectSingleNode("CC5Response/ErrMsg")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(CancelPaymentResult.Failed(errorMessage)); } var transactionId = xmlDocument.SelectSingleNode("CC5Response/TransId")?.InnerText ?? string.Empty; return(CancelPaymentResult.Successed(transactionId, transactionId)); }
/// <summary> /// Cancel payment based on the given Token. /// </summary> /// <param name="apiKey">Divider [ApiKey]</param> /// <param name="token">Payment token</param> /// <returns>A boolean value representing if cancel process is successful or not.</returns> public CancelPaymentResult CancelPayment(string apiKey, string token) { apiKey.CheckArgumentIsNull(nameof(apiKey)); token.CheckArgumentIsNull(nameof(token)); var client = new HttpRestClient <string, bool>(_httpClient, ENDPOINT_CancelPayment); client.WithApiKey(apiKey); try { var result = client.PostJson(token); return(CancelPaymentResult.Ok(result)); } catch (Exception ex) { return(CancelPaymentResult.Failed(ex)); } }
public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request) { string merchantId = request.BankParameters["merchantId"]; string merchantPassword = request.BankParameters["merchantPassword"]; string requestXml = $@"<VposRequest> <MerchantId>{merchantId}</MerchantId> <Password>{merchantPassword}</Password> <TransactionType>Cancel</TransactionType> <ReferenceTransactionId>{request.TransactionId}</ReferenceTransactionId> <ClientIp>{_httpContextAccessor.HttpContext.Connection.RemoteIpAddress}</ClientIp> </VposRequest>"; var parameters = new Dictionary <string, string>(); parameters.Add("prmstr", requestXml); var response = await client.PostAsync(request.BankParameters["verifyUrl"], new FormUrlEncodedContent(parameters)); string responseContent = await response.Content.ReadAsStringAsync(); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(responseContent); if (xmlDocument.SelectSingleNode("VposResponse/ResultCode") == null || xmlDocument.SelectSingleNode("VposResponse/ResultCode").InnerText != "0000") { string errorMessage = xmlDocument.SelectSingleNode("VposResponse/ResultDetail")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(CancelPaymentResult.Failed(errorMessage)); } var transactionId = xmlDocument.SelectSingleNode("VposResponse/TransactionId")?.InnerText; return(CancelPaymentResult.Successed(transactionId)); }
public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request) { string shopCode = request.BankParameters["shopCode"]; string userCode = request.BankParameters["cancelUserCode"]; string userPass = request.BankParameters["cancelUserPass"]; var formBuilder = new StringBuilder(); formBuilder.AppendFormat("ShopCode={0}&", shopCode); formBuilder.AppendFormat("PurchAmount={0}&", request.TotalAmount.ToString(new CultureInfo("en-US"))); formBuilder.AppendFormat("Currency={0}&", request.CurrencyIsoCode); formBuilder.Append("OrderId=&"); formBuilder.Append("TxnType=Void&"); formBuilder.AppendFormat("orgOrderId={0}&", request.OrderNumber); formBuilder.AppendFormat("UserCode={0}&", userCode); formBuilder.AppendFormat("UserPass={0}&", userPass); formBuilder.Append("SecureType=NonSecure&"); formBuilder.AppendFormat("Lang={0}&", request.LanguageIsoCode.ToUpper()); formBuilder.Append("MOTO=0"); var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(formBuilder.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded")); string responseContent = await response.Content.ReadAsStringAsync(); if (string.IsNullOrEmpty(responseContent)) { return(CancelPaymentResult.Failed("İptal işlemi başarısız.")); } responseContent = responseContent.Replace(";;", ";").Replace(";", "&"); var responseParams = HttpUtility.ParseQueryString(responseContent); if (responseParams["ProcReturnCode"] != "00") { return(CancelPaymentResult.Failed(responseParams["ErrorMessage"])); } return(CancelPaymentResult.Successed(responseParams["TransId"], responseParams["TransId"])); }
public async Task <CancelPaymentResult> CancelRequest(CancelPaymentRequest request) { string terminalUserId = request.BankParameters["terminalUserId"]; string terminalId = request.BankParameters["terminalId"]; string terminalMerchantId = request.BankParameters["terminalMerchantId"]; string cancelUserId = request.BankParameters["cancelUserId"]; string cancelUserPassword = request.BankParameters["cancelUserPassword"]; string mode = request.BankParameters["mode"];//PROD | TEST //garanti tarafından terminal numarasını 9 haneye tamamlamak için başına sıfır eklenmesi isteniyor. string _terminalid = string.Format("{0:000000000}", int.Parse(terminalId)); //garanti bankasında tutar bilgisinde nokta, virgül gibi değerler istenmiyor. 1.10 TL'lik işlem 110 olarak gönderilmeli. Yani tutarı 100 ile çarpabiliriz. string amount = (request.TotalAmount * 100m).ToString("N");//virgülden sonraki sıfırlara gerek yok //provizyon şifresi ve 9 haneli terminal numarasının birleşimi ile bir hash oluşturuluyor string securityData = GetSHA1($"{cancelUserPassword}{_terminalid}"); //ilgili veriler birleştirilip hash oluşturuluyor string hashstr = GetSHA1($"{request.OrderNumber}{terminalId}{amount}{securityData}"); string requestXml = $@"<?xml version=""1.0"" encoding=""utf-8""?> <GVPSRequest> <Mode>{mode}</Mode> <Version>v0.01</Version> <ChannelCode></ChannelCode> <Terminal> <ProvUserID>{cancelUserId}</ProvUserID> <HashData>{hashstr}</HashData> <UserID>{terminalUserId}</UserID> <ID>{terminalId}</ID> <MerchantID>{terminalMerchantId}</MerchantID> </Terminal> <Customer> <IPAddress>{request.CustomerIpAddress}</IPAddress> <EmailAddress></EmailAddress> </Customer> <Order> <OrderID>{request.OrderNumber}</OrderID> <GroupID></GroupID> </Order> <Transaction> <Type>void</Type> <InstallmentCnt>{request.Installment}</InstallmentCnt> <Amount>{amount}</Amount> <CurrencyCode>{request.CurrencyIsoCode}</CurrencyCode> <CardholderPresentCode>0</CardholderPresentCode> <MotoInd>N</MotoInd> <OriginalRetrefNum>{request.ReferenceNumber}</OriginalRetrefNum> </Transaction> </GVPSRequest>"; var response = await client.PostAsync(request.BankParameters["verifyUrl"], new StringContent(requestXml, Encoding.UTF8, "text/xml")); string responseContent = await response.Content.ReadAsStringAsync(); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(responseContent); if (xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode") == null || xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode").InnerText != "00" || xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ReasonCode").InnerText != "0000") { string errorMessage = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/Response/ErrorMsg")?.InnerText ?? string.Empty; if (string.IsNullOrEmpty(errorMessage)) { errorMessage = "Bankadan hata mesajı alınamadı."; } return(CancelPaymentResult.Failed(errorMessage)); } string transactionId = xmlDocument.SelectSingleNode("GVPSResponse/Transaction/RetrefNum")?.InnerText; return(CancelPaymentResult.Successed(transactionId, transactionId)); }