public static async Task <PaymentRequestResult> CreateRequestResult(HttpResponseMessage responseMessage, HttpContext httpContext, YekPayGatewayAccount account, MessagesOptions optionsMessages) { var message = await responseMessage.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <YekPayResponseModel>(message); if (response == null) { return(PaymentRequestResult.Failed(optionsMessages.InvalidDataReceivedFromGateway, account.Name)); } if (response.Code != SuccessCode) { var failureMessage = response.Description ?? optionsMessages.UnexpectedErrorText; return(PaymentRequestResult.Failed(failureMessage, account.Name)); } var paymentPageUrl = PaymentPageUrl + response.Authority; var descriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl); var transporter = new DefaultGatewayTransporter(httpContext, descriptor); var result = PaymentRequestResult.Succeed(transporter, account.Name); result.DatabaseAdditionalData.Add(AuthorityAdditionalDataKey, response.Authority); return(result); }
public static PaymentRequestResult CreateRequestResult( string webServiceResponse, Invoice invoice, IranKishGatewayAccount account, HttpContext httpContext, MessagesOptions messagesOptions) { var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result", "http://schemas.datacontract.org/2004/07/Token"); var message = XmlHelper.GetNodeValueFromXml(webServiceResponse, "message", "http://schemas.datacontract.org/2004/07/Token"); var token = XmlHelper.GetNodeValueFromXml(webServiceResponse, "token", "http://schemas.datacontract.org/2004/07/Token"); var isSucceed = result.Equals("true", StringComparison.OrdinalIgnoreCase) && !token.IsNullOrEmpty(); if (!isSucceed) { if (message.IsNullOrEmpty()) { message = messagesOptions.InvalidDataReceivedFromGateway; } return(PaymentRequestResult.Failed(message, account.Name)); } var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "merchantid", account.MerchantId }, { "token", token } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult(string response, HttpContext httpContext, ZarinPalGatewayAccount account, MessagesOptions messagesOptions) { var status = XmlHelper.GetNodeValueFromXml(response, "Status", "http://zarinpal.com/"); var authority = XmlHelper.GetNodeValueFromXml(response, "Authority", "http://zarinpal.com/"); var isSucceed = string.Equals(status, NumericOkResult, StringComparison.InvariantCultureIgnoreCase); if (!isSucceed) { var message = ZarinPalStatusTranslator.Translate(status, messagesOptions); return(PaymentRequestResult.Failed(message, account.Name)); } var paymentPageUrl = GetWebPageUrl(account.IsSandbox) + authority; var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult(string webServiceResponse, HttpContext httpContext, ParsianGatewayAccount account, MessagesOptions messagesOptions) { var token = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Token", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService"); var status = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Status", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService"); var message = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Message", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService"); var isSucceed = !status.IsNullOrEmpty() && status == "0" && !token.IsNullOrEmpty(); if (!isSucceed) { if (message == null) { message = messagesOptions.PaymentFailed; } return(PaymentRequestResult.Failed(message, account.Name)); } var paymentPageUrl = $"{PaymentPageUrl}?Token={token}"; var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); var result = PaymentRequestResult.Succeed(transporter, account.Name); result.DatabaseAdditionalData.Add("token", token); return(result); }
public static PaymentRequestResult CreateRequestResult(MelliApiRequestResult result, HttpContext httpContext, MelliGatewayAccount account, MessagesOptions messagesOptions) { if (result == null) { return(PaymentRequestResult.Failed(messagesOptions.UnexpectedErrorText)); } var isSucceed = result.ResCode == SuccessCode; if (!isSucceed) { string message; if (result.ResCode == DuplicateTrackingNumberCode) { message = messagesOptions.DuplicateTrackingNumber; } else { message = !result.Description.IsNullOrEmpty() ? result.Description : MelliRequestResultTranslator.Translate(result.ResCode, messagesOptions); } return(PaymentRequestResult.Failed(message, account.Name)); } var paymentPageUrl = $"{PaymentPageUrl}/Index?token={result.Token}"; var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult( string webServiceResponse, HttpContext httpContext, MessagesOptions messagesOptions, GatewayAccount account) { var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "return"); var arrayResult = result.Split(','); var resCode = arrayResult[0]; var refId = arrayResult.Length > 1 ? arrayResult[1] : string.Empty; var isSucceed = resCode == OkResult; if (!isSucceed) { var message = resCode == DuplicateOrderNumberResult ? messagesOptions.DuplicateTrackingNumber : MellatGatewayResultTranslator.Translate(resCode, messagesOptions); return(PaymentRequestResult.Failed(message, account.Name)); } var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "RefId", refId } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult( string response, Invoice invoice, AsanPardakhtGatewayAccount account, HttpContext httpContext, MessagesOptions messagesOptions) { var result = XmlHelper.GetNodeValueFromXml(response, "RequestOperationResult", "http://tempuri.org/"); var splitedResult = result.Split(','); var isSucceed = splitedResult.Length == 2 && splitedResult[0] == "0"; if (!isSucceed) { var message = AsanPardakhtResultTranslator.TranslateRequest(splitedResult[0], messagesOptions); return(PaymentRequestResult.Failed(message, account.Name)); } var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "RefId", splitedResult[1] } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
/// <inheritdoc /> public override async Task <IPaymentRequestResult> RequestAsync(Invoice invoice, CancellationToken cancellationToken = default) { var httpContext = _httpContextAccessor.HttpContext; var account = await GetAccountAsync(invoice).ConfigureAwaitFalse(); var url = $"{httpContext.Request.Scheme}" + "://" + $"{httpContext.Request.Host.ToUriComponent()}" + $"{_options.Value.GatewayPath}"; var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( url, new Dictionary <string, string> { { "CommandType", "request" }, { "trackingNumber", invoice.TrackingNumber.ToString() }, { "amount", ((long)invoice.Amount).ToString() }, { "redirectUrl", invoice.CallbackUrl } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public async Task Transporter_Posts_Correctly() { const string expectedUrl = "http://test.com"; var descriptor = GatewayTransporterDescriptor.CreatePost(expectedUrl, new List <KeyValuePair <string, string> >()); IGatewayTransporter transporter = new DefaultGatewayTransporter(_httpContext, descriptor); await transporter.TransportAsync(); Assert.AreEqual((int)HttpStatusCode.OK, _httpContext.Response.StatusCode); Assert.IsNotNull(_httpContext.Response.Body); }
public async Task Transporter_Redirects_Correctly() { const string expectedUrl = "http://test.com"; var descriptor = GatewayTransporterDescriptor.CreateRedirect(expectedUrl); IGatewayTransporter transporter = new DefaultGatewayTransporter(_httpContext, descriptor); await transporter.TransportAsync(); Assert.AreEqual((int)HttpStatusCode.Redirect, _httpContext.Response.StatusCode); Assert.IsNotNull(_httpContext.Response.Headers[HeaderNames.Location]); Assert.AreEqual(expectedUrl, _httpContext.Response.Headers[HeaderNames.Location]); }
public static PaymentRequestResult CreateRequestResult(Invoice invoice, HttpContext httpContext, SamanGatewayAccount account) { var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "Amount", invoice.Amount.ToLongString() }, { "MID", account.MerchantId }, { "ResNum", invoice.TrackingNumber.ToString() }, { "RedirectURL", invoice.CallbackUrl } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult(string response, HttpContext httpContext, PayIrGatewayAccount account) { var result = JsonConvert.DeserializeObject <PayIrRequestResponseModel>(response); if (!result.IsSucceed) { return(PaymentRequestResult.Failed(result.ErrorMessage, account.Name)); } var paymentPageUrl = $"{PaymentPageUrl}{result.Token}"; var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static async Task <PaymentRequestResult> CreateRequestResult( HttpResponseMessage responseMessage, HttpContext httpContext, SepehrGatewayAccount account, MessagesOptions messages) { if (!responseMessage.IsSuccessStatusCode) { return(PaymentRequestResult.Failed($"Operation failed. Http Status: {responseMessage.StatusCode}", account.Name)); } var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse(); var result = JsonConvert.DeserializeObject <TokenResponseModel>(response); if (result == null) { return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name)); } if (result.Status != 0) { var message = SepehrGatewayResultTranslator.Translate(result.Status.ToString(), messages); return(PaymentRequestResult.Failed(message, account.Name)); } if (result.AccessToken.IsNullOrWhiteSpace()) { return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name)); } var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "TerminalID", account.TerminalId.ToString() }, { "token", result.AccessToken } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static PaymentRequestResult CreateRequestResult(Invoice invoice, HttpContext httpContext, PasargadGatewayAccount account) { var invoiceDate = GetTimeStamp(DateTime.Now); var timeStamp = invoiceDate; var dataToSign = string.Format("#{0}#{1}#{2}#{3}#{4}#{5}#{6}#{7}#", account.MerchantCode, account.TerminalCode, invoice.TrackingNumber, invoiceDate, (long)invoice.Amount, invoice.CallbackUrl, ActionNumber, timeStamp); var signedData = SignData(account.PrivateKey, dataToSign); var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "merchantCode", account.MerchantCode }, { "terminalCode", account.TerminalCode }, { "invoiceNumber", invoice.TrackingNumber.ToString() }, { "invoiceDate", invoiceDate }, { "amount", invoice.Amount.ToLongString() }, { "redirectAddress", invoice.CallbackUrl }, { "action", ActionNumber }, { "timeStamp", timeStamp }, { "sign", signedData } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); var result = PaymentRequestResult.Succeed(transporter, account.Name); result.DatabaseAdditionalData.Add("timeStamp", timeStamp); return(result); }
public static async Task <PaymentRequestResult> CreateRequestResult( HttpResponseMessage responseMessage, HttpContext httpContext, IdPayGatewayAccount account) { var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse(); if (!responseMessage.IsSuccessStatusCode) { var errorModel = JsonConvert.DeserializeObject <IdPayErrorModel>(response); return(PaymentRequestResult.Failed(errorModel.ToString(), account.Name)); } var result = JsonConvert.DeserializeObject <IdPayRequestResultModel>(response); var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(result.Link); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }