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, 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, 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, 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)); }
/// <summary> /// Creates an instance of <see cref="PaymentRequestResult"/> which indicates a successful result and a Gateway Transporter with type of Redirect. /// </summary> /// <param name="gatewayAccountName"></param> /// <param name="httpContext"></param> /// <param name="url">Page URL.</param> public static PaymentRequestResult SucceedWithRedirect( string gatewayAccountName, HttpContext httpContext, string url) { var descriptor = GatewayTransporterDescriptor.CreateRedirect(url); var transporter = new DefaultGatewayTransporter(httpContext, descriptor); return(Succeed(transporter, gatewayAccountName)); }
/// <summary> /// Creates an instance of <see cref="PaymentRequestResult"/> which indicates a successful result and a Gateway Transporter with type of Post. /// </summary> /// <param name="gatewayAccountName"></param> /// <param name="httpContext"></param> /// <param name="url">Page URL.</param> /// <param name="form">Form to post.</param> public static PaymentRequestResult SucceedWithPost( string gatewayAccountName, HttpContext httpContext, string url, IEnumerable <KeyValuePair <string, string> > form) { var descriptor = GatewayTransporterDescriptor.CreatePost(url, form); var transporter = new DefaultGatewayTransporter(httpContext, descriptor); return(Succeed(transporter, gatewayAccountName)); }
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)); }
/// <summary> /// Initializes an instance of <see cref="DefaultGatewayTransporter"/>. /// </summary> /// <param name="httpContext"></param> /// <param name="descriptor"></param> public DefaultGatewayTransporter(HttpContext httpContext, GatewayTransporterDescriptor descriptor) { _httpContext = httpContext ?? throw new ArgumentNullException(nameof(httpContext)); Descriptor = descriptor ?? throw new ArgumentNullException(nameof(descriptor)); }