public GridMPGSConfig GetGridMPGSCombinedConfig(GridMPGSConfig config, GridMPGSDirectMIDConfig directMID) { config.MerchantId = directMID.MerchantId; config.Password = directMID.Password; config.WebhooksNotificationSecret = directMID.WebhooksNotificationSecret; return(config); }
public string RemoveToken(GridMPGSConfig mpgsConfig, string token) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { ApiMethod = "DELETE" }; gatewayApiRequest.buildDeleteUrl(token); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.executeHTTPMethod(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public string VoidTransaction(GridMPGSConfig mpgsConfig) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { ApiMethod = "VOID", TargetTransactionId = "ea2d89bb24", TransactionId = GenerateOrderId(), Token = "440003320900022" }; gatewayApiRequest.buildRequestUrl(); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.executeHTTPMethod(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public string Capture(GridMPGSConfig mpgsConfig, TokenSession tokenSession) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { OrderId = tokenSession.MPGSOrderID, ApiOperation = MPGSAPIOperation.CAPTURE.ToString(), TransactionAmount = tokenSession.Amount.ToString(), TransactionId = PaymentHelper.GenerateOrderId(), TransactionCurrency = config.Currency, Token = tokenSession.Token, SourceType = tokenSession.SourceOfFundType }; gatewayApiRequest.buildRequestUrl(); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public string CaptureTest(GridMPGSConfig mpgsConfig) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { OrderId = "77749b36d8", // authorized order id ApiOperation = MPGSAPIOperation.CAPTURE.ToString(), TransactionAmount = "20", TransactionId = PaymentHelper.GenerateOrderId(), TransactionCurrency = config.Currency, Token = "4440008087700014", SourceType = "CARD" }; gatewayApiRequest.buildRequestUrl(); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public string Authorize(GridMPGSConfig mpgsConfig, Checkout checkOutDetails, PaymentMethod paymentMethod) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config, checkOutDetails.ReceiptNumber, checkOutDetails.OrderNumber) { SessionId = checkOutDetails.CheckoutSession.Id, OrderId = checkOutDetails.OrderId, TransactionId = checkOutDetails.TransactionID, ApiOperation = MPGSAPIOperation.AUTHORIZE.ToString(), OrderAmount = checkOutDetails.Amount.ToString(), OrderCurrency = config.Currency, ApiMethod = "PUT", Token = paymentMethod.Token, SourceType = paymentMethod.SourceType, OrderDescription = "", }; gatewayApiRequest.buildRequestUrl(); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public string AuthorizeTest(GridMPGSConfig mpgsConfig) { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { // SessionId = "" ,//checkOutDetails.CheckoutSession.Id, OrderId = GenerateOrderId(), //checkOutDetails.OrderId, TransactionId = GenerateOrderId(), //checkOutDetails.TransactionID, ApiOperation = MPGSAPIOperation.AUTHORIZE.ToString(), OrderAmount = "20", OrderCurrency = config.Currency, ApiMethod = "PUT", Token = "4440008087700014", SourceType = "CARD", OrderDescription = "test pay", }; gatewayApiRequest.buildRequestUrl(); gatewayApiRequest.buildPayload(); string request = JsonConvert.SerializeObject(gatewayApiRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayApiRequest)); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information(response); return(TokenResponse.GetResponseResult(response)); }
public Checkout CreateCheckoutSession(GridMPGSConfig mpgsConfig, customerBilling customerBillingDetails, string MpgsOrderID, string transactionID, string receiptNumber, string orderNumber) { try { LogInfo.Information(EnumExtensions.GetDescription(MPGSAPIOperation.CREATE_CHECKOUT_SESSION)); GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config, customerBillingDetails, receiptNumber, orderNumber); gatewayApiRequest.ApiOperation = MPGSAPIOperation.CREATE_CHECKOUT_SESSION.ToString(); gatewayApiRequest.OrderId = MpgsOrderID; gatewayApiRequest.TransactionId = transactionID; gatewayApiRequest.OrderCurrency = config.Currency; gatewayApiRequest.buildSessionRequestUrl(); gatewayApiRequest.buildPayload(); gatewayApiRequest.ApiMethod = GatewayApiClient.POST; GatewayApiClient gatewayApiClient = new GatewayApiClient(config); String response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information(EnumExtensions.GetDescription(MPGSAPIResponse.HostedCheckoutResponse) + response); CheckoutSessionModel checkoutSessionModel = CheckoutSessionModel.toCheckoutSessionModel(response); Checkout checkOut = new Checkout(); checkOut.CheckoutJsUrl = $@"{config.GatewayUrl}/checkout/version/{config.Version}/checkout.js"; checkOut.MerchantId = config.MerchantId; checkOut.OrderId = gatewayApiRequest.OrderId; checkOut.TransactionID = gatewayApiRequest.TransactionId; checkOut.CheckoutSession = checkoutSessionModel; checkOut.Currency = config.Currency; return(checkOut); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); throw ex; } }
public IActionResult ProcessWebhook([FromBody] WebhookNotificationModel notification, [FromHeader(Name = "X-Notification-Secret")] string notificationSecret) { try { if (notification.Order.Status == MPGSAPIResponse.CAPTURED.ToString()) { _notificationModel = notification; notification.Timestamp = Convert.ToInt64((DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds); PaymentHelper.InitWebhooksNotificationsFolder(); DatabaseResponse configResponse = ConfigHelper.GetValue(ConfiType.MPGS.ToString(), _iconfiguration); PaymentHelper gatewayHelper = new PaymentHelper(); GridMPGSConfig gatewayConfig = gatewayHelper.GetGridMPGSConfig((List <Dictionary <string, string> >)configResponse.Results); GatewayApiConfig _gatewayApiConfig = new GatewayApiConfig(gatewayConfig); LogInfo.Information("Webhooks controller ProcessWebhook action"); Debug.WriteLine($"-------------GatewayApiConfig.WebhooksNotificationSecret {_gatewayApiConfig.WebhooksNotificationSecret} --- {notificationSecret}"); if (_gatewayApiConfig.WebhooksNotificationSecret == null || notificationSecret == null || notificationSecret != _gatewayApiConfig.WebhooksNotificationSecret) { LogInfo.Error("Webhooks notification secret doesn't match, so not processing the incoming request!"); return(Ok()); } LogInfo.Information("Webhooks notification secret matches"); var parent = Task.Factory.StartNew(() => { Action MPGSOrderFinalProcessing = FinalPaymentProcessing; Task.Factory.StartNew(MPGSOrderFinalProcessing, TaskCreationOptions.DenyChildAttach); }); } return(Ok()); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(Ok()); } }
public string RetrieveCheckOutTransaction(GridMPGSConfig mpgsConfig, CheckOutResponseUpdate responseUpdate) { try { LogInfo.Information($" {EnumExtensions.GetDescription(MPGSAPIResponse.HostedCheckoutRetrieveReceipt) + " orderId " + responseUpdate.MPGSOrderID} result {responseUpdate.Result} sessionId {responseUpdate.CheckOutSessionID}"); GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); if (responseUpdate.Result == MPGSAPIResponse.SUCCESS.ToString() || responseUpdate.Result == MPGSAPIResponse.CAPTURED.ToString()) { GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { ApiOperation = MPGSAPIOperation.RETRIEVE_ORDER.ToString(), OrderId = responseUpdate.MPGSOrderID, ApiMethod = GatewayApiClient.GET }; gatewayApiRequest.buildOrderUrl(); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayApiRequest); LogInfo.Information($" {EnumExtensions.GetDescription(MPGSAPIResponse.HostedCheckoutRetrieveReceipt) + " " + response}"); //parse response return(response); } else { LogInfo.Error($" {MPGSAPIResponse.Unsuccessful.ToString()+ ". " + responseUpdate.Result}"); return(string.Empty); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); throw ex; } }
public string PayWithToken(GridMPGSConfig mpgsConfig, string token, string sessionID, string orderID, string transactionID, string amount) { try { //payment with token GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayGeneratePaymentRequest = new GatewayApiRequest(config); gatewayGeneratePaymentRequest.ApiOperation = "PAY"; gatewayGeneratePaymentRequest.ApiMethod = GatewayApiClient.PUT; gatewayGeneratePaymentRequest.Token = token; //tokenResponse.Token; gatewayGeneratePaymentRequest.SessionId = sessionID; // responseUpdate.MPGSResponse.session.id; gatewayGeneratePaymentRequest.OrderId = orderID; //updateTokenSesisonDetails.MPGSOrderID; gatewayGeneratePaymentRequest.TransactionId = transactionID; // updateTokenSesisonDetails.TransactionID; gatewayGeneratePaymentRequest.OrderAmount = amount; gatewayGeneratePaymentRequest.buildPayload(); gatewayGeneratePaymentRequest.buildRequestUrl(); //payment response GatewayApiClient gatewayApiClient = new GatewayApiClient(config); string response = gatewayApiClient.SendTransaction(gatewayGeneratePaymentRequest); LogInfo.Information($" {EnumExtensions.GetDescription(MPGSAPIResponse.HostedCheckoutRetrieveReceipt) + " " + response}"); return(TokenResponse.GetResponseResult(response)); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); throw ex; } }
public GridMPGSConfig GetGridMPGSConfig(List <Dictionary <string, string> > configDict) { GridMPGSConfig config = new GridMPGSConfig(); config.GatewayUrl = configDict.Single(x => x["key"] == "GatewayBaseUrl")["value"]; config.Version = configDict.Single(x => x["key"] == "GatewayVersion")["value"]; config.MerchantId = configDict.Single(x => x["key"] == "GatewayGridMerchantId")["value"]; config.Password = configDict.Single(x => x["key"] == "GatewayGridPassword")["value"]; config.Currency = configDict.Single(x => x["key"] == "GatewayGridCurrency")["value"]; config.GridMerchantName = configDict.Single(x => x["key"] == "GridMerchantName")["value"]; config.GridMerchantEmail = configDict.Single(x => x["key"] == "GridMerchantEmail")["value"]; config.GridMerchantLogo = configDict.Single(x => x["key"] == "GridMerchantLogo")["value"]; config.GridMerchantAddress1 = configDict.Single(x => x["key"] == "GridMerchantAddress1")["value"]; config.GridMerchantAddress2 = configDict.Single(x => x["key"] == "GridMerchantAddress2")["value"]; config.GridMerchantPostCode = configDict.Single(x => x["key"] == "GridMerchantPostCode")["value"]; config.GridMerchantContactNumber = configDict.Single(x => x["key"] == "GridMerchantContactNumber")["value"]; config.WebhooksNotificationSecret = configDict.Single(x => x["key"] == "GatewayGridWebhookSecret")["value"]; return(config); }
public TokenResponse TokenizeTest(GridMPGSConfig mpgsConfig) { try { GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayUpdateSessionRequest = new GatewayApiRequest(config); GatewayApiClient gatewayApiClient = new GatewayApiClient(config); //generate token GatewayApiRequest gatewayGenerateTokenRequest = new GatewayApiRequest(config); gatewayGenerateTokenRequest.SessionId = "SESSION0002676972204L29024409K5"; gatewayGenerateTokenRequest.ApiMethod = GatewayApiClient.POST; gatewayGenerateTokenRequest.buildPayload(); gatewayGenerateTokenRequest.buildTokenUrl(); string request = JsonConvert.SerializeObject(gatewayGenerateTokenRequest); LogInfo.Information(JsonConvert.SerializeObject(gatewayGenerateTokenRequest)); String response = gatewayApiClient.SendTransaction(gatewayGenerateTokenRequest); LogInfo.Information(response); TokenResponse tokenResponse = TokenResponse.ToTokenResponse(response); LogInfo.Information($"Tokenize response : {response}"); return(tokenResponse); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); throw ex; } }
public async void ProcessPayment(WebhookNotificationModel notification) { try { string json = JsonConvert.SerializeObject(notification); LogInfo.Information($"Webhooks notification model {json}"); WebhookDataAccess _webhookAccess = new WebhookDataAccess(_iconfiguration); DatabaseResponse webhookLogUpdatedatabaseResponse = _webhookAccess.UpdateMPGSWebhookNotification(notification); // epoch System.IO.File.WriteAllText($@"{GatewayApiConfig.WEBHOOKS_NOTIFICATION_FOLDER}/WebHookNotifications_{notification.Timestamp}.json", json); CheckOutResponseUpdate updateRequest = new CheckOutResponseUpdate { MPGSOrderID = notification.Order.Id, Result = notification.Order.Status }; OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); //update checkout details // DatabaseResponse updateCheckoutDetailsResponse = await _orderAccess.UpdateCheckOutResponse(updateRequest); // retrieve transaction details from MPGS DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.MPGS.ToString()); PaymentHelper gatewayHelper = new PaymentHelper(); GridMPGSConfig gatewayConfig = gatewayHelper.GetGridMPGSConfig((List <Dictionary <string, string> >)configResponse.Results); //Direct capture MID config DatabaseResponse configDirectResponse = await _orderAccess.GetConfiguration(ConfiType.MPGSDirect.ToString()); GridMPGSDirectMIDConfig gatewayDirectConfig = gatewayHelper.GetGridMPGSDirectMerchant((List <Dictionary <string, string> >)configDirectResponse.Results); gatewayConfig = gatewayHelper.GetGridMPGSCombinedConfig(gatewayConfig, gatewayDirectConfig); // Direct capture MID config end TransactionRetrieveResponseOperation transactionResponse = new TransactionRetrieveResponseOperation(); string receipt = gatewayHelper.RetrieveCheckOutTransaction(gatewayConfig, updateRequest); transactionResponse = gatewayHelper.GetPaymentTransaction(receipt); if (webhookLogUpdatedatabaseResponse != null && webhookLogUpdatedatabaseResponse.Results != null) { DatabaseResponse paymentMethodResponse = await _orderAccess.GetPaymentMethodToken((int)webhookLogUpdatedatabaseResponse.Results); PaymentMethod paymentMethod = new PaymentMethod(); paymentMethod = (PaymentMethod)paymentMethodResponse.Results; transactionResponse.TrasactionResponse.CardType = paymentMethod.CardType; transactionResponse.TrasactionResponse.CardHolderName = paymentMethod.CardHolderName; transactionResponse.TrasactionResponse.Token = paymentMethod.Token; } DatabaseResponse paymentProcessingRespose = new DatabaseResponse(); paymentProcessingRespose = await _orderAccess.UpdateCheckOutReceipt(transactionResponse.TrasactionResponse); DatabaseResponse updatePaymentResponse = await _orderAccess.UpdatePaymentResponse(updateRequest.MPGSOrderID, receipt); if (paymentProcessingRespose.ResponseCode == (int)DbReturnValue.TransactionSuccess) { LogInfo.Information(EnumExtensions.GetDescription(DbReturnValue.TransactionSuccess)); QMHelper qMHelper = new QMHelper(_iconfiguration, _messageQueueDataAccess); int processResult = await qMHelper.ProcessSuccessTransaction(updateRequest); if (processResult == 1) { LogInfo.Information(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed)); } else if (processResult == 2) { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed)); } else if (processResult == 3) { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed) + ". " + EnumExtensions.GetDescription(CommonErrors.MQSent)); } else if (processResult == 4) { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed) + ". But while processing Buddy/MQ/EML/SMS " + EnumExtensions.GetDescription(CommonErrors.SourceTypeNotFound) + " for MPGSOrderID" + updateRequest.MPGSOrderID); } else if (processResult == 5) { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed) + ". But while processing Buddy/MQ/EML/SMS " + EnumExtensions.GetDescription(CommonErrors.InvalidCheckoutType) + " for MPGSOrderID" + updateRequest.MPGSOrderID); } else { // entry for exceptions from QM Helper, but need to send payment success message to UI as payment already processed LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.PaymentProcessed) + ". But while processing MQ/EML/SMS " + EnumExtensions.GetDescription(CommonErrors.SystemExceptionAfterPayment) + " for MPGSOrderID" + updateRequest.MPGSOrderID); } } else { LogInfo.Warning(EnumExtensions.GetDescription(DbReturnValue.TransactionFailed)); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); } }
public Checkout CreateTokenizationCheckoutSession(GridMPGSConfig mpgsConfig, string apiOperation = null, string sessionId = null) { try { LogInfo.Information(EnumExtensions.GetDescription(MPGSAPIOperation.CREATE_CHECKOUT_SESSION)); GatewayApiConfig config = new GatewayApiConfig(mpgsConfig); GatewayApiRequest gatewayApiRequest = new GatewayApiRequest(config) { SessionId = sessionId, OrderId = GenerateOrderId(), TransactionId = GenerateOrderId(), ApiOperation = apiOperation, OrderAmount = "", OrderCurrency = config.Currency }; gatewayApiRequest.buildRequestUrl(); if (apiOperation == "CAPTURE" || apiOperation == "REFUND") { gatewayApiRequest.TransactionAmount = ""; gatewayApiRequest.TransactionCurrency = config.Currency; gatewayApiRequest.OrderId = null; } if (apiOperation == "VOID" || apiOperation == "UPDATE_AUTHORIZATION") { gatewayApiRequest.OrderId = null; } if (apiOperation == "RETRIEVE_ORDER" || apiOperation == "RETRIEVE_TRANSACTION") { gatewayApiRequest.ApiMethod = "GET"; gatewayApiRequest.OrderId = null; gatewayApiRequest.TransactionId = null; } gatewayApiRequest.buildPayload(); Checkout checkOut = new Checkout(); checkOut.CheckoutJsUrl = $@"{config.GatewayUrl}/form/version/{config.Version}/merchant/{config.MerchantId}/session.js"; checkOut.MerchantId = config.MerchantId; checkOut.OrderId = gatewayApiRequest.OrderId; checkOut.CheckoutSession = null; checkOut.Currency = config.Currency; checkOut.TransactionID = gatewayApiRequest.TransactionId; return(checkOut); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); throw ex; } }