/// <summary> /// Generate the token used to redirect the user to pay /// </summary> /// <param name="entityType"></param> /// <param name="stakeType"></param> /// <param name="reddeSettings"></param> /// <param name="MomoNumber"></param> /// <returns>The generated token and checkout Tranaction id</returns> public static async Task <(string token, int?checkoutransId)> GenerateReddeToken(EntityTypes entityType, IStakeType stakeType, ReddeSettingsDTO reddeSettings, string MomoNumber = null) { string customerMobileNumber = MomoNumber ?? stakeType.User.PhoneNumber; //string customerEmail = email == "default" ? stakeType.User.Email : email; try { ReddeCheckoutRequest request = new ReddeCheckoutRequest { Amount = stakeType.Amount, Apikey = reddeSettings.ApiKey, Appid = reddeSettings.AppId, Description = entityType.GetType().Name + " Investment", Failurecallback = "https://ntoboasuccess.com", Logolink = "https://ntoboafund.com/assets/images/ntlog.png", Merchantname = reddeSettings.NickName, Clienttransid = stakeType.Id, Successcallback = "https://ntoboafailure.com", }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); httpClient.DefaultRequestHeaders.Add("apikey", reddeSettings.ApiKey); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://api.reddeonline.com/v1/checkout/", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); ReddeCheckoutResponse response = JsonConvert.DeserializeObject <ReddeCheckoutResponse>(contentString); return(response.Responsetoken, response.Checkouttransid); } catch (Exception ex) { Console.WriteLine($"GenerateReddeToken {ex.Message}"); return(null, null); } }
private static async Task <int?> GenerateAndSendReddeInvoice(EntityTypes entityType, IStakeType stakeType, ReddeSettingsDTO reddeSettings, string PayOption, string MomoNumber = null, string voucher = null) { string customerMobileNumber = MomoNumber ?? stakeType.User.PhoneNumber; //string customerEmail = email == "default" ? stakeType.User.Email : email; try { ReddeRequest request = new ReddeRequest { Amount = stakeType.Amount, Appid = reddeSettings.AppId, Clientreference = stakeType.TxRef, Clienttransid = stakeType.TxRef, Description = entityType.ToString() + " Investment", Nickname = reddeSettings.NickName, Paymentoption = PayOption, Vouchercode = voucher, Walletnumber = FormatGhanaianPhoneNumberWp(customerMobileNumber) }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); httpClient.DefaultRequestHeaders.Add("apikey", reddeSettings.ApiKey); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://api.reddeonline.com/v1/receive", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); ReddeInitialResponse response = JsonConvert.DeserializeObject <ReddeInitialResponse>(contentString); return(response.Transactionid); } catch (Exception ex) { Console.WriteLine($"GenerateReddeToken {ex.Message}"); return(null); } }
public static async Task <SlydePayPaymentStatusResponse> CancelSlydePayTransaction(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings) { try { SlydePayCreateInvoiceRequest request = new SlydePayCreateInvoiceRequest { EmailOrMobileNumber = slydePayApiSettings.MerchantEmail, MerchantKey = slydePayApiSettings.Merchantkey, OrderCode = stakeType.TxRef }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://app.slydepay.com.gh/api/merchant/transaction/cancel", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); SlydePayPaymentStatusResponse response = JsonConvert.DeserializeObject <SlydePayPaymentStatusResponse>(contentString); return(response); } catch (Exception ex) { Console.WriteLine($"GenerateSlydePayToken {ex.Message}"); return(null); } }
/// <summary> /// Sends the momo invoice to users phone /// </summary> /// <param name="entityType"></param> /// <param name="stakeType"></param> /// <param name="redSettings"></param> /// <param name="momoAndVoucher"></param> /// <returns>Transaction Id</returns> public static async Task <int?> GenerateAndSendReddeMomoInvoice(EntityTypes entityType, IStakeType stakeType, ReddeSettingsDTO redSettings, string momoAndVoucher) { var mandV = momoAndVoucher.Split('*'); var MomoNumber = mandV[0]; var voucher = mandV[1]; if (string.IsNullOrEmpty(MomoNumber)) { return(null); } return(await GenerateAndSendReddeInvoice(entityType, stakeType, redSettings, getReddePayOption(MomoNumber), MomoNumber, voucher)); }
public static async Task <string> GenerateAndSendSlydePayAnkasaInvoice(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings) { return(await GenerateAndSendSlydePayInvoice(entityType, stakeType, slydePayApiSettings, "SLYDEPAY")); }
private static async Task <string> GenerateAndSendSlydePayInvoice(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings, string PayOption, string MomoNumber = null, string email = null) { string customerMobileNumber = MomoNumber ?? stakeType.User.PhoneNumber; string customerEmail = email == "default" ? stakeType.User.Email : email; try { SlydePayOrderItem item = new SlydePayOrderItem(); item.ItemCode = stakeType.Id.ToString(); item.ItemName = $"{entityType.ToString()} Investment"; item.Quantity = 1; item.SubTotal = stakeType.Amount; item.UnitPrice = stakeType.Amount; SlydePayOrderItem[] items = { item }; SlydePayCreateInvoiceRequest request = new SlydePayCreateInvoiceRequest { EmailOrMobileNumber = slydePayApiSettings.MerchantEmail, MerchantKey = slydePayApiSettings.Merchantkey, Amount = stakeType.Amount, OrderCode = stakeType.TxRef, OrderItems = items, SendInvoice = true, PayOption = PayOption, CustomerName = stakeType.User.FirstName + " " + stakeType.User.FirstName, CustomerEmail = customerEmail, CustomerMobileNumber = customerMobileNumber }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://app.slydepay.com.gh/api/merchant/invoice/create", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); SlydePayCreateInvoiceResponse response = JsonConvert.DeserializeObject <SlydePayCreateInvoiceResponse>(contentString); return(response.result.payToken); } catch (Exception ex) { Console.WriteLine($"GenerateSlydePayToken {ex.Message}"); return(null); } }
public static async Task <string> GenerateAndSendSlydePayCardInvoice(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings, string email) { return(await GenerateAndSendSlydePayInvoice(entityType, stakeType, slydePayApiSettings, "VISA", null, email)); }
public static async Task <string> GenerateAndSendSlydePayMomoInvoice(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings, string MomoNumber) { if (string.IsNullOrEmpty(MomoNumber)) { return(null); } return(await GenerateAndSendSlydePayInvoice(entityType, stakeType, slydePayApiSettings, getSlydePayOption(MomoNumber), MomoNumber)); }
public static async Task <string> GenerateSlydePayToken(EntityTypes entityType, IStakeType stakeType, SlydePayApiSettingsDTO slydePayApiSettings) { try { SlydePayOrderItem item = new SlydePayOrderItem(); item.ItemCode = stakeType.Id.ToString(); item.ItemName = $"{entityType.ToString()} Investment"; item.Quantity = 1; item.SubTotal = stakeType.Amount; item.UnitPrice = stakeType.Amount; SlydePayOrderItem[] items = { item }; SlydePayCreateInvoiceRequest request = new SlydePayCreateInvoiceRequest { EmailOrMobileNumber = slydePayApiSettings.MerchantEmail, MerchantKey = slydePayApiSettings.Merchantkey, Amount = stakeType.Amount, OrderCode = stakeType.TxRef, OrderItems = items }; //PayliveConnector connector = new PayliveConnector(slydePayApiSettings.ApiVersion, slydePayApiSettings.MerchantEmail, slydePayApiSettings.Merchantkey, slydePayApiSettings.ServiceType, slydePayApiSettings.IntegrationMode); var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://app.slydepay.com.gh/api/merchant/invoice/create", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); SlydePayCreateInvoiceResponse response = JsonConvert.DeserializeObject <SlydePayCreateInvoiceResponse>(contentString); return(response.result.payToken); } catch (Exception ex) { Console.WriteLine($"GenerateSlydePayToken {ex.Message}"); return(null); } }
public async void MomoTransfer(IStakeType stakeType) { if (Constants.PaymentGateway == PaymentGateway.flutterwave) { try { var data = new { account_bank = stakeType.User.MomoDetails.Network, account_number = Misc.FormatGhanaianPhoneNumberWp(stakeType.User.MomoDetails.Number), amount = stakeType.AmountToWin, seckey = AppSettings.FlatterWaveSettings.GetApiSecret(), narration = "Ntoboa " + stakeType + " Winner", currency = stakeType.User.MomoDetails.Currency, reference = stakeType.User.Id + DateTime.Now.ToShortDateString() + DateTime.Now.ToShortTimeString() + "_PMCK", beneficiary_name = stakeType.User.FirstName + " " + stakeType.User.LastName, callback_url = "https://32d4015e.ngrok.io/transaction/momohook" }; var payload = JsonConvert.SerializeObject(data, Misc.getDefaultResolverJsonSettings()); var stringContent = new StringContent(payload); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var httpClient = new HttpClient(); HttpResponseMessage response = await httpClient.PostAsync("https://api.ravepay.co/v2/gpx/transfers/create", stringContent); var responseStr = response.Content.ReadAsStringAsync().Result; var responseObject = JsonConvert.DeserializeObject <TransferResponse>(responseStr); if (responseObject.status == "success") { //If transfer is successfull add a new payment var payment = new Payment { // Reference = responseObject.data.reference, }; } else { } } catch (Exception ex) { } } else if (Constants.PaymentGateway == PaymentGateway.redde) { try { var txRef = Misc.getTxRef(stakeType.User.MomoDetails.Number); ReddeRequest request = new ReddeRequest { Amount = stakeType.AmountToWin, Appid = AppSettings.ReddeSettings.AppId, Clientreference = txRef, Clienttransid = txRef, Description = "", Nickname = AppSettings.ReddeSettings.NickName, Paymentoption = Misc.getReddePayOption(stakeType.User.MomoDetails.Number), Walletnumber = Misc.FormatGhanaianPhoneNumberWp(stakeType.User.MomoDetails.Number) }; var httpClient = new HttpClient(); var data = JsonConvert.SerializeObject(request, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); var stringContent = new StringContent(data); httpClient.DefaultRequestHeaders.Add("apikey", AppSettings.ReddeSettings.ApiKey); stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var responseMessage = await httpClient.PostAsync("https://api.reddeonline.com/v1/cashout", stringContent); var contentString = await responseMessage.Content.ReadAsStringAsync(); ReddeInitialResponse response = JsonConvert.DeserializeObject <ReddeInitialResponse>(contentString); if (response.Status == "OK") { dbContext.Payments.Add(new Payment { ItemPayedFor = stakeType.GetType().Name + " winning", ItemPayedForId = stakeType.Id, DatePayed = DateTime.Now }); await dbContext.SaveChangesAsync(); } } catch (Exception ex) { Console.WriteLine($"MomoTransfer {ex.Message}"); } } }
public async Task PersistReddeUssdData(string requestString) { using (var scope = serviceFactory.CreateScope()) { dbContext = scope.ServiceProvider.GetRequiredService <NtoboaFundDbContext>(); //types : lkm,bus,sch var match = Regex.Match(requestString, @"(?<type>\w+)-(?<amount>\d+)-(?<period>\w+)-(?<momonumber>\w+)-(?<voucher>[\w\s]+)-(?<mobilenumber>\w+)"); var type = match.Groups["type"].ToString(); var amount = Convert.ToDecimal(match.Groups["amount"].ToString()); var period = match.Groups["period"].ToString(); var momoNumber = "0" + Misc.NormalizePhoneNumber(match.Groups["momonumber"].ToString()); var voucher = match.Groups["voucher"].ToString(); var mobileNumber = "0" + Misc.NormalizePhoneNumber(match.Groups["mobilenumber"].ToString()); var user = await getMatchedUser(dbContext, mobileNumber); var txRef = Misc.getTxRef(mobileNumber); IStakeType stakeType = null; EntityTypes entityType; if (type == "lkm") { entityType = EntityTypes.Luckyme; stakeType = new LuckyMe { Amount = amount, Date = DateTime.Now.ToLongDateString(), AmountToWin = amount * Constants.LuckymeStakeOdds, Status = "pending", TxRef = txRef, Period = period, User = user }; dbContext.LuckyMes.Add(stakeType as LuckyMe); } else if (type == "bus") { entityType = EntityTypes.Business; stakeType = new Business { Amount = amount, Date = DateTime.Now.ToLongDateString(), AmountToWin = amount * Constants.BusinessStakeOdds, Status = "pending", TxRef = txRef, Period = period, User = user }; dbContext.Businesses.Add(stakeType as Business); } await dbContext.SaveChangesAsync(); try { var transactionId = await Misc.GenerateAndSendReddeMomoInvoice(EntityTypes.Scholarship, stakeType, Settings.ReddeSettings, $"{Misc.FormatGhanaianPhoneNumberWp(momoNumber)}*{voucher}"); if (type == "lkm") { var luckyMe = stakeType as LuckyMe; luckyMe.TransferId = transactionId; dbContext.Entry(luckyMe).State = Microsoft.EntityFrameworkCore.EntityState.Modified; await dbContext.SaveChangesAsync(); } else if (type == "bus") { var business = stakeType as Business; business.TransferId = transactionId; dbContext.Entry(business).State = Microsoft.EntityFrameworkCore.EntityState.Modified; await dbContext.SaveChangesAsync(); } } catch (Exception ex) { } } }