public async Task <PaystackTransaction> GetTransactionTotal(PaystackSetting paystackSettings, TransactionSearchModel searchModel) { Guard.NotNull(paystackSettings, nameof(paystackSettings)); //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string apiEndPoint = paystackSettings.TransactionTotalEndPoint; RestRequest request = new RestRequest(apiEndPoint, Method.GET); request.AddHeader(paystackSettings.APIAcceptHeaderKey, paystackSettings.APIAcceptHeaderValue); request.AddHeader(paystackSettings.APIAuthorizationHeaderKey, paystackSettings.APIAuthorizationHeaderValue + " " + paystackSettings.Key); if (searchModel != null) { if (searchModel.DateFrom > DateTime.MinValue) { request.AddQueryParameter(paystackSettings.APIFromQueryParameterKey, searchModel.DateFrom.ToString(paystackSettings.TransactionSearchDateFormat)); } if (searchModel.DateTo > DateTime.MinValue) { request.AddQueryParameter(paystackSettings.APIToQueryParameterKey, searchModel.DateTo.AddDays(1).ToString(paystackSettings.TransactionSearchDateFormat)); } } //RestClient client = new RestClient(paystackSettings.ApiBaseUrl); //var transactionResponse = client.Execute(request); //return JsonConvert.DeserializeObject<PaystackTransaction>(transactionResponse.Content); return(await Post(paystackSettings, request)); }
public async Task <PaystackTransaction> GetTransaction(PaystackSetting paystackSetting, int tranxid) { try { Guard.NotNull(paystackSetting, nameof(paystackSetting)); //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string apiEndPoint = paystackSetting.FetchTransactionEndPoint + tranxid; RestRequest request = new RestRequest(apiEndPoint, Method.GET); request.AddHeader(paystackSetting.APIAcceptHeaderKey, paystackSetting.APIAcceptHeaderValue); request.AddHeader(paystackSetting.APIAuthorizationHeaderKey, paystackSetting.APIAuthorizationHeaderValue + " " + paystackSetting.Key); //RestClient client = new RestClient(paystackSetting.ApiBaseUrl); //var result = client.Execute(request); //PaystackTransaction paystackRepsonse = JsonConvert.DeserializeObject<PaystackTransaction>(result.Content); //return paystackRepsonse; return(await Post(paystackSetting, request)); } catch (Exception) { throw; } }
public async Task <PaystackTransactionList> FetchSettlements(PaystackSetting paystackSettings, TransactionSearchModel searchModel) { Guard.NotNull(paystackSettings, nameof(paystackSettings)); //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string apiEndPoint = paystackSettings.FetchSettlementsEndPoint; RestRequest request = new RestRequest(apiEndPoint, Method.GET); request.AddHeader(paystackSettings.APIAcceptHeaderKey, paystackSettings.APIAcceptHeaderValue); request.AddHeader(paystackSettings.APIAuthorizationHeaderKey, paystackSettings.APIAuthorizationHeaderValue + " " + paystackSettings.Key); if (searchModel != null) { if (searchModel.DateFrom > DateTime.MinValue) { request.AddQueryParameter(paystackSettings.APIFromQueryParameterKey, searchModel.DateFrom.ToString(paystackSettings.TransactionSearchDateFormat)); } if (searchModel.DateTo > DateTime.MinValue) { request.AddQueryParameter(paystackSettings.APIToQueryParameterKey, searchModel.DateTo.AddDays(1).ToString(paystackSettings.TransactionSearchDateFormat)); } } //TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>(); //RestRequestAsyncHandle handle = restClient.ExecuteAsync(request, r => taskCompletion.SetResult(r)); //RestResponse response = (RestResponse)(await taskCompletion.Task); //return JsonConvert.DeserializeObject<SomeObject>(response.Content); return(await PostRequest(paystackSettings, request)); }
public ConfigurationModel() { PaystackSetting = new PaystackSetting(); TransactionSearchModel = new TransactionSearchModel(); PaystackTransaction = new PaystackTransaction(); PaystackTransaction.Data = new Data(); }
public async Task CanGenerateTransactionReference_Unit() { PaystackSetting paystackSetting = new PaystackSetting() { UsePublicKey = false, ApiBaseUrl = "https://api.paystack.co/", ReferencePrefix = "PV", PublicKey = "pk_test_0b413fb09eeb29832cded5a56918a0f5f6a4c2f0", SecretKey = "sk_test_6ce9543acf5dd68127387f49ce437f7f82aafb47", ListTransactionEndPoint = "/transaction", VerifyTransactionEndPoint = "/transaction/verify/", FetchTransactionEndPoint = "/transaction/", InitializeTransactionEndPoint = "/transaction/initialize", TransactionTotalEndPoint = "/transaction/totals", FetchSettlementsEndPoint = "/settlement", APIAcceptHeaderKey = "accept", APIAcceptHeaderValue = "application/json", APIAuthorizationHeaderKey = "Authorization", APIAuthorizationHeaderValue = "Bearer", APIFromQueryParameterKey = "from", APIToQueryParameterKey = "to", APIAmountQueryParameterKey = "amount", APIStatusQueryParameterKey = "status", APIReferenceParameterKey = "reference", APIAmountParameterKey = "amount", APICallbackUrlParameterKey = "callback_url", APIEmailParameterKey = "email", APICustomFieldsParameterKey = "custom_fields", APIMetaDataParameterKey = "metadata", TransactionSearchDateFormat = "yyyy-MM-dd", }; string tranxRef = "099885321155456"; PaystackTransactionLog transactionLog = new PaystackTransactionLog() { Reference = tranxRef, TransactionDate = DateTime.UtcNow, }; _settingService.Setup(x => x.GetSetting <PaystackSetting>()).Returns(Task.FromResult(paystackSetting)); _gatewayLuncher.Setup(x => x.CreateTransactionRef(paystackSetting.ReferencePrefix)).Returns(Task.FromResult(tranxRef)); _transactionLogService.Setup(x => x.SaveAsync(transactionLog)).Verifiable(); var transactionRef = new TransactionReference(_transactionLogService.Object, _gatewayLuncher.Object, _settingService.Object, _widgetProvider.Object); var response = await transactionRef.InvokeAsync(); var result = (ViewViewComponentResult)response; Assert.NotNull(result); Assert.NotNull(response); Assert.IsType <ViewViewComponentResult>(response); Assert.IsType <string>(result.ViewData.Model); }
private async Task <PaystackTransaction> Post(PaystackSetting paystackSettings, RestRequest request) { RestClient client = new RestClient(paystackSettings.ApiBaseUrl); TaskCompletionSource <IRestResponse> taskCompletion = new TaskCompletionSource <IRestResponse>(); RestRequestAsyncHandle requestHandle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r)); RestResponse transactionResponse = (RestResponse)(await taskCompletion.Task); if (transactionResponse.ErrorException != null) { throw transactionResponse.ErrorException; } return(JsonConvert.DeserializeObject <PaystackTransaction>(transactionResponse.Content)); }
public async Task <PaystackTransaction> VerifyTransaction(PaystackSetting paystackSettings, string tranxid) { Guard.NotNull(paystackSettings, nameof(paystackSettings)); //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string apiEndPoint = paystackSettings.VerifyTransactionEndPoint + tranxid; RestRequest request = new RestRequest(apiEndPoint, Method.GET); request.AddHeader(paystackSettings.APIAcceptHeaderKey, paystackSettings.APIAcceptHeaderValue); request.AddHeader(paystackSettings.APIAuthorizationHeaderKey, paystackSettings.APIAuthorizationHeaderValue + " " + paystackSettings.Key); //RestClient client = new RestClient(paystackSettings.ApiBaseUrl); //var transactionResponse = client.Execute(request); //return JsonConvert.DeserializeObject<PaystackTransaction>(transactionResponse.Content); return(await Post(paystackSettings, request)); }
public async Task PostProcessPayment(ProcessPaymentRequest processPaymentRequest) { HttpContext httpContext = processPaymentRequest.HttpContext; try { if (processPaymentRequest.PaymentStatus == PaymentStatus.Paid) { return; } int selectedCurrencyId = processPaymentRequest.SelectedCurrencyId; PaystackSupportedCurrency supportedCurrency = await _supportedCurrencyService.GetSupportedCurrencyById(selectedCurrencyId); if (supportedCurrency == null || supportedCurrency.Id <= 0) { throw new ArgumentNullException("Plugins.SmartStore.Paystack.SupportedCurrencyNullArgument"); } PaystackSetting paystackSettings = await _settingService.GetSetting <PaystackSetting>(); if (paystackSettings == null) { throw new ArgumentNullException("Plugins.SmartStore.Paystack.PaystackSettingsNullArgument"); } PaystackTransaction transactionResponse = await _gatewayLuncher.MakePayment(processPaymentRequest, paystackSettings, supportedCurrency, httpContext); if (transactionResponse != null && transactionResponse.status && !string.IsNullOrWhiteSpace(transactionResponse.Data.authorization_url)) { await _gatewayLuncher.LogTransaction(transactionResponse); await _gatewayLuncher.LunchPaymentPage(httpContext, transactionResponse.Data.authorization_url); } else { string errorMessage = transactionResponse != null ? transactionResponse.message : string.Format("Plugins.SmartStore.Paystack.EmptyGatewayResponseMessage"); httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, errorMessage); } } catch (Exception ex) { httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, ex.Message); } }
private async Task <string> LogTransactionReference() { PaystackSetting setting = await _settingService.GetSetting <PaystackSetting>(); if (setting == null) { return(null); } string transactionRef = await _gatewayLuncher.CreateTransactionRef(setting.ReferencePrefix); PaystackTransactionLog transactionLog = new PaystackTransactionLog() { Reference = transactionRef, TransactionDate = DateTime.UtcNow, }; await _transactionLogService.SaveAsync(transactionLog); return(transactionRef); }
public async Task <IViewComponentResult> InvokeAsync() { PaystackTransaction transactionResponse = null; TransactionResponseModel transactionResponseModel = null; PaystackSetting paystackSetting = null; try { string tranxid = _httpContext.Request.Query["reference"].ToString(); if (!tranxid.IsEmpty()) { paystackSetting = await _settingService.GetSetting <PaystackSetting>(); transactionResponse = await _gatewayLuncher.VerifyTransaction(paystackSetting, tranxid); await _httpContext.Session.SetComplexData(_gatewayLuncher.GatewayResponse, transactionResponse); if (transactionResponse != null && transactionResponse.Data != null && transactionResponse.Data.customer != null) { transactionResponse.status = false; transactionResponseModel = new TransactionResponseModel() { ResponseData = transactionResponse.Data }; transactionResponseModel.HomePageUrl = _gatewayLuncher.GetRedirectUrl(_httpContext.Request, "Index", "Home"); if (transactionResponse.status) { _gatewayLuncher.IsSuccessful = true; transactionResponseModel.AlertType = "primary"; transactionResponseModel.BorderColor = "blue"; transactionResponseModel.ThankYou = "Your transaction was successful"; transactionResponseModel.PaymentSuccessful = true; } else { _gatewayLuncher.IsSuccessful = false; transactionResponseModel.BorderColor = "red"; transactionResponseModel.AlertType = "danger"; transactionResponseModel.ThankYou = "Your transaction failed!"; transactionResponseModel.ErrorMessage = transactionResponse.Data.gateway_response; transactionResponseModel.PaymentSuccessful = false; //transactionResponseModel.ErrorMessage = transactionResponse.Data.gateway_response; //_httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, transactionResponseModel.TransactionSummary); } transactionResponseModel.Currency = transactionResponse.Data.currency; transactionResponseModel.GatewayResponse = transactionResponse.Data.gateway_response; transactionResponseModel.TransactionReference = transactionResponse.Data.reference; transactionResponseModel.TransactionStatus = transactionResponse.Data.status; } else { transactionResponseModel.ErrorMessage = "Gateway response is empty! Please click on the 'Continue button' below to initiate another transaction."; //_httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, "Gateway response is empty! Please click on the 'Continue button' below to initiate another transaction."); // "Transction response is empty"; } } else { transactionResponseModel.ErrorMessage = "No Transction Reference returned!"; //_httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, "No Transction Reference returned!"); // "No Transction Reference returned!"; } } catch (Exception ex) { transactionResponseModel.ErrorMessage = ex.Message; ////_logger.Error(ex); //_httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, ex.Message); } try { await _gatewayLuncher.LogTransaction(transactionResponse); //Order order = _orderService.GetOrderById(GatewayLuncher.RegistrationId); //SetOrderStatus(order, transactionResponse.status); //bool sendMail = paystackSetting.SendMailOnFailedTransaction == true || _gatewayLuncher.IsSuccessful == true; //SendEmail(order, sendMail); } catch (Exception ex) { transactionResponseModel.ErrorMessage = ex.Message; //_logger.Error(ex); //_httpContext.Session.SetString(_gatewayLuncher.ErrorMessage, ex.Message); } //ViewViewComponentResult viewComponent = null; //bool isRegistered = _widgetProvider.IsRegistered(WidgetZone.PaymentGatewayHappyResponse); //if (isRegistered && _gatewayLuncher.IsSuccessful) //{ // viewComponent = await Task.FromResult(View(transactionResponseModel)); //} //else //{ // viewComponent = await Task.FromResult(View(new TransactionResponseModel())); //} ViewViewComponentResult viewComponent = null; bool isRegistered = _widgetProvider.IsRegistered(WidgetZone.PaymentGatewayResponse); if (isRegistered) { viewComponent = await Task.FromResult(View(transactionResponseModel)); } return(viewComponent); }
public async Task <PaystackTransaction> MakePayment(ProcessPaymentRequest processPaymentRequest, PaystackSetting paystackSetting, PaystackSupportedCurrency supportedCurrency, HttpContext httpContext) { try { RegistrationId = processPaymentRequest.Registration.Id; string reference = processPaymentRequest.TransactionReference; string apiEndPoint = paystackSetting.InitializeTransactionEndPoint; string callbackUrl = GetRedirectUrl(httpContext.Request, "Completed", "Registration", "Student", RegistrationId); OrderTotal = Math.Truncate(processPaymentRequest.AmountPayable * supportedCurrency.LeastValueUnitMultiplier); RestRequest request = new RestRequest(apiEndPoint, Method.POST); request.AddHeader(paystackSetting.APIAcceptHeaderKey, paystackSetting.APIAcceptHeaderValue); request.AddHeader(paystackSetting.APIAuthorizationHeaderKey, paystackSetting.APIAuthorizationHeaderValue + " " + paystackSetting.Key); request.AddParameter(paystackSetting.APIReferenceParameterKey, reference); request.AddParameter(paystackSetting.APIAmountParameterKey, OrderTotal); request.AddParameter(paystackSetting.APICallbackUrlParameterKey, callbackUrl); request.AddParameter(paystackSetting.APIEmailParameterKey, httpContext.User.Identity.Name); return(await Post(paystackSetting, request)); } catch (Exception) { throw; } }