diff --git a/Channels/Batch.cs b/Channels/Batch.cs index ea544a1..1169503 100644 --- a/Channels/Batch.cs +++ b/Channels/Batch.cs @@ -1,4 +1,4 @@ -using SaferPay.Config; +using SaferPay.Config; using SaferPay.Interfaces; using SaferPay.Models.Batch; using SaferPay.Models.Core; @@ -11,19 +11,14 @@ public class Batch : IBatch private readonly ISaferPayClient _client; public Batch(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public Batch(ISaferPayClient client) => _client = client; - public Batch(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + public Batch(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); + public Batch(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); - public BatchResponse Close(BatchRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.BatchEndpoint + SaferPayMethods.BatchClose, request); - return null; - } + public BatchResponse Close(BatchRequest request) => + _client.Send(SaferPayEndpoints.BatchEndpoint + SaferPayMethods.BatchClose, request); - public Task CloseAsync(BatchRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.BatchEndpoint + SaferPayMethods.BatchClose, request); - return null; - } + public Task CloseAsync(BatchRequest request) => + _client.SendAsync(SaferPayEndpoints.BatchEndpoint + SaferPayMethods.BatchClose, request); } diff --git a/Channels/ManagementApi.cs b/Channels/ManagementApi.cs index cf9e66d..0f71c02 100644 --- a/Channels/ManagementApi.cs +++ b/Channels/ManagementApi.cs @@ -1,4 +1,4 @@ -using SaferPay.Interfaces; +using SaferPay.Interfaces; using SaferPay.Models.Core; using SaferPay.Models.Management; @@ -10,163 +10,98 @@ public class ManagementApi : IManagementApi public ManagementApi(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public ManagementApi(ISaferPayClient client) => _client = client; + public ManagementApi(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); - public ManagementApi(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + public ManagementApi(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); - public ManagementBaseResponse LicensingCustomerLicense() - { - if (_client == null) return default; - var data = LicensingCustomerLicenseAsync().GetAwaiter().GetResult(); - return data; - } + public ManagementBaseResponse LicensingCustomerLicense() => + LicensingCustomerLicenseAsync().GetAwaiter().GetResult(); - public async Task LicensingCustomerLicenseAsync() + public Task LicensingCustomerLicenseAsync() { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/license"; - - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public RestResponseBase LicensingCustomerLicenseConfiguration() - { - if (_client == null) return default; - var data = LicensingCustomerLicenseConfigurationAsync().GetAwaiter().GetResult(); - return data; - } + public RestResponseBase LicensingCustomerLicenseConfiguration() => + LicensingCustomerLicenseConfigurationAsync().GetAwaiter().GetResult(); - public async Task LicensingCustomerLicenseConfigurationAsync() + public Task LicensingCustomerLicenseConfigurationAsync() { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/license-configuration"; - - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public ManagementConfigurations PaymentPageConfigGetConfigurations() - { - if (_client == null) return default; - var data = PaymentPageConfigGetConfigurationsAsync().GetAwaiter().GetResult(); - return data; - } + public ManagementConfigurations PaymentPageConfigGetConfigurations() => + PaymentPageConfigGetConfigurationsAsync().GetAwaiter().GetResult(); - public async Task PaymentPageConfigGetConfigurationsAsync() + public Task PaymentPageConfigGetConfigurationsAsync() { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/payment-page/configurations"; - - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public CreateAccessTokenResponse SaferpayFieldsAccessTokenCreateAccessToken(CreateAccessTokenRequest request) - { - if (_client == null) return default; - var data = SaferpayFieldsAccessTokenCreateAccessTokenAsync(request).GetAwaiter().GetResult(); - return data; - } + public CreateAccessTokenResponse SaferpayFieldsAccessTokenCreateAccessToken(CreateAccessTokenRequest request) => + SaferpayFieldsAccessTokenCreateAccessTokenAsync(request).GetAwaiter().GetResult(); - public async Task SaferpayFieldsAccessTokenCreateAccessTokenAsync(CreateAccessTokenRequest request) + public Task SaferpayFieldsAccessTokenCreateAccessTokenAsync(CreateAccessTokenRequest request) { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals/{_client.TerminalId}/fields-access-tokens"; - - var response = await _client.PostAsync(endpoint, request); - return response; + return _client.PostAsync(endpoint, request); } - public RestResponseBase SaferpayFieldsAccessTokenDeleteAccessToken(string accessToken) - { - if (_client == null) return default; - var data = SaferpayFieldsAccessTokenDeleteAccessTokenAsync(accessToken).GetAwaiter().GetResult(); - return data; - } + public RestResponseBase SaferpayFieldsAccessTokenDeleteAccessToken(string accessToken) => + SaferpayFieldsAccessTokenDeleteAccessTokenAsync(accessToken).GetAwaiter().GetResult(); - public async Task SaferpayFieldsAccessTokenDeleteAccessTokenAsync(string accessToken) + public Task SaferpayFieldsAccessTokenDeleteAccessTokenAsync(string accessToken) { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals/{_client.TerminalId}/fields-access-tokens/{accessToken}"; - - var response = await _client.DeleteAsync(endpoint); - return response; + return _client.DeleteAsync(endpoint); } - public CreateSingleUsePaymentLinkResponse SecurePayGateCreateSingleUsePaymentLink(CreateSingleUsePaymentLinkRequest request) - { - if (_client == null) return default; - var data = SecurePayGateCreateSingleUsePaymentLinkAsync(request).GetAwaiter().GetResult(); - return data; - } + public CreateSingleUsePaymentLinkResponse SecurePayGateCreateSingleUsePaymentLink(CreateSingleUsePaymentLinkRequest request) => + SecurePayGateCreateSingleUsePaymentLinkAsync(request).GetAwaiter().GetResult(); - public async Task SecurePayGateCreateSingleUsePaymentLinkAsync(CreateSingleUsePaymentLinkRequest request) + public Task SecurePayGateCreateSingleUsePaymentLinkAsync(CreateSingleUsePaymentLinkRequest request) { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals/{_client.TerminalId}/spg-offers"; - - var response = await _client.PostAsync(endpoint, request); - return response; + return _client.PostAsync(endpoint, request); } - public SingleUsePaymentLinkResponse SecurePayGateSingleUsePaymentLink(string offerId) - { - if (_client == null) return default; - var data = SecurePayGateSingleUsePaymentLinkAsync(offerId).GetAwaiter().GetResult(); - return data; - } + public SingleUsePaymentLinkResponse SecurePayGateSingleUsePaymentLink(string offerId) => + SecurePayGateSingleUsePaymentLinkAsync(offerId).GetAwaiter().GetResult(); - public async Task SecurePayGateSingleUsePaymentLinkAsync(string offerId) + public Task SecurePayGateSingleUsePaymentLinkAsync(string offerId) { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals/{_client.TerminalId}/spg-offers/{offerId}"; - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public TerminalResponse TerminalGetTerminal() - { - if (_client == null) return default; - var data = TerminalGetTerminalAsync().GetAwaiter().GetResult(); - return data; - } + public TerminalResponse TerminalGetTerminal() => + TerminalGetTerminalAsync().GetAwaiter().GetResult(); - public async Task TerminalGetTerminalAsync() + public Task TerminalGetTerminalAsync() { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals/{_client.TerminalId}"; - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public TerminalsResponse TerminalsGetTerminals() - { - if (_client == null) return default; - var data = TerminalsGetTerminalsAsync().GetAwaiter().GetResult(); - return data; - } + public TerminalsResponse TerminalsGetTerminals() => + TerminalsGetTerminalsAsync().GetAwaiter().GetResult(); - public async Task TerminalsGetTerminalsAsync() + public Task TerminalsGetTerminalsAsync() { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/terminals"; - var response = await _client.GetAsync(endpoint); - return response; + return _client.GetAsync(endpoint); } - public ReportingGetTransactionsResponse TransactionReportingGetTransactions(ReportingGetTransactionsRequest request) - { - if (_client == null) return default; - var data = TransactionReportingGetTransactionsAsync(request).GetAwaiter().GetResult(); - return data; - } + public ReportingGetTransactionsResponse TransactionReportingGetTransactions(ReportingGetTransactionsRequest request) => + TransactionReportingGetTransactionsAsync(request).GetAwaiter().GetResult(); - public async Task TransactionReportingGetTransactionsAsync(ReportingGetTransactionsRequest request) + public Task TransactionReportingGetTransactionsAsync(ReportingGetTransactionsRequest request) { - if (_client == null) return default; var endpoint = $"rest/customers/{_client.CustomerId}/transactions"; - var response = await _client.GetAsync(endpoint, request); - return response; + return _client.GetAsync(endpoint, request); } } diff --git a/Channels/OmniChannel.cs b/Channels/OmniChannel.cs index 404897c..c56e21f 100644 --- a/Channels/OmniChannel.cs +++ b/Channels/OmniChannel.cs @@ -1,4 +1,4 @@ -using SaferPay.Config; +using SaferPay.Config; using SaferPay.Interfaces; using SaferPay.Models.Core; using SaferPay.Models.OmniChannel; @@ -14,31 +14,20 @@ public class OmniChannel : IOmniChannel private readonly ISaferPayClient _client; public OmniChannel(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public OmniChannel(ISaferPayClient client) => _client = client; - public OmniChannel(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); - - - public AcquireTransactionResponse AcquireTransaction(AcquireTransactionRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelAcquireTransaction, request); - return null; - } - - public Task AcquireTransactionAsync(AcquireTransactionRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelAcquireTransaction, request); - return null; - } - - public InsertAliasResponse InsertAlias(InsertAliasRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelInsertAlias, request); - return null; - } - - public Task InsertAliasAsync(InsertAliasRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelInsertAlias, request); - return null; - } + public OmniChannel(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); + public OmniChannel(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + + + public AcquireTransactionResponse AcquireTransaction(AcquireTransactionRequest request) => + _client.Send(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelAcquireTransaction, request); + + public Task AcquireTransactionAsync(AcquireTransactionRequest request) => + _client.SendAsync(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelAcquireTransaction, request); + + public InsertAliasResponse InsertAlias(InsertAliasRequest request) => + _client.Send(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelInsertAlias, request); + + public Task InsertAliasAsync(InsertAliasRequest request) => + _client.SendAsync(SaferPayEndpoints.OmniChannelEndpoint + SaferPayMethods.OmniChannelInsertAlias, request); } diff --git a/Channels/PaymentPage.cs b/Channels/PaymentPage.cs index 151006f..2dbb174 100644 --- a/Channels/PaymentPage.cs +++ b/Channels/PaymentPage.cs @@ -1,4 +1,4 @@ -using SaferPay.Config; +using SaferPay.Config; using SaferPay.Interfaces; using SaferPay.Models.Core; using SaferPay.Models.PaymentPage; @@ -19,28 +19,29 @@ public class PaymentPage : IPaymentPage #region Ctors public PaymentPage(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public PaymentPage(ISaferPayClient client) => _client = client; - public PaymentPage(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + public PaymentPage(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); + public PaymentPage(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); #endregion #region Methods - public AssertResponse Assert(AssertRequest request) => - _client?.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, request); + public AssertResponse Assert(AssertRequest request) => + _client.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, request); public AssertResponse Assert(string token) => - _client?.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, new AssertRequest(token)); + _client.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, new AssertRequest(token)); public Task AssertAsync(AssertRequest request) => - _client?.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, request); + _client.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, request); public Task AssertAsync(string token) => - _client?.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, new AssertRequest(token)); + _client.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageAssert, new AssertRequest(token)); public InitializePaymentPageResponse Initialize(InitializePaymentPageRequest request) => - _client?.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageInitialize, request); + _client.Send(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageInitialize, request); public Task InitializeAsync(InitializePaymentPageRequest request) => - _client?.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageInitialize, request); + _client.SendAsync(SaferPayEndpoints.PaymentPageEndpoint + SaferPayMethods.PaymentPageInitialize, request); #endregion public override string ToString() => base.ToString() ?? "Payment Page"; diff --git a/Channels/SecureCardData.cs b/Channels/SecureCardData.cs index 2f9b21c..9c91cae 100644 --- a/Channels/SecureCardData.cs +++ b/Channels/SecureCardData.cs @@ -1,4 +1,4 @@ -using SaferPay.Config; +using SaferPay.Config; using SaferPay.Interfaces; using SaferPay.Models.Core; using SaferPay.Models.SecureData; @@ -10,78 +10,43 @@ public class SecureCardData : ISecureCardData private readonly ISaferPayClient _client; public SecureCardData(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public SecureCardData(ISaferPayClient client) => _client = client; - public SecureCardData(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + public SecureCardData(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); + public SecureCardData(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); - public AliasDeleteResponse AliasDelete(AliasDeleteRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasDelete, request); - return null; - } + public AliasDeleteResponse AliasDelete(AliasDeleteRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasDelete, request); - public Task AliasDeleteAsync(AliasDeleteRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasDelete, request); - return null; - } + public Task AliasDeleteAsync(AliasDeleteRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasDelete, request); - public AliasInquireResponse AliasInquire(AliasInquireRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInquire, request); - return null; - } + public AliasInquireResponse AliasInquire(AliasInquireRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInquire, request); - public Task AliasInquireAsync(AliasInquireRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInquire, request); - return null; - } + public Task AliasInquireAsync(AliasInquireRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInquire, request); - public AliasInsertResponse AliasInsert(AliasInsertRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsert, request); - return null; - } + public AliasInsertResponse AliasInsert(AliasInsertRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsert, request); - public Task AliasInsertAsync(AliasInsertRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsert, request); - return null; - } + public Task AliasInsertAsync(AliasInsertRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsert, request); - public AliasUpdateResponse AliasUpdate(AliasUpdateRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasUpdate, request); - return null; - } + public AliasUpdateResponse AliasUpdate(AliasUpdateRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasUpdate, request); - public Task AliasUpdateAsync(AliasUpdateRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasUpdate, request); - return null; - } + public Task AliasUpdateAsync(AliasUpdateRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasUpdate, request); - public AssertInsertResponse AssertInsert(AssertInsertRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasAssertInsert, request); - return null; - } + public AssertInsertResponse AssertInsert(AssertInsertRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasAssertInsert, request); - public Task AssertInsertAsync(AssertInsertRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasAssertInsert, request); - return null; - } + public Task AssertInsertAsync(AssertInsertRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasAssertInsert, request); - public InsertDirectResponse InsertDirect(InsertDirectRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsertDirect, request); - return null; - } + public InsertDirectResponse InsertDirect(InsertDirectRequest request) => + _client.Send(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsertDirect, request); - public Task InsertDirectAsync(InsertDirectRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsertDirect, request); - return null; - } + public Task InsertDirectAsync(InsertDirectRequest request) => + _client.SendAsync(SaferPayEndpoints.AliasEndpoint + SaferPayMethods.AliasInsertDirect, request); } diff --git a/Channels/Transaction.cs b/Channels/Transaction.cs index 8642baa..7fba152 100644 --- a/Channels/Transaction.cs +++ b/Channels/Transaction.cs @@ -1,4 +1,4 @@ -using SaferPay.Config; +using SaferPay.Config; using SaferPay.Interfaces; using SaferPay.Models.Core; using SaferPay.Models.Transaction; @@ -11,263 +11,156 @@ public class Transaction : ITransaction private readonly ISaferPayClient _client; public Transaction(SaferPaySettings settings) => _client = new SaferPayClient(settings); - public Transaction(ISaferPayClient client) => _client = client; - public Transaction(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); + public Transaction(ISaferPayClient client) => _client = client ?? throw new ArgumentNullException(nameof(client)); + public Transaction(string customerId, string terminalId, string userName, string passWord, bool sandBox = false) + => _client = new SaferPayClient(new SaferPaySettings(customerId, terminalId, userName, passWord, sandBox)); #region Initialize - public InitializeResponse Initialize(InitializeRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInitialize, request); - return null; - } - - public Task InitializeAsync(InitializeRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInitialize, request); - return null; - } + public InitializeResponse Initialize(InitializeRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInitialize, request); + + public Task InitializeAsync(InitializeRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInitialize, request); #endregion - #region Authorize - public AuthorizeResponse Authorize(AuthorizeRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorize, request); - return null; - } - - public Task AuthorizeAsync(AuthorizeRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorize, request); - return null; - } + #region Authorize + public AuthorizeResponse Authorize(AuthorizeRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorize, request); + + public Task AuthorizeAsync(AuthorizeRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorize, request); #endregion - #region AuthorizeDirect - public AuthorizeDirectResponse AuthorizeDirect(AuthorizeDirectRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeDirect, request); - return null; - } - - public Task AuthorizeDirectAsync(AuthorizeDirectRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeDirect, request); - return null; - } + #region AuthorizeDirect + public AuthorizeDirectResponse AuthorizeDirect(AuthorizeDirectRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeDirect, request); + + public Task AuthorizeDirectAsync(AuthorizeDirectRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeDirect, request); #endregion - #region AuthorizeReferenced - public AuthorizeReferencedResponse AuthorizeReferenced(AuthorizeReferencedRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeReferenced, request); - return null; - } - - public Task AuthorizeReferencedAsync(AuthorizeReferencedRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeReferenced, request); - return null; - } + #region AuthorizeReferenced + public AuthorizeReferencedResponse AuthorizeReferenced(AuthorizeReferencedRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeReferenced, request); + + public Task AuthorizeReferencedAsync(AuthorizeReferencedRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAuthorizeReferenced, request); #endregion #region Capture - public CaptureResponse Capture(CaptureRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCapture, request); - return null; - } - - public Task CaptureAsync(CaptureRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCapture, request); - return null; - } + public CaptureResponse Capture(CaptureRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCapture, request); + + public Task CaptureAsync(CaptureRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCapture, request); #endregion - #region MultipartCapture - public MultipartCaptureResponse MultipartCapture(MultipartCaptureRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartCapture, request); - return null; - } - - public Task MultipartCaptureAsync(MultipartCaptureRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartCapture, request); - return null; - } + #region MultipartCapture + public MultipartCaptureResponse MultipartCapture(MultipartCaptureRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartCapture, request); + + public Task MultipartCaptureAsync(MultipartCaptureRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartCapture, request); #endregion - #region AssertCapture - public AssertCaptureResponse AssertCapture(AssertCaptureRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertCapture, request); - return null; - } - - public Task AssertCaptureAsync(AssertCaptureRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertCapture, request); - return null; - } + #region AssertCapture + public AssertCaptureResponse AssertCapture(AssertCaptureRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertCapture, request); + + public Task AssertCaptureAsync(AssertCaptureRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertCapture, request); #endregion - #region MultipartFinalize - public MultipartFinalizeResponse MultipartFinalize(MultipartFinalizeRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartFinalize, request); - return null; - } - - public Task MultipartFinalizeAsync(MultipartFinalizeRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartFinalize, request); - return null; - } + #region MultipartFinalize + public MultipartFinalizeResponse MultipartFinalize(MultipartFinalizeRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartFinalize, request); + + public Task MultipartFinalizeAsync(MultipartFinalizeRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionMultipartFinalize, request); #endregion - #region Refund - public RefundResponse Refund(RefundRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefund, request); - return null; - } - - public Task RefundAsync(RefundRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefund, request); - return null; - } + #region Refund + public RefundResponse Refund(RefundRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefund, request); + + public Task RefundAsync(RefundRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefund, request); #endregion - #region AssertRefund - public AssertRefundResponse AssertRefund(AssertRefundRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRefund, request); - return null; - } - - public Task AssertRefundAsync(AssertRefundRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRefund, request); - return null; - } + #region AssertRefund + public AssertRefundResponse AssertRefund(AssertRefundRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRefund, request); + + public Task AssertRefundAsync(AssertRefundRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRefund, request); #endregion - #region RefundDirect - public RefundDirectResponse RefundDirect(RefundDirectRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefundDirect, request); - return null; - } - - public Task RefundDirectAsync(RefundDirectRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefundDirect, request); - return null; - } + #region RefundDirect + public RefundDirectResponse RefundDirect(RefundDirectRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefundDirect, request); + + public Task RefundDirectAsync(RefundDirectRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRefundDirect, request); #endregion #region Cancel - public CancelResponse Cancel(CancelRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCancel, request); - return null; - } - - public Task CancelAsync(CancelRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCancel, request); - return null; - } + public CancelResponse Cancel(CancelRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCancel, request); + + public Task CancelAsync(CancelRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionCancel, request); #endregion - #region RedirectPayment + #region RedirectPayment [Obsolete("This feature is deprecated and replaced by the Payment Page. Please use the parameter PaymentMethods to directly select the desired 3rd party provider!")] - public RedirectPaymentResponse RedirectPayment(RedirectPaymentRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRedirectPayment, request); - return null; - } + public RedirectPaymentResponse RedirectPayment(RedirectPaymentRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRedirectPayment, request); [Obsolete("This feature is deprecated and replaced by the Payment Page. Please use the parameter PaymentMethods to directly select the desired 3rd party provider!")] - public Task RedirectPaymentAsync(RedirectPaymentRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRedirectPayment, request); - return null; - } + public Task RedirectPaymentAsync(RedirectPaymentRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionRedirectPayment, request); #endregion - #region AssertRedirectPayment + #region AssertRedirectPayment [Obsolete("This feature is deprecated and replaced by the Payment Page. Please use the parameter PaymentMethods to directly select the desired 3rd party provider!")] - public AssertRedirectPaymentResponse AssertRedirectPayment(AssertRedirectPaymentRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRedirectPayment, request); - return null; - } + public AssertRedirectPaymentResponse AssertRedirectPayment(AssertRedirectPaymentRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRedirectPayment, request); [Obsolete("This feature is deprecated and replaced by the Payment Page. Please use the parameter PaymentMethods to directly select the desired 3rd party provider!")] - public Task AssertRedirectPaymentAsync(AssertRedirectPaymentRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRedirectPayment, request); - return null; - } + public Task AssertRedirectPaymentAsync(AssertRedirectPaymentRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAssertRedirectPayment, request); #endregion - #region Inquire - public InquireResponse Inquire(InquireRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInquire, request); - return null; - } - - public Task InquireAsync(InquireRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInquire, request); - return null; - } + #region Inquire + public InquireResponse Inquire(InquireRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInquire, request); + + public Task InquireAsync(InquireRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionInquire, request); #endregion - #region AlternativePayment - public AlternativePaymentResponse AlternativePayment(AlternativePaymentRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAlternativePayment, request); - return null; - } - - public Task AlternativePaymentAsync(AlternativePaymentRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAlternativePayment, request); - return null; - } + #region AlternativePayment + public AlternativePaymentResponse AlternativePayment(AlternativePaymentRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAlternativePayment, request); + + public Task AlternativePaymentAsync(AlternativePaymentRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionAlternativePayment, request); #endregion - #region QueryAlternativePayment - public QueryAlternativePaymentResponse QueryAlternativePayment(QueryAlternativePaymentRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionQueryAlternativePayment, request); - return null; - } - - public Task QueryAlternativePaymentAsync(QueryAlternativePaymentRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionQueryAlternativePayment, request); - return null; - } + #region QueryAlternativePayment + public QueryAlternativePaymentResponse QueryAlternativePayment(QueryAlternativePaymentRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionQueryAlternativePayment, request); + + public Task QueryAlternativePaymentAsync(QueryAlternativePaymentRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionQueryAlternativePayment, request); #endregion #region DccInquiry - public DccInquiryResponse DccInquire(DccInquiryRequest request) - { - if (_client != null) return _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionDccInquiry, request); - return null; - } - - public Task DccInquiryAsync(DccInquiryRequest request) - { - if (_client != null) return _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionDccInquiry, request); - return null; - } + public DccInquiryResponse DccInquire(DccInquiryRequest request) => + _client.Send(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionDccInquiry, request); + + public Task DccInquiryAsync(DccInquiryRequest request) => + _client.SendAsync(SaferPayEndpoints.TransactionEndpoint + SaferPayMethods.TransactionDccInquiry, request); #endregion } diff --git a/Helpers/JsonHelpers.cs b/Helpers/JsonHelpers.cs deleted file mode 100644 index c90c699..0000000 --- a/Helpers/JsonHelpers.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace SaferPay.Helpers -{ - -} diff --git a/SaferPay.csproj b/SaferPay.csproj index 14bf133..6dc5601 100644 --- a/SaferPay.csproj +++ b/SaferPay.csproj @@ -35,7 +35,6 @@ - diff --git a/SaferPayClient.cs b/SaferPayClient.cs index e0c46cb..7c51b13 100644 --- a/SaferPayClient.cs +++ b/SaferPayClient.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json; +using Newtonsoft.Json; using RestSharp; using RestSharp.Authenticators; using SaferPay.Config; @@ -65,6 +65,23 @@ public SaferPayClient(SaferPaySettings settings, JsonSerializerSettings jsonSeri RetryIndicator = 0 }; + private RestClient BuildClient(Uri uri) + { + var opt = new RestClientOptions(uri) + { + Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password) + }; + return new RestClient(opt); + } + + private static void AddManagementHeaders(RestRequest req) + { + req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); + req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); + req.AddHeader("Content-Type", "application/json; charset=utf-8"); + req.AddHeader("Accept", "application/json"); + } + /// /// Send Async Method /// @@ -76,19 +93,14 @@ public SaferPayClient(SaferPaySettings settings, JsonSerializerSettings jsonSeri /// public virtual async Task SendAsync(string path, TRequest request) where TRequest : RequestBase where TResponse : ResponseBase { - try { if (request == null) throw new ArgumentNullException(nameof(request)); request.RequestHeader = CreateRequestHeader(); var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - - using var client = new RestClient(opt); - var req = new RestRequest(); - req.Method = Method.Post; + using var client = BuildClient(uri); + var req = new RestRequest { Method = Method.Post }; var json = request.Json(); req.AddParameter("application/json", json, ParameterType.RequestBody); @@ -100,55 +112,14 @@ public virtual async Task SendAsync(string path, response!.ResponseStatus = Enums.ResponseStatus.SUCCESS; return response; } - else - { - var errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw new SaferPayException(res.StatusCode, errorResponse); - } - } - - catch (SaferPayException spex) - { - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = new ErrorResponse(); - response.Error.ErrorMessage = spex.Message.ToString(); - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - if (_settings.ThrowExceptionOnFail) - { - throw; - } + return HandleSendErrorResponse(res); } catch (Exception ex) { - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = new ErrorResponse(); - response.Error.ErrorMessage = ex.Message.ToString(); - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw; - + if (_settings.ThrowExceptionOnFail) throw; + return ProcessSendFailure(default, new ErrorResponse { ErrorMessage = ex.Message }); } - - return null; } public void Dispose() @@ -172,12 +143,8 @@ public TResponse Send(string path, TRequest request) where request.RequestHeader = CreateRequestHeader(); var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - - using var client = new RestClient(opt); - var req = new RestRequest(); - req.Method = Method.Post; + using var client = BuildClient(uri); + var req = new RestRequest { Method = Method.Post }; var json = request.Json(); req.AddParameter("application/json", json, ParameterType.RequestBody); @@ -189,48 +156,25 @@ public TResponse Send(string path, TRequest request) where response!.ResponseStatus = Enums.ResponseStatus.SUCCESS; return response; } - else - { - var errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, errorResponse); - } + return HandleSendErrorResponse(res); } public TResponse Get(string path) where TResponse : Models.Management.RestResponseBase { - var response = GetAsync(path).GetAwaiter().GetResult(); - return response; + return GetAsync(path).GetAwaiter().GetResult(); } public async Task GetAsync(string path) where TResponse : Models.Management.RestResponseBase { var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); + using var client = BuildClient(uri); - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - using var client = new RestClient(opt); - - var req = new RestRequest(); - req.Method = Method.Get; - - req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); - req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); - - req.AddHeader("Content-Type", "application/json; charset=utf-8"); - req.AddHeader("Accept", "application/json"); + var req = new RestRequest { Method = Method.Get }; + AddManagementHeaders(req); var res = await client.ExecuteAsync(req); - // 200 OK if (res.IsSuccessful && res.StatusCode == System.Net.HttpStatusCode.OK) { var response = JsonConvert.DeserializeObject(res.Content ?? "{}", _jsonSerializerSettings); @@ -241,111 +185,59 @@ public async Task GetAsync(string path) where TResponse : } } - // 404 Not Found - if (res.StatusCode == System.Net.HttpStatusCode.NotFound) - { - var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = notFoundError; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, notFoundError); - } - - // Other Errors (400, 401, 500 vb.) - ErrorResponse errorResponse = null; - if (!string.IsNullOrEmpty(res.Content)) - { - errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - } - - errorResponse ??= new ErrorResponse { ErrorMessage = res.ErrorMessage ?? "Unknown API Error" }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw new SaferPayException(res.StatusCode, errorResponse); - + return HandleErrorResponse(res); } public TResponse Get(string path, TRequest request) where TResponse : Models.Management.RestResponseBase where TRequest : RestRequestBase { - var response = GetAsync(path, request).GetAwaiter().GetResult(); - return response; + return GetAsync(path, request).GetAwaiter().GetResult(); } public async Task GetAsync(string path, TRequest request) where TResponse : Models.Management.RestResponseBase where TRequest : RestRequestBase { - var opt = new RestClientOptions(_settings.BaseUri); - - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - using var client = new RestClient(opt); + using var client = BuildClient(_settings.BaseUri); var req = new RestRequest(path, Method.Get); - // 1. Query Parametrelerini Otomatik Ekleme + // Query parameters if (request != null) { - // 1. Nesnenin tüm property'lerini alıyoruz var properties = typeof(TRequest).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var prop in properties) { - // 2. [JsonIgnore] varsa bu property'yi tamamen atla if (Attribute.IsDefined(prop, typeof(JsonIgnoreAttribute))) continue; - // 3. [JsonProperty] niteliğini al var jsonProperty = prop.GetCustomAttribute(); - - // Eğer JsonProperty atanmamışsa standart ismini kullan, atanmışsa oradaki ismi kullan string paramName = jsonProperty != null ? jsonProperty.PropertyName : prop.Name; var value = prop.GetValue(request); + if (value == null) continue; - // 4. Sadece null olmayan değerleri ekle - if (value != null) + if (prop.PropertyType.IsEnum || (Nullable.GetUnderlyingType(prop.PropertyType)?.IsEnum == true)) + { + req.AddQueryParameter(paramName, value.ToString()); + } + else if (value is DateTime dt) { - // Değer bir Enum ise, string karşılığını (USD, TRY vb.) gönder - if (prop.PropertyType.IsEnum || (Nullable.GetUnderlyingType(prop.PropertyType)?.IsEnum == true)) - { - req.AddQueryParameter(paramName, value.ToString()); - } - // DateTime kontrolü (Eğer unutup JsonIgnore koymazsanız patlamasın diye) - else if (value is DateTime dt) - { - req.AddQueryParameter(paramName, dt.ToString("yyyy-MM-ddTHH:mm")); - } - else - { - req.AddQueryParameter(paramName, value.ToString()); - } + req.AddQueryParameter(paramName, dt.ToString("yyyy-MM-ddTHH:mm")); + } + else + { + req.AddQueryParameter(paramName, value.ToString()); } } } - // 2. Zorunlu Saferpay Header'ları - req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); - req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); - req.AddHeader("Accept", "application/json"); - req.AddHeader("Content-Type", "application/json; charset=utf-8"); + AddManagementHeaders(req); var res = await client.ExecuteAsync(req); - // 3. Başarı Kontrolü (200 OK) if (res.IsSuccessful && res.StatusCode == System.Net.HttpStatusCode.OK) { var response = JsonConvert.DeserializeObject(res.Content ?? "{}", _jsonSerializerSettings); @@ -356,67 +248,24 @@ public async Task GetAsync(string path, TRequest } } - // 404 Not Found - if (res.StatusCode == System.Net.HttpStatusCode.NotFound) - { - var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = notFoundError; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, notFoundError); - } - - // Other Errors (400, 401, 500 vb.) - ErrorResponse errorResponse = null; - if (!string.IsNullOrEmpty(res.Content)) - { - errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - } - - errorResponse ??= new ErrorResponse { ErrorMessage = res.ErrorMessage ?? "Unknown API Error" }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw new SaferPayException(res.StatusCode, errorResponse); + return HandleErrorResponse(res); } public TResponse Post(string path) where TResponse : Models.Management.RestResponseBase { - var response = PostAsync(path).GetAwaiter().GetResult(); - return response; + return PostAsync(path).GetAwaiter().GetResult(); } public async Task PostAsync(string path) where TResponse : Models.Management.RestResponseBase { var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); - - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - using var client = new RestClient(opt); - - var req = new RestRequest(); - req.Method = Method.Post; + using var client = BuildClient(uri); - req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); - req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); - - req.AddHeader("Content-Type", "application/json; charset=utf-8"); - req.AddHeader("Accept", "application/json"); + var req = new RestRequest { Method = Method.Post }; + AddManagementHeaders(req); var res = await client.ExecuteAsync(req); - // 200 OK if (res.IsSuccessful && res.StatusCode == System.Net.HttpStatusCode.OK) { var response = JsonConvert.DeserializeObject(res.Content ?? "{}", _jsonSerializerSettings); @@ -427,47 +276,14 @@ public async Task PostAsync(string path) where TResponse : } } - // 404 Not Found - if (res.StatusCode == System.Net.HttpStatusCode.NotFound) - { - var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = notFoundError; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, notFoundError); - } - - // Other Errors (400, 401, 500 vb.) - ErrorResponse errorResponse = null; - if (!string.IsNullOrEmpty(res.Content)) - { - errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - } - - errorResponse ??= new ErrorResponse { ErrorMessage = res.ErrorMessage ?? "Unknown API Error" }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw new SaferPayException(res.StatusCode, errorResponse); + return HandleErrorResponse(res); } public TResponse Post(string path, TRequest request) where TResponse : Models.Management.RestResponseBase where TRequest : RestRequestBase { - var response = PostAsync(path, request).GetAwaiter().GetResult(); - return response; + return PostAsync(path, request).GetAwaiter().GetResult(); } public async Task PostAsync(string path, TRequest request) @@ -475,26 +291,17 @@ public async Task PostAsync(string path, TReques where TRequest : RestRequestBase { var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); - - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - using var client = new RestClient(opt); + using var client = BuildClient(uri); - var req = new RestRequest(); - req.Method = Method.Post; + var req = new RestRequest { Method = Method.Post }; var json = request.Json(); req.AddParameter("application/json", json, ParameterType.RequestBody); - req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); - req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); - - req.AddHeader("Content-Type", "application/json; charset=utf-8"); - req.AddHeader("Accept", "application/json"); + AddManagementHeaders(req); var res = await client.ExecuteAsync(req); - // 200 OK if (res.IsSuccessful && res.StatusCode == System.Net.HttpStatusCode.OK) { var response = JsonConvert.DeserializeObject(res.Content ?? "{}", _jsonSerializerSettings); @@ -505,68 +312,27 @@ public async Task PostAsync(string path, TReques } } - // 404 Not Found - if (res.StatusCode == System.Net.HttpStatusCode.NotFound) - { - var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = notFoundError; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, notFoundError); - } - - // Other Errors (400, 401, 500 vb.) - ErrorResponse errorResponse = null; - if (!string.IsNullOrEmpty(res.Content)) - { - errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); - } - - errorResponse ??= new ErrorResponse { ErrorMessage = res.ErrorMessage ?? "Unknown API Error" }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - - throw new SaferPayException(res.StatusCode, errorResponse); + return HandleErrorResponse(res); } public TResponse Delete(string path) where TResponse : Models.Management.RestResponseBase { - var response = DeleteAsync(path).GetAwaiter().GetResult(); - return response; + return DeleteAsync(path).GetAwaiter().GetResult(); } public async Task DeleteAsync(string path) where TResponse : Models.Management.RestResponseBase { var uri = new Uri(_settings.BaseUri, path); - var opt = new RestClientOptions(uri); - - opt.Authenticator = new HttpBasicAuthenticator(_settings.Username, _settings.Password); - using var client = new RestClient(opt); + using var client = BuildClient(uri); var req = new RestRequest(path, Method.Delete); - - req.AddHeader("Saferpay-ApiVersion", SaferPayApiConstants.Version); - req.AddHeader("Saferpay-RequestId", Guid.NewGuid().ToString()); - req.AddHeader("Content-Type", "application/json; charset=utf-8"); - req.AddHeader("Accept", "application/json"); + AddManagementHeaders(req); var res = await client.ExecuteAsync(req); - // Başarı Durumu (200 OK veya 204 No Content) + // Success (200 OK or 204 No Content) if (res.IsSuccessful) { - // 204 No Content durumunda Content null/empty olabilir. var content = string.IsNullOrWhiteSpace(res.Content) ? "{}" : res.Content; var response = JsonConvert.DeserializeObject(content, _jsonSerializerSettings); @@ -575,22 +341,26 @@ public async Task DeleteAsync(string path) where TResponse return response; } - // 404 Not Found + return HandleErrorResponse(res); + } + + + /// + /// Build an error response (or throw) for a failed REST (management) call. + /// + private TResponse HandleErrorResponse(RestResponse res) where TResponse : Models.Management.RestResponseBase + { + if (res == null) + { + return ProcessFailure(default, new ErrorResponse { ErrorMessage = "No response from server." }); + } + if (res.StatusCode == System.Net.HttpStatusCode.NotFound) { var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - - if (!_settings.ThrowExceptionOnFail) - { - var response = Activator.CreateInstance(); - response.Error = notFoundError; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; - } - throw new SaferPayException(res.StatusCode, notFoundError); + return ProcessFailure(res.StatusCode, notFoundError); } - // Diğer Hata Durumları ErrorResponse errorResponse = null; if (!string.IsNullOrEmpty(res.Content)) { @@ -598,69 +368,77 @@ public async Task DeleteAsync(string path) where TResponse { errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); } - catch { /* JSON parse hatası ihtimaline karşı */ } + catch (JsonException) + { + errorResponse = new ErrorResponse { ErrorMessage = $"API Parse Error: {res.Content}" }; + } } - errorResponse ??= new ErrorResponse { ErrorMessage = res.ErrorMessage ?? $"API Error: {res.StatusCode}" }; + errorResponse ??= new ErrorResponse + { + ErrorMessage = !string.IsNullOrEmpty(res.ErrorMessage) ? res.ErrorMessage : $"Server Exception: {res.StatusCode}" + }; - if (!_settings.ThrowExceptionOnFail) + return ProcessFailure(res.StatusCode, errorResponse); + } + + /// + /// Throws when ThrowExceptionOnFail is set, otherwise returns an ERROR response instance. + /// + private TResponse ProcessFailure(System.Net.HttpStatusCode statusCode, ErrorResponse error) where TResponse : Models.Management.RestResponseBase + { + if (_settings.ThrowExceptionOnFail) { - var response = Activator.CreateInstance(); - response.Error = errorResponse; - response.ResponseStatus = Enums.ResponseStatus.ERROR; - return response; + throw new SaferPayException(statusCode, error); } - throw new SaferPayException(res.StatusCode, errorResponse); + var response = Activator.CreateInstance(); + response.Error = error; + response.ResponseStatus = Enums.ResponseStatus.ERROR; + return response; } - - private TResponse HandleErrorResponse(RestResponse res) where TResponse : Models.Management.RestResponseBase + /// + /// Build an error response (or throw) for a failed Send call (Core JSON API). + /// + private TResponse HandleSendErrorResponse(RestResponse res) where TResponse : ResponseBase { - // 1. 404 Özel Kontrolü (Genellikle içerik boş döner, bu yüzden manuel mesaj ekliyoruz) - if (res.StatusCode == System.Net.HttpStatusCode.NotFound) + if (res == null) { - var notFoundError = new ErrorResponse { ErrorMessage = "Requested resource not found (404)." }; - return ProcessFailure(res.StatusCode, notFoundError); + return ProcessSendFailure(default, new ErrorResponse { ErrorMessage = "No response from server." }); } - // 2. API'den gelen hata içeriğini (JSON) deserialize etmeye çalışıyoruz ErrorResponse errorResponse = null; if (!string.IsNullOrEmpty(res.Content)) { try { - // Saferpay hata formatına göre (Behavior, ErrorName, ErrorMessage vb.) çözümlüyoruz errorResponse = JsonConvert.DeserializeObject(res.Content, _jsonSerializerSettings); } catch (JsonException) { - // Yanıt JSON formatında değilse veya beklenmedik bir yapıdaysa errorResponse = new ErrorResponse { ErrorMessage = $"API Parse Error: {res.Content}" }; } } - // 3. Eğer içerik boşsa veya deserialization başarısız olduysa RestSharp hata mesajlarını kullanıyoruz errorResponse ??= new ErrorResponse { ErrorMessage = !string.IsNullOrEmpty(res.ErrorMessage) ? res.ErrorMessage : $"Server Exception: {res.StatusCode}" }; - return ProcessFailure(res.StatusCode, errorResponse); + return ProcessSendFailure(res.StatusCode, errorResponse); } /// - /// Ayarlara göre hata fırlatan veya Response nesnesi dönen yardımcı alt metot + /// Throws when ThrowExceptionOnFail is set, otherwise returns an ERROR response instance. /// - private TResponse ProcessFailure(System.Net.HttpStatusCode statusCode, ErrorResponse error) where TResponse : Models.Management.RestResponseBase + private TResponse ProcessSendFailure(System.Net.HttpStatusCode statusCode, ErrorResponse error) where TResponse : ResponseBase { if (_settings.ThrowExceptionOnFail) { - // Gelişmiş bir exception fırlatıyoruz throw new SaferPayException(statusCode, error); } - // Exception istenmiyorsa ERROR statusü ile nesne dönüyoruz var response = Activator.CreateInstance(); response.Error = error; response.ResponseStatus = Enums.ResponseStatus.ERROR;