/// <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); } }