internal override void ConfigureContainer(ConfiguredServices services) { if (string.IsNullOrEmpty(ServiceUrl)) { if (Environment.Equals(Entities.Environment.TEST)) { ServiceUrl = ServiceEndpoints.GP_API_TEST; } else { ServiceUrl = ServiceEndpoints.GP_API_PRODUCTION; } } var gateway = new GpApiConnector { AppId = AppId, AppKey = AppKey, Nonce = Nonce, SecondsToExpire = SecondsToExpire, IntervalToExpire = IntervalToExpire, Channel = Channel, Language = Language, ServiceUrl = ServiceUrl, Timeout = Timeout }; services.GatewayConnector = gateway; services.ReportingService = gateway; }
internal static GpApiRequest BuildRequest(Secure3dBuilder builder, GpApiConnector gateway) { var merchantUrl = !string.IsNullOrEmpty(gateway.GpApiConfig.MerchantId) ? $"/merchants/{gateway.GpApiConfig.MerchantId}" : string.Empty; if (builder.TransactionType == TransactionType.VerifyEnrolled) { var storedCredential = new JsonDoc() .Set("model", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential?.Type)) .Set("reason", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential?.Reason)) .Set("sequence", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential?.Sequence)); var paymentMethod = new JsonDoc(); if (builder.PaymentMethod is ITokenizable tokenized && !string.IsNullOrEmpty(tokenized.Token)) { paymentMethod.Set("id", tokenized.Token); } else if (builder.PaymentMethod is ICardData cardData) { var card = new JsonDoc() .Set("number", cardData.Number) .Set("expiry_month", cardData.ExpMonth?.ToString().PadLeft(2, '0')) .Set("expiry_year", cardData.ExpYear?.ToString().PadLeft(4, '0').Substring(2, 2)); paymentMethod.Set("card", card); } var notifications = new JsonDoc() .Set("challenge_return_url", gateway.GpApiConfig.ChallengeNotificationUrl) .Set("three_ds_method_return_url", gateway.GpApiConfig.MethodNotificationUrl); var data = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("reference", builder.ReferenceNumber ?? Guid.NewGuid().ToString()) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency", builder.Currency) .Set("country", gateway.GpApiConfig.Country) .Set("preference", builder.ChallengeRequestIndicator?.ToString()) .Set("source", builder.AuthenticationSource.ToString()) .Set("initator", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential?.Initiator)) .Set("stored_credential", storedCredential.HasKeys() ? storedCredential : null) .Set("payment_method", paymentMethod) .Set("notifications", notifications.HasKeys() ? notifications : null); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/authentications", RequestBody = data.ToString(), }); }
public static AccessTokenInfo GenerateTransactionKey(GpApiConfig gpApiConfig) { GpApiConnector connector = new GpApiConnector(gpApiConfig); var data = connector.GetAccessToken(); return(new AccessTokenInfo { Token = data.Token, DataAccountName = data.DataAccountName, DisputeManagementAccountName = data.DisputeManagementAccountName, TokenizationAccountName = data.TokenizationAccountName, TransactionProcessingAccountName = data.TransactionProcessingAccountName, }); }
internal override void ConfigureContainer(ConfiguredServices services) { if (string.IsNullOrEmpty(ServiceUrl)) { if (Environment.Equals(Entities.Environment.TEST)) { ServiceUrl = ServiceEndpoints.GP_API_TEST; } else { ServiceUrl = ServiceEndpoints.GP_API_PRODUCTION; } } var gpApiConfig = new GpApiConfig { AppId = AppId, AppKey = AppKey, SecondsToExpire = SecondsToExpire, IntervalToExpire = IntervalToExpire, Channel = Channel, Language = Language, Country = Country, ServiceUrl = ServiceUrl, Timeout = Timeout, Permissions = Permissions, MethodNotificationUrl = MethodNotificationUrl, RequestLogger = RequestLogger, MerchantContactUrl = MerchantContactUrl, ChallengeNotificationUrl = ChallengeNotificationUrl, WebProxy = WebProxy, DynamicHeaders = DynamicHeaders, MerchantId = MerchantId, AccessTokenInfo = AccessTokenInfo, }; var gateway = new GpApiConnector(gpApiConfig); services.GatewayConnector = gateway; services.ReportingService = gateway; services.SetSecure3dProvider(Secure3dVersion.One, gateway); services.SetSecure3dProvider(Secure3dVersion.Two, gateway); }
internal override void ConfigureContainer(ConfiguredServices services) { if (string.IsNullOrEmpty(ServiceUrl)) { if (Environment.Equals(Entities.Environment.TEST)) { ServiceUrl = ServiceEndpoints.GP_API_TEST; } else { ServiceUrl = ServiceEndpoints.GP_API_PRODUCTION; } } var gateway = new GpApiConnector { AppId = AppId, AppKey = AppKey, SecondsToExpire = SecondsToExpire, IntervalToExpire = IntervalToExpire, Channel = Channel, Language = Language, Country = Country, ServiceUrl = ServiceUrl, Timeout = Timeout, Permissions = Permissions, AccessToken = AccessTokenInfo?.Token, DataAccountName = AccessTokenInfo?.DataAccountName, DisputeManagementAccountName = AccessTokenInfo?.DisputeManagementAccountName, TokenizationAccountName = AccessTokenInfo?.TokenizationAccountName, TransactionProcessingAccountName = AccessTokenInfo?.TransactionProcessingAccountName, ChallengeNotificationUrl = ChallengeNotificationUrl, MethodNotificationUrl = MethodNotificationUrl, RequestLogger = RequestLogger, WebProxy = WebProxy, }; services.GatewayConnector = gateway; services.ReportingService = gateway; services.SetSecure3dProvider(Secure3dVersion.One, gateway); services.SetSecure3dProvider(Secure3dVersion.Two, gateway); }
public static AccessTokenInfo GenerateTransactionKey(Entities.Environment environment, string appId, string appKey, int?secondsToExpire = null, IntervalToExpire?intervalToExpire = null) { var connector = new GpApiConnector { AppId = appId, AppKey = appKey, SecondsToExpire = secondsToExpire, IntervalToExpire = intervalToExpire, ServiceUrl = environment.Equals(Entities.Environment.PRODUCTION) ? ServiceEndpoints.GP_API_PRODUCTION : ServiceEndpoints.GP_API_TEST, Timeout = 10000, }; var data = connector.GetAccessToken(); return(new AccessTokenInfo { Token = data.Token, DataAccountName = data.DataAccountName, DisputeManagementAccountName = data.DisputeManagementAccountName, TokenizationAccountName = data.TokenizationAccountName, TransactionProcessingAccountName = data.TransactionProcessingAccountName, }); }
internal static GpApiRequest BuildRequest(ManagementBuilder builder, GpApiConnector gateway) { if (builder.TransactionType == TransactionType.Capture) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("gratuity_amount", builder.Gratuity.ToNumericCurrencyString()); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/transactions/{builder.TransactionId}/capture", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.Refund) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/transactions/{builder.TransactionId}/refund", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.Reversal) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/transactions/{builder.TransactionId}/reversal", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.TokenUpdate && builder.PaymentMethod is CreditCardData) { var cardData = builder.PaymentMethod as CreditCardData; var card = new JsonDoc() .Set("expiry_month", cardData.ExpMonth.HasValue ? cardData.ExpMonth.ToString().PadLeft(2, '0') : string.Empty) .Set("expiry_year", cardData.ExpYear.HasValue ? cardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : string.Empty); var data = new JsonDoc() .Set("card", card); return(new GpApiRequest { Verb = new HttpMethod("PATCH"), Endpoint = $"/payment-methods/{(builder.PaymentMethod as ITokenizable).Token}", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.TokenDelete && builder.PaymentMethod is ITokenizable) { return(new GpApiRequest { Verb = HttpMethod.Delete, Endpoint = $"/payment-methods/{(builder.PaymentMethod as ITokenizable).Token}", }); } else if (builder.TransactionType == TransactionType.Detokenize && builder.PaymentMethod is ITokenizable) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/payment-methods/{(builder.PaymentMethod as ITokenizable).Token}/detokenize", }); } else if (builder.TransactionType == TransactionType.DisputeAcceptance) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/disputes/{builder.DisputeId}/acceptance", }); } else if (builder.TransactionType == TransactionType.DisputeChallenge) { var data = new JsonDoc() .Set("documents", builder.DisputeDocuments); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/disputes/{builder.DisputeId}/challenge", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.BatchClose) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/batches/{builder.BatchReference}", }); } else if (builder.TransactionType == TransactionType.Reauth) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"/transactions/{builder.TransactionId}/reauthorization", RequestBody = data.ToString(), }); } return(null); }
internal static GpApiRequest BuildRequest <T>(ReportBuilder <T> builder, GpApiConnector gateway) where T : class { if (builder is TransactionReportBuilder <T> trb) { var request = new GpApiRequest(); switch (builder.ReportType) { case ReportType.TransactionDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/transactions/{trb.TransactionId}", }); case ReportType.FindTransactionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/transactions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.TransactionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.TransactionId); request.AddQueryStringParam("type", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.PaymentType)); request.AddQueryStringParam("channel", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.Channel)); request.AddQueryStringParam("amount", trb.SearchBuilder.Amount.ToNumericCurrencyString()); request.AddQueryStringParam("currency", trb.SearchBuilder.Currency); request.AddQueryStringParam("number_first6", trb.SearchBuilder.CardNumberFirstSix); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("token_first6", trb.SearchBuilder.TokenFirstSix); request.AddQueryStringParam("token_last4", trb.SearchBuilder.TokenLastFour); request.AddQueryStringParam("account_name", trb.SearchBuilder.AccountName); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("brand_reference", trb.SearchBuilder.BrandReference); request.AddQueryStringParam("authcode", trb.SearchBuilder.AuthCode); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.TransactionStatus)); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("country", trb.SearchBuilder.Country); request.AddQueryStringParam("batch_id", trb.SearchBuilder.BatchId); request.AddQueryStringParam("entry_mode", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.PaymentEntryMode)); request.AddQueryStringParam("name", trb.SearchBuilder.Name); return(request); case ReportType.FindSettlementTransactionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/settlement/transactions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.TransactionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("number_first6", trb.SearchBuilder.CardNumberFirstSix); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("deposit_status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DepositStatus)); request.AddQueryStringParam("account_name", gateway.DataAccountName); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand_reference", trb.SearchBuilder.BrandReference); request.AddQueryStringParam("authcode", trb.SearchBuilder.AuthCode); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.TransactionStatus)); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("deposit_id", trb.SearchBuilder.DepositReference); request.AddQueryStringParam("from_deposit_time_created", trb.SearchBuilder.StartDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_deposit_time_created", trb.SearchBuilder.EndDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("from_batch_time_created", trb.SearchBuilder.StartBatchDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_batch_time_created", trb.SearchBuilder.EndBatchDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.DepositDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/settlement/deposits/{trb.SearchBuilder.DepositReference}", }); case ReportType.FindDepositsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/settlement/deposits", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DepositOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("account_name", gateway.DataAccountName); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("id", trb.SearchBuilder.DepositReference); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DepositStatus)); request.AddQueryStringParam("amount", trb.SearchBuilder.Amount.ToNumericCurrencyString()); request.AddQueryStringParam("masked_account_number_last4", trb.SearchBuilder.AccountNumberLastFour); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.DisputeDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/disputes/{trb.SearchBuilder.DisputeId}", }); case ReportType.FindDisputesPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/disputes", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DisputeOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStatus)); request.AddQueryStringParam("stage", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStage)); request.AddQueryStringParam("from_stage_time_created", trb.SearchBuilder.StartStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_stage_time_created", trb.SearchBuilder.EndStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.SettlementDisputeDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/settlement/disputes/{trb.SearchBuilder.SettlementDisputeId}", }); case ReportType.FindSettlementDisputesPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/settlement/disputes", }; request.AddQueryStringParam("account_name", gateway.DataAccountName); request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DisputeOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("STATUS", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStatus)); request.AddQueryStringParam("stage", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStage)); request.AddQueryStringParam("from_stage_time_created", trb.SearchBuilder.StartStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_stage_time_created", trb.SearchBuilder.EndStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.StoredPaymentMethodDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/payment-methods/{trb.SearchBuilder.StoredPaymentMethodId}", }); case ReportType.FindStoredPaymentMethodsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/payment-methods", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.StoredPaymentMethodOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.SearchBuilder.StoredPaymentMethodId); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.StoredPaymentMethodStatus)); request.AddQueryStringParam("from_time_created", trb.SearchBuilder.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.SearchBuilder.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("from_time_last_updated", trb.SearchBuilder.StartLastUpdatedDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_last_updated", trb.SearchBuilder.EndLastUpdatedDate?.ToString("yyyy-MM-dd")); return(request); case ReportType.ActionDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"/actions/{trb.SearchBuilder.ActionId}", }); case ReportType.FindActionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = "/actions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.ActionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.SearchBuilder.ActionId); request.AddQueryStringParam("type", trb.SearchBuilder.ActionType); request.AddQueryStringParam("resource", trb.SearchBuilder.Resource); request.AddQueryStringParam("resource_status", trb.SearchBuilder.ResourceStatus); request.AddQueryStringParam("resource_id", trb.SearchBuilder.ResourceId); request.AddQueryStringParam("from_time_created", trb.SearchBuilder.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.SearchBuilder.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("merchant_name", trb.SearchBuilder.MerchantName); request.AddQueryStringParam("account_name", trb.SearchBuilder.AccountName); request.AddQueryStringParam("app_name", trb.SearchBuilder.AppName); request.AddQueryStringParam("version", trb.SearchBuilder.Version); request.AddQueryStringParam("response_code", trb.SearchBuilder.ResponseCode); request.AddQueryStringParam("http_response_code", trb.SearchBuilder.HttpResponseCode); return(request); } } return(null); }
internal static GpApiRequest BuildRequest(AuthorizationBuilder builder, GpApiConnector gateway) { var paymentMethod = new JsonDoc() .Set("entry_mode", GetEntryMode(builder)); // [MOTO, ECOM, IN_APP, CHIP, SWIPE, MANUAL, CONTACTLESS_CHIP, CONTACTLESS_SWIPE] if (builder.PaymentMethod is ICardData) { var cardData = builder.PaymentMethod as ICardData; var card = new JsonDoc() .Set("number", cardData.Number) .Set("expiry_month", cardData.ExpMonth.HasValue ? cardData.ExpMonth.ToString().PadLeft(2, '0') : null) .Set("expiry_year", cardData.ExpYear.HasValue ? cardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : null) //.Set("track", "") .Set("tag", builder.TagData) .Set("cvv", cardData.Cvn) .Set("cvv_indicator", EnumConverter.GetMapping(Target.GP_API, cardData.CvnPresenceIndicator)) // [ILLEGIBLE, NOT_PRESENT, PRESENT] .Set("avs_address", builder.BillingAddress?.StreetAddress1) .Set("avs_postal_code", builder.BillingAddress?.PostalCode) .Set("funding", builder.PaymentMethod?.PaymentMethodType == PaymentMethodType.Debit ? "DEBIT" : "CREDIT") // [DEBIT, CREDIT] .Set("authcode", builder.OfflineAuthCode); //.Set("brand_reference", "") card.Set("chip_condition", EnumConverter.GetMapping(Target.GP_API, builder.EmvChipCondition)); // [PREV_SUCCESS, PREV_FAILED] paymentMethod.Set("card", card); var tokenizationData = new JsonDoc() .Set("account_name", gateway.TokenizationAccountName) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("usage_mode", EnumConverter.GetMapping(Target.GP_API, builder.TokenUsageMode)) .Set("name", "") .Set("card", card); if (builder.TransactionType == TransactionType.Tokenize) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = "/payment-methods", RequestBody = tokenizationData.ToString(), }); } else if (builder.TransactionType == TransactionType.Verify) { if (builder.RequestMultiUseToken && string.IsNullOrEmpty((builder.PaymentMethod as ITokenizable).Token)) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = "/payment-methods", RequestBody = tokenizationData.ToString(), }); } else { var verificationData = new JsonDoc() .Set("account_name", gateway.TransactionProcessingAccountName) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.Channel)) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("currency", builder.Currency) .Set("country", gateway.Country) .Set("payment_method", paymentMethod); if (builder.PaymentMethod is ITokenizable && !string.IsNullOrEmpty((builder.PaymentMethod as ITokenizable).Token)) { verificationData.Remove("payment_method"); verificationData.Set("payment_method", new JsonDoc() .Set("entry_mode", GetEntryMode(builder)) .Set("id", (builder.PaymentMethod as ITokenizable).Token) ); } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = "/verifications", RequestBody = verificationData.ToString(), }); } } } else if (builder.PaymentMethod is ITrackData) { var track = builder.PaymentMethod as ITrackData; var card = new JsonDoc() .Set("track", track.Value) .Set("tag", builder.TagData) .Set("avs_address", builder.BillingAddress?.StreetAddress1) .Set("avs_postal_code", builder.BillingAddress?.PostalCode) .Set("authcode", builder.OfflineAuthCode); if (builder.TransactionType == TransactionType.Verify) { paymentMethod.Set("card", card); var verificationData = new JsonDoc() .Set("account_name", gateway.TransactionProcessingAccountName) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.Channel)) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("currency", builder.Currency) .Set("country", gateway.Country) .Set("payment_method", paymentMethod); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = "/verifications", RequestBody = verificationData.ToString(), }); } if (builder.TransactionType == TransactionType.Sale || builder.TransactionType == TransactionType.Refund) { if (string.IsNullOrEmpty(track.Value)) { card.Set("number", track.Pan); card.Set("expiry_month", track.Expiry?.Substring(2, 2)); card.Set("expiry_year", track.Expiry?.Substring(0, 2)); } if (string.IsNullOrEmpty(builder.TagData)) { card.Set("chip_condition", EnumConverter.GetMapping(Target.GP_API, builder.EmvChipCondition)); // [PREV_SUCCESS, PREV_FAILED] } } if (builder.TransactionType == TransactionType.Sale) { card.Set("funding", builder.PaymentMethod?.PaymentMethodType == PaymentMethodType.Debit ? "DEBIT" : "CREDIT"); // [DEBIT, CREDIT] } paymentMethod.Set("card", card); } // payment method storage mode if (builder.RequestMultiUseToken) { //ToDo: there might be a typo: should be storage_mode paymentMethod.Set("storage_model", "ON_SUCCESS"); } // tokenized payment method if (builder.PaymentMethod is ITokenizable) { string token = ((ITokenizable)builder.PaymentMethod).Token; if (!string.IsNullOrEmpty(token)) { paymentMethod.Set("id", token); } } // pin block if (builder.PaymentMethod is IPinProtected) { paymentMethod.Get("card")?.Set("pin_block", ((IPinProtected)builder.PaymentMethod).PinBlock); } // authentication if (builder.PaymentMethod is CreditCardData) { paymentMethod.Set("name", (builder.PaymentMethod as CreditCardData).CardHolderName); var secureEcom = (builder.PaymentMethod as CreditCardData).ThreeDSecure; if (secureEcom != null) { var three_ds = new JsonDoc() // Indicates the version of 3DS .Set("message_version", secureEcom.MessageVersion) // An indication of the degree of the authentication and liability shift obtained for this transaction. // It is determined during the 3D Secure process. .Set("eci", secureEcom.Eci) // The authentication value created as part of the 3D Secure process. .Set("value", secureEcom.AuthenticationValue) // The reference created by the 3DSecure provider to identify the specific authentication attempt. .Set("server_trans_ref", secureEcom.ServerTransactionId) // The reference created by the 3DSecure Directory Server to identify the specific authentication attempt. .Set("ds_trans_ref", secureEcom.DirectoryServerTransactionId); var authentication = new JsonDoc().Set("three_ds", three_ds); paymentMethod.Set("authentication", authentication); } } // encryption if (builder.PaymentMethod is IEncryptable) { var encryptionData = ((IEncryptable)builder.PaymentMethod).EncryptionData; if (encryptionData != null) { var encryption = new JsonDoc() .Set("version", encryptionData.Version); if (!string.IsNullOrEmpty(encryptionData.KTB)) { encryption.Set("method", "KTB"); encryption.Set("info", encryptionData.KTB); } else if (!string.IsNullOrEmpty(encryptionData.KSN)) { encryption.Set("method", "KSN"); encryption.Set("info", encryptionData.KSN); } if (encryption.Has("info")) { paymentMethod.Set("encryption", encryption); } } } var data = new JsonDoc() .Set("account_name", gateway.TransactionProcessingAccountName) .Set("type", builder.TransactionType == TransactionType.Refund ? "REFUND" : "SALE") // [SALE, REFUND] .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.Channel)) // [CP, CNP] .Set("capture_mode", GetCaptureMode(builder)) // [AUTO, LATER, MULTIPLE] //.Set("remaining_capture_count", "") //Pending Russell .Set("authorization_mode", builder.AllowPartialAuth ? "PARTIAL" : null) .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency", builder.Currency) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("description", builder.Description) //.Set("order_reference", builder.OrderId) .Set("gratuity_amount", builder.Gratuity.ToNumericCurrencyString()) .Set("cashback_amount", builder.CashBackAmount.ToNumericCurrencyString()) .Set("surcharge_amount", builder.SurchargeAmount.ToNumericCurrencyString()) .Set("convenience_amount", builder.ConvenienceAmount.ToNumericCurrencyString()) .Set("country", gateway.Country) //.Set("language", EnumConverter.GetMapping(Target.GP_API, Language)) .Set("ip_address", builder.CustomerIpAddress) //.Set("site_reference", "") // .Set("payment_method", paymentMethod); // set order reference if (!string.IsNullOrEmpty(builder.OrderId)) { var order = new JsonDoc() .Set("reference", builder.OrderId); data.Set("order", order); } // stored credential if (builder.StoredCredential != null) { data.Set("initiator", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Initiator)); var storedCredential = new JsonDoc() .Set("model", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Type)) .Set("reason", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Reason)) .Set("sequence", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Sequence)); data.Set("stored_credential", storedCredential); } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = "/transactions", RequestBody = data.ToString(), }); }
internal static GpApiRequest BuildRequest(AuthorizationBuilder builder, GpApiConnector gateway) { var merchantUrl = !string.IsNullOrEmpty(gateway.GpApiConfig.MerchantId) ? $"/merchants/{gateway.GpApiConfig.MerchantId}" : string.Empty; var paymentMethod = new JsonDoc() .Set("entry_mode", GetEntryMode(builder, gateway.GpApiConfig.Channel)); // [MOTO, ECOM, IN_APP, CHIP, SWIPE, MANUAL, CONTACTLESS_CHIP, CONTACTLESS_SWIPE] paymentMethod.Set("narrative", !string.IsNullOrEmpty(builder.DynamicDescriptor) ? builder.DynamicDescriptor : null); if (builder.PaymentMethod is CreditCardData && (builder.TransactionModifier == TransactionModifier.EncryptedMobile || builder.TransactionModifier == TransactionModifier.DecryptedMobile)) { var digitalWallet = new JsonDoc(); var creditCardData = (builder.PaymentMethod as CreditCardData); //Digital Wallet if (builder.TransactionModifier == TransactionModifier.EncryptedMobile) { digitalWallet .Set("payment_token", JsonDoc.Parse(creditCardData.Token)); } else if (builder.TransactionModifier == TransactionModifier.DecryptedMobile) { var tokenFormat = DigitalWalletTokenFormat.CARD_NUMBER; digitalWallet .Set("token", creditCardData.Token) .Set("token_format", DigitalWalletTokenFormat.CARD_NUMBER) .Set("expiry_month", creditCardData.ExpMonth.HasValue ? creditCardData.ExpMonth.ToString().PadLeft(2, '0') : null) .Set("expiry_year", creditCardData.ExpYear.HasValue ? creditCardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : null) .Set("cryptogram", creditCardData.Cryptogram) .Set("eci", creditCardData.Eci); } digitalWallet.Set("provider", (builder.PaymentMethod as CreditCardData).MobileType); paymentMethod.Set("digital_wallet", digitalWallet); } else { if (builder.PaymentMethod is ICardData) { var cardData = builder.PaymentMethod as ICardData; var card = new JsonDoc() .Set("number", cardData.Number) .Set("expiry_month", cardData.ExpMonth.HasValue ? cardData.ExpMonth.ToString().PadLeft(2, '0') : null) .Set("expiry_year", cardData.ExpYear.HasValue ? cardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : null) //.Set("track", "") .Set("tag", builder.TagData) .Set("cvv", cardData.Cvn) .Set("avs_address", builder.BillingAddress?.StreetAddress1) .Set("avs_postal_code", builder.BillingAddress?.PostalCode) .Set("authcode", builder.OfflineAuthCode) .Set("brand_reference", builder.CardBrandTransactionId); card.Set("chip_condition", EnumConverter.GetMapping(Target.GP_API, builder.EmvChipCondition)); // [PREV_SUCCESS, PREV_FAILED] if (!(builder.TransactionType == TransactionType.Tokenize || builder.TransactionType == TransactionType.Verify)) { card.Set("cvv_indicator", cardData.CvnPresenceIndicator != 0 ? EnumConverter.GetMapping(Target.GP_API, cardData.CvnPresenceIndicator) : null); // [ILLEGIBLE, NOT_PRESENT, PRESENT] card.Set("funding", builder.PaymentMethod?.PaymentMethodType == PaymentMethodType.Debit ? "DEBIT" : "CREDIT"); // [DEBIT, CREDIT] } var hasToken = builder.PaymentMethod is ITokenizable tokenData && !string.IsNullOrEmpty(tokenData.Token); if (!hasToken) { paymentMethod.Set("card", card); } if (builder.TransactionType == TransactionType.Tokenize) { var tokenizationData = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TokenizationAccountName) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("usage_mode", EnumConverter.GetMapping(Target.GP_API, builder.PaymentMethodUsageMode)) .Set("card", card); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/payment-methods", RequestBody = tokenizationData.ToString(), }); } else if (builder.TransactionType == TransactionType.DccRateLookup) { // tokenized payment method if (builder.PaymentMethod is ITokenizable) { string token = ((ITokenizable)builder.PaymentMethod).Token; if (!string.IsNullOrEmpty(token)) { paymentMethod.Set("id", token); } } var RequestData = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency", builder.Currency) .Set("country", gateway.GpApiConfig.Country) .Set("payment_method", paymentMethod); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/currency-conversions", RequestBody = RequestData.ToString(), }); } else if (builder.TransactionType == TransactionType.Verify) { if (builder.RequestMultiUseToken && string.IsNullOrEmpty((builder.PaymentMethod as ITokenizable).Token)) { var tokenizationData = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TokenizationAccountName) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("usage_mode", EnumConverter.GetMapping(Target.GP_API, builder.PaymentMethodUsageMode)) .Set("fingerprint_mode", builder.CustomerData?.DeviceFingerPrint ?? null) .Set("card", card); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/payment-methods", RequestBody = tokenizationData.ToString(), }); } else { var verificationData = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("currency", builder.Currency) .Set("country", gateway.GpApiConfig.Country) .Set("payment_method", paymentMethod); if (builder.PaymentMethod is ITokenizable && !string.IsNullOrEmpty((builder.PaymentMethod as ITokenizable).Token)) { verificationData.Remove("payment_method"); verificationData.Set("payment_method", new JsonDoc() .Set("entry_mode", GetEntryMode(builder, gateway.GpApiConfig.Channel)) .Set("id", (builder.PaymentMethod as ITokenizable).Token) .Set("fingerprint_mode", builder.CustomerData?.DeviceFingerPrint ?? null) ); } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/verifications", RequestBody = verificationData.ToString(), }); } } } else if (builder.PaymentMethod is ITrackData) { var track = builder.PaymentMethod as ITrackData; var card = new JsonDoc() .Set("track", track.Value) .Set("tag", builder.TagData) .Set("avs_address", builder.BillingAddress?.StreetAddress1) .Set("avs_postal_code", builder.BillingAddress?.PostalCode) .Set("authcode", builder.OfflineAuthCode); if (builder.TransactionType == TransactionType.Verify) { paymentMethod.Set("card", card); var verificationData = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("currency", builder.Currency) .Set("country", gateway.GpApiConfig.Country) .Set("payment_method", paymentMethod) .Set("fingerprint_mode", builder.CustomerData?.DeviceFingerPrint ?? null); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/verifications", RequestBody = verificationData.ToString(), }); } if (builder.TransactionType == TransactionType.Sale || builder.TransactionType == TransactionType.Refund) { if (string.IsNullOrEmpty(track.Value)) { card.Set("number", track.Pan); card.Set("expiry_month", track.Expiry?.Substring(2, 2)); card.Set("expiry_year", track.Expiry?.Substring(0, 2)); } if (string.IsNullOrEmpty(builder.TagData)) { card.Set("chip_condition", EnumConverter.GetMapping(Target.GP_API, builder.EmvChipCondition)); // [PREV_SUCCESS, PREV_FAILED] } } if (builder.TransactionType == TransactionType.Sale) { card.Set("funding", builder.PaymentMethod?.PaymentMethodType == PaymentMethodType.Debit ? "DEBIT" : "CREDIT"); // [DEBIT, CREDIT] } paymentMethod.Set("card", card); } // tokenized payment method if (builder.PaymentMethod is ITokenizable) { string token = ((ITokenizable)builder.PaymentMethod).Token; if (!string.IsNullOrEmpty(token)) { paymentMethod.Set("id", token); } } } // payment method storage mode if (builder.RequestMultiUseToken) { //ToDo: there might be a typo: should be storage_mode paymentMethod.Set("storage_mode", "ON_SUCCESS"); } // pin block if (builder.PaymentMethod is IPinProtected) { paymentMethod.Get("card")?.Set("pin_block", ((IPinProtected)builder.PaymentMethod).PinBlock); } // authentication if (builder.PaymentMethod is CreditCardData) { paymentMethod.Set("name", (builder.PaymentMethod as CreditCardData).CardHolderName); var secureEcom = (builder.PaymentMethod as CreditCardData).ThreeDSecure; if (secureEcom != null) { var authentication = new JsonDoc().Set("id", secureEcom.ServerTransactionId); paymentMethod.Set("authentication", authentication); } paymentMethod.Set("fingerprint_mode", builder.CustomerData?.DeviceFingerPrint ?? null); } if (builder.PaymentMethod is EBT) { paymentMethod.Set("name", (builder.PaymentMethod as EBT).CardHolderName); } if (builder.PaymentMethod is eCheck) { eCheck check = (builder.PaymentMethod as eCheck); paymentMethod.Set("name", check.CheckHolderName); var bankTransfer = new JsonDoc() .Set("account_number", check.AccountNumber) .Set("account_type", (check.AccountType != null) ? EnumConverter.GetMapping(Target.GP_API, check.AccountType) : null) .Set("check_reference", check.CheckReference) .Set("sec_code", check.SecCode) .Set("narrative", check.MerchantNotes); var bank = new JsonDoc() .Set("code", check.RoutingNumber) .Set("name", check.BankName); var address = new JsonDoc() .Set("line_1", check.BankAddress?.StreetAddress1) .Set("line_2", check.BankAddress?.StreetAddress2) .Set("line_3", check.BankAddress?.StreetAddress3) .Set("city", check.BankAddress?.City) .Set("postal_code", check.BankAddress?.PostalCode) .Set("state", check.BankAddress?.State) .Set("country", check.BankAddress?.CountryCode); bank.Set("address", address); bankTransfer.Set("bank", bank); paymentMethod.Set("bank_transfer", bankTransfer); } if (builder.PaymentMethod is AlternativePaymentMethod) { var alternatepaymentMethod = (AlternativePaymentMethod)builder.PaymentMethod; paymentMethod.Set("name", alternatepaymentMethod.AccountHolderName); var apm = new JsonDoc() .Set("provider", alternatepaymentMethod.AlternativePaymentMethodType?.ToString()?.ToLower()) .Set("address_override_mode", alternatepaymentMethod.AddressOverrideMode); paymentMethod.Set("apm", apm); } // encryption if (builder.PaymentMethod is IEncryptable) { var encryptionData = ((IEncryptable)builder.PaymentMethod).EncryptionData; if (encryptionData != null) { var encryption = new JsonDoc() .Set("version", encryptionData.Version); if (!string.IsNullOrEmpty(encryptionData.KTB)) { encryption.Set("method", "KTB"); encryption.Set("info", encryptionData.KTB); } else if (!string.IsNullOrEmpty(encryptionData.KSN)) { encryption.Set("method", "KSN"); encryption.Set("info", encryptionData.KSN); } if (encryption.Has("info")) { paymentMethod.Set("encryption", encryption); } } } if (builder.TransactionType == TransactionType.Create && builder.PayLinkData is PayLinkData) { var payLinkData = builder.PayLinkData; var requestData = new JsonDoc() .Set("usage_limit", payLinkData.UsageLimit.ToString()) .Set("usage_mode", EnumConverter.GetMapping(Target.GP_API, payLinkData.UsageMode)) .Set("images", payLinkData.Images) .Set("description", builder.Description ?? null) .Set("type", payLinkData.Type?.ToString()) .Set("expiration_date", payLinkData.ExpirationDate ?? null); var transaction = new JsonDoc() .Set("country", gateway.GpApiConfig.Country) .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) .Set("currency", builder.Currency) .Set("allowed_payment_methods", GetAllowedPaymentMethod(payLinkData.AllowedPaymentMethods)); requestData.Set("transactions", transaction) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("shipping_amount", payLinkData.ShippingAmount.ToNumericCurrencyString()) .Set("shippable", payLinkData.IsShippable?.ToString() ?? false.ToString()) .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("name", payLinkData.Name ?? null); var notification = new JsonDoc() .Set("cancel_url", payLinkData.CancelUrl) .Set("return_url", payLinkData.ReturnUrl) .Set("status_url", payLinkData.StatusUpdateUrl); requestData.Set("notifications", notification) .Set("status", payLinkData.Status.ToString()); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/links", RequestBody = requestData.ToString(), }); } var data = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TransactionProcessingAccountName) .Set("type", builder.TransactionType == TransactionType.Refund ? "REFUND" : "SALE") // [SALE, REFUND] .Set("channel", EnumConverter.GetMapping(Target.GP_API, gateway.GpApiConfig.Channel)) // [CP, CNP] .Set("capture_mode", GetCaptureMode(builder)) // [AUTO, LATER, MULTIPLE] //.Set("remaining_capture_count", "") //Pending Russell .Set("authorization_mode", builder.AllowPartialAuth ? "PARTIAL" : null) .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency", builder.Currency) .Set("reference", builder.ClientTransactionId ?? Guid.NewGuid().ToString()) .Set("description", builder.Description) //.Set("order_reference", builder.OrderId) .Set("gratuity_amount", builder.Gratuity.ToNumericCurrencyString()) .Set("cashback_amount", builder.CashBackAmount.ToNumericCurrencyString()) .Set("surcharge_amount", builder.SurchargeAmount.ToNumericCurrencyString()) .Set("convenience_amount", builder.ConvenienceAmount.ToNumericCurrencyString()) .Set("country", gateway.GpApiConfig.Country) //.Set("language", EnumConverter.GetMapping(Target.GP_API, Language)) .Set("ip_address", builder.CustomerIpAddress) //.Set("site_reference", "") // .Set("currency_conversion", !string.IsNullOrEmpty(builder.DccRateData?.DccId) ? new JsonDoc().Set("id", builder.DccRateData.DccId) : null) .Set("payment_method", paymentMethod) .Set("link", !string.IsNullOrEmpty(builder.PaymentLinkId) ? new JsonDoc() .Set("id", builder.PaymentLinkId) : null); if (builder.PaymentMethod is eCheck || builder.PaymentMethod is AlternativePaymentMethod) { data.Set("payer", SetPayerInformation(builder)); } // set order reference if (!string.IsNullOrEmpty(builder.OrderId)) { var order = new JsonDoc() .Set("reference", builder.OrderId); data.Set("order", order); } if (builder.PaymentMethod is AlternativePaymentMethod) { setOrderInformation(builder, ref data); var alternatepaymentMethod = (AlternativePaymentMethod)builder.PaymentMethod; var notifications = new JsonDoc() .Set("return_url", alternatepaymentMethod?.ReturnUrl) .Set("status_url", alternatepaymentMethod?.StatusUpdateUrl) .Set("cancel_url", alternatepaymentMethod?.CancelUrl); data.Set("notifications", notifications); } // stored credential if (builder.StoredCredential != null) { data.Set("initiator", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Initiator)); var storedCredential = new JsonDoc() .Set("model", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Type)) .Set("reason", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Reason)) .Set("sequence", EnumConverter.GetMapping(Target.GP_API, builder.StoredCredential.Sequence)); data.Set("stored_credential", storedCredential); } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions", RequestBody = data.ToString(), }); }
internal static GpApiRequest BuildRequest(ManagementBuilder builder, GpApiConnector gateway) { var merchantUrl = !string.IsNullOrEmpty(gateway.GpApiConfig.MerchantId) ? $"/merchants/{gateway.GpApiConfig.MerchantId}" : string.Empty; if (builder.TransactionType == TransactionType.Capture) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("gratuity_amount", builder.Gratuity.ToNumericCurrencyString()) .Set("currency_conversion", builder.DccRateData?.DccId ?? null); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/capture", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.Refund) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency_conversion", builder.DccRateData == null ? null : new JsonDoc() .Set("id", builder.DccRateData?.DccId)); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/refund", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.Reversal) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("currency_conversion", builder.DccRateData?.DccId ?? null); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/reversal", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.TokenUpdate) { if (!(builder.PaymentMethod is CreditCardData)) { throw new GatewayException("Payment method doesn't support this action!"); } var cardData = builder.PaymentMethod as CreditCardData; var card = new JsonDoc() .Set("expiry_month", cardData.ExpMonth.HasValue ? cardData.ExpMonth.ToString().PadLeft(2, '0') : string.Empty) .Set("expiry_year", cardData.ExpYear.HasValue ? cardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : string.Empty); var data = new JsonDoc() .Set("usage_mode", !string.IsNullOrEmpty(builder.PaymentMethodUsageMode.ToString()) ? EnumConverter.GetMapping(Target.GP_API, builder.PaymentMethodUsageMode) : null) .Set("name", !string.IsNullOrEmpty(cardData.CardHolderName) ? cardData.CardHolderName : null) .Set("card", card); return(new GpApiRequest { Verb = new HttpMethod("PATCH"), Endpoint = $"{merchantUrl}/payment-methods/{(builder.PaymentMethod as ITokenizable).Token}", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.TokenDelete && builder.PaymentMethod is ITokenizable) { return(new GpApiRequest { Verb = HttpMethod.Delete, Endpoint = $"{merchantUrl}/payment-methods/{(builder.PaymentMethod as ITokenizable).Token}", }); } else if (builder.TransactionType == TransactionType.DisputeAcceptance) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/disputes/{builder.DisputeId}/acceptance", }); } else if (builder.TransactionType == TransactionType.DisputeChallenge) { var data = new JsonDoc() .Set("documents", builder.DisputeDocuments); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/disputes/{builder.DisputeId}/challenge", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.BatchClose) { return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/batches/{builder.BatchReference}", }); } else if (builder.TransactionType == TransactionType.Reauth) { var data = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()); if (builder.PaymentMethod.PaymentMethodType == PaymentMethodType.ACH) { data.Set("description", builder.Description); if (builder.BankTransferDetails != null) { var eCheck = builder.BankTransferDetails; var paymentMethod = new JsonDoc() .Set("narrative", eCheck.MerchantNotes); var bankTransfer = new JsonDoc() .Set("account_number", eCheck.AccountNumber) .Set("account_type", (eCheck.AccountType != null) ? EnumConverter.GetMapping(Target.GP_API, eCheck.AccountType) : null) .Set("check_reference", eCheck.CheckReference); var bank = new JsonDoc() .Set("code", eCheck.RoutingNumber) .Set("name", eCheck.BankName); bankTransfer.Set("bank", bank); paymentMethod.Set("bank_transfer", bankTransfer); data.Set("payment_method", paymentMethod); } } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/reauthorization", RequestBody = data.ToString(), }); } else if (builder.TransactionType == TransactionType.Confirm) { if (builder.PaymentMethod is TransactionReference && builder.PaymentMethod.PaymentMethodType == PaymentMethodType.APM) { var transactionReference = (TransactionReference)builder.PaymentMethod; var apmResponse = transactionReference.AlternativePaymentResponse; var apm = new JsonDoc() .Set("provider", apmResponse?.ProviderName) .Set("provider_payer_reference", apmResponse?.ProviderReference); var payment_method = new JsonDoc() .Set("apm", apm); var data = new JsonDoc() .Set("payment_method", payment_method); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/confirmation", RequestBody = data.ToString(), }); } } else if (builder.TransactionType == TransactionType.Auth) { var payload = new JsonDoc(); payload.Set("amount", builder.Amount); if (builder.LodgingData != null) { var lodging = builder.LodgingData; if (lodging.Items != null) { var lodginItems = new List <LodgingItems>(); foreach (var item in lodging.Items) { lodginItems.Add(new LodgingItems { Types = item.Types, Reference = item.Reference, TotalAmount = item.TotalAmount, paymentMethodProgramCodes = item.paymentMethodProgramCodes }); } var lodgingData = new JsonDoc() .Set("booking_reference", lodging.bookingReference) .Set("duration_days", lodging.StayDuration) .Set("date_checked_in", lodging.CheckInDate?.ToString("yyyy-MM-dd")) .Set("date_checked_out", lodging.CheckOutDate?.ToString("yyyy-MM-dd")) .Set("daily_rate_amount", lodging.Rate.ToNumericCurrencyString()) .Set("charge_items", lodginItems); payload.Set("lodging", lodgingData); } return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/incremental", RequestBody = payload.ToString(), }); } } else if (builder.TransactionType == TransactionType.Edit) { var card = new JsonDoc() .Set("tag", builder.TagData); var payment_method = new JsonDoc() .Set("card", card); var payload = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString()) .Set("gratuity_amount", builder.Gratuity.ToNumericCurrencyString()) .Set("payment_method", payment_method); return(new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/transactions/{builder.TransactionId}/adjustment", RequestBody = payload.ToString(), }); } else if (builder.TransactionType == TransactionType.PayLinkUpdate) { var payLinkData = builder.PayLinkData; var payload = new JsonDoc() .Set("usage_mode", EnumConverter.GetMapping(Target.GP_API, payLinkData.UsageMode) ?? null) .Set("usage_limit", payLinkData.UsageLimit ?? null) .Set("name", payLinkData.Name ?? null) .Set("description", builder.Description ?? null) .Set("type", payLinkData.Type.ToString() ?? null) .Set("status", payLinkData.Status.ToString() ?? null) .Set("shippable", payLinkData.IsShippable?.ToString() ?? null) .Set("shipping_amount", payLinkData.ShippingAmount.ToNumericCurrencyString()); var transaction = new JsonDoc() .Set("amount", builder.Amount.ToNumericCurrencyString() ?? null); payload.Set("transactions", transaction) .Set("expiration_date", payLinkData.ExpirationDate ?? null) .Set("images", payLinkData.Images ?? null); return(new GpApiRequest { Verb = new HttpMethod("PATCH"), Endpoint = $"{merchantUrl}/links/{builder.PaymentLinkId}", RequestBody = payload.ToString(), }); } return(null); }
internal static GpApiRequest BuildRequest <T>(ReportBuilder <T> builder, GpApiConnector gateway) where T : class { var merchantUrl = !string.IsNullOrEmpty(gateway.GpApiConfig.MerchantId) ? $"/merchants/{gateway.GpApiConfig.MerchantId}" : string.Empty; if (builder is TransactionReportBuilder <T> trb) { var request = new GpApiRequest(); switch (builder.ReportType) { case ReportType.TransactionDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/transactions/{trb.TransactionId}", }); case ReportType.FindTransactionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/transactions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.TransactionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.TransactionId); request.AddQueryStringParam("type", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.PaymentType)); request.AddQueryStringParam("channel", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.Channel)); request.AddQueryStringParam("amount", trb.SearchBuilder.Amount.ToNumericCurrencyString()); request.AddQueryStringParam("currency", trb.SearchBuilder.Currency); request.AddQueryStringParam("number_first6", trb.SearchBuilder.CardNumberFirstSix); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("token_first6", trb.SearchBuilder.TokenFirstSix); request.AddQueryStringParam("token_last4", trb.SearchBuilder.TokenLastFour); request.AddQueryStringParam("account_name", trb.SearchBuilder.AccountName); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("brand_reference", trb.SearchBuilder.BrandReference); request.AddQueryStringParam("authcode", trb.SearchBuilder.AuthCode); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.TransactionStatus)); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("country", trb.SearchBuilder.Country); request.AddQueryStringParam("batch_id", trb.SearchBuilder.BatchId); request.AddQueryStringParam("entry_mode", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.PaymentEntryMode)); request.AddQueryStringParam("name", trb.SearchBuilder.Name); request.AddQueryStringParam("payment_method", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.PaymentMethodName)); return(request); case ReportType.FindSettlementTransactionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/settlement/transactions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.TransactionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("number_first6", trb.SearchBuilder.CardNumberFirstSix); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("deposit_status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DepositStatus)); request.AddQueryStringParam("account_name", gateway.GpApiConfig.AccessTokenInfo.DataAccountName); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand_reference", trb.SearchBuilder.BrandReference); request.AddQueryStringParam("authcode", trb.SearchBuilder.AuthCode); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.TransactionStatus)); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("deposit_id", trb.SearchBuilder.DepositReference); request.AddQueryStringParam("from_deposit_time_created", trb.SearchBuilder.StartDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_deposit_time_created", trb.SearchBuilder.EndDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("from_batch_time_created", trb.SearchBuilder.StartBatchDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_batch_time_created", trb.SearchBuilder.EndBatchDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.DepositDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/settlement/deposits/{trb.SearchBuilder.DepositReference}", }); case ReportType.FindDepositsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/settlement/deposits", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DepositOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("account_name", gateway.GpApiConfig.AccessTokenInfo.DataAccountName); request.AddQueryStringParam("from_time_created", trb.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("id", trb.SearchBuilder.DepositReference); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DepositStatus)); request.AddQueryStringParam("amount", trb.SearchBuilder.Amount.ToNumericCurrencyString()); request.AddQueryStringParam("masked_account_number_last4", trb.SearchBuilder.AccountNumberLastFour); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.DisputeDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/disputes/{trb.SearchBuilder.DisputeId}", }); case ReportType.DocumentDisputeDetail: var apiRequest = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/disputes/{trb.SearchBuilder.DisputeId}/documents/{trb.SearchBuilder.DisputeDocumentId}", }; return(apiRequest); case ReportType.FindDisputesPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/disputes", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DisputeOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStatus)); request.AddQueryStringParam("stage", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStage)); request.AddQueryStringParam("from_stage_time_created", trb.SearchBuilder.StartStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_stage_time_created", trb.SearchBuilder.EndStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.SettlementDisputeDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/settlement/disputes/{trb.SearchBuilder.SettlementDisputeId}", }); case ReportType.FindSettlementDisputesPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/settlement/disputes", }; request.AddQueryStringParam("account_name", gateway.GpApiConfig.AccessTokenInfo.DataAccountName); request.AddQueryStringParam("deposit_id", trb.SearchBuilder.DepositReference); request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.DisputeOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("arn", trb.SearchBuilder.AquirerReferenceNumber); request.AddQueryStringParam("brand", trb.SearchBuilder.CardBrand); request.AddQueryStringParam("STATUS", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStatus)); request.AddQueryStringParam("stage", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.DisputeStage)); request.AddQueryStringParam("from_stage_time_created", trb.SearchBuilder.StartStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_stage_time_created", trb.SearchBuilder.EndStageDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("from_deposit_time_created", trb.SearchBuilder.StartDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_deposit_time_created", trb.SearchBuilder.EndDepositDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("system.mid", trb.SearchBuilder.MerchantId); request.AddQueryStringParam("system.hierarchy", trb.SearchBuilder.SystemHierarchy); return(request); case ReportType.StoredPaymentMethodDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/payment-methods/{trb.SearchBuilder.StoredPaymentMethodId}", }); case ReportType.FindStoredPaymentMethodsPaged: if (trb.SearchBuilder.PaymentMethod is CreditCardData) { var creditCardData = trb.SearchBuilder.PaymentMethod as CreditCardData; var card = new JsonDoc() .Set("number", creditCardData.Number) .Set("expiry_month", creditCardData.ExpMonth.HasValue ? creditCardData.ExpMonth.ToString().PadLeft(2, '0') : null) .Set("expiry_year", creditCardData.ExpYear.HasValue ? creditCardData.ExpYear.ToString().PadLeft(4, '0').Substring(2, 2) : null); var payload = new JsonDoc() .Set("account_name", gateway.GpApiConfig.AccessTokenInfo.TokenizationAccountName) .Set("reference", trb.SearchBuilder.ReferenceNumber) .Set("card", card != null ? card : null); request = new GpApiRequest { Verb = HttpMethod.Post, Endpoint = $"{merchantUrl}/payment-methods/search", RequestBody = payload.ToString() }; return(request); } request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/payment-methods", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.StoredPaymentMethodOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.SearchBuilder.StoredPaymentMethodId); request.AddQueryStringParam("number_last4", trb.SearchBuilder.CardNumberLastFour); request.AddQueryStringParam("reference", trb.SearchBuilder.ReferenceNumber); request.AddQueryStringParam("status", EnumConverter.GetMapping(Target.GP_API, trb.SearchBuilder.StoredPaymentMethodStatus)); request.AddQueryStringParam("from_time_created", trb.SearchBuilder.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.SearchBuilder.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("from_time_last_updated", trb.SearchBuilder.StartLastUpdatedDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_last_updated", trb.SearchBuilder.EndLastUpdatedDate?.ToString("yyyy-MM-dd")); return(request); case ReportType.ActionDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/actions/{trb.SearchBuilder.ActionId}", }); case ReportType.FindActionsPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/actions", }; request.AddQueryStringParam("page", trb.Page?.ToString()); request.AddQueryStringParam("page_size", trb.PageSize?.ToString()); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.ActionOrderBy)); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("id", trb.SearchBuilder.ActionId); request.AddQueryStringParam("type", trb.SearchBuilder.ActionType); request.AddQueryStringParam("resource", trb.SearchBuilder.Resource); request.AddQueryStringParam("resource_status", trb.SearchBuilder.ResourceStatus); request.AddQueryStringParam("resource_id", trb.SearchBuilder.ResourceId); request.AddQueryStringParam("from_time_created", trb.SearchBuilder.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.SearchBuilder.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("merchant_name", trb.SearchBuilder.MerchantName); request.AddQueryStringParam("account_name", trb.SearchBuilder.AccountName); request.AddQueryStringParam("app_name", trb.SearchBuilder.AppName); request.AddQueryStringParam("version", trb.SearchBuilder.Version); request.AddQueryStringParam("response_code", trb.SearchBuilder.ResponseCode); request.AddQueryStringParam("http_response_code", trb.SearchBuilder.HttpResponseCode); return(request); case ReportType.PayLinkDetail: return(new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/links/{trb.SearchBuilder.PayLinkId}", }); case ReportType.FindPayLinkPaged: request = new GpApiRequest { Verb = HttpMethod.Get, Endpoint = $"{merchantUrl}/links", }; request.AddQueryStringParam("from_time_created", trb.SearchBuilder.StartDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("to_time_created", trb.SearchBuilder.EndDate?.ToString("yyyy-MM-dd")); request.AddQueryStringParam("order", EnumConverter.GetMapping(Target.GP_API, trb.Order)); request.AddQueryStringParam("order_by", EnumConverter.GetMapping(Target.GP_API, trb.ActionOrderBy)); return(request); } } return(null); }