/// <summary>
        /// Registers Customer to Business Confirmation and Validation URLs.
        /// </summary>
        /// <param name="customerToBusinessRegisterUrl">C2B Register URLs data transfer object.</param>
        /// <param name="accesstoken">Acccesstoken retrieved by the <c>GetAuthTokenAsync</c> method.</param>
        /// <param name="mpesaRequestEndpoint">Set to <c>MpesaRequestEndpoint.RegisterC2BUrl</c></param>
        /// <param name="cancellationToken">Cancellation Token</param>
        /// <returns>A JSON string containing data from MPESA API reposnse.</returns>
        public async Task <MpesaResponse> RegisterC2BUrlAsync(CustomerToBusinessRegisterUrl customerToBusinessRegisterUrl, string accesstoken, string mpesaRequestEndpoint, CancellationToken cancellationToken = default)
        {
            var validator = new CustomerToBusinessRegisterUrlValidator();
            var results   = await validator.ValidateAsync(customerToBusinessRegisterUrl, cancellationToken);

            return(!results.IsValid
                ? throw new MpesaAPIException(HttpStatusCode.BadRequest, string.Join(Environment.NewLine, results.Errors.Select(x => x.ErrorMessage.ToString())))
                : await MpesaPostRequestAsync <MpesaResponse>(customerToBusinessRegisterUrl, accesstoken, mpesaRequestEndpoint, cancellationToken));
        }
        public async Task <object> RegisterURLs1(CustomerToBusinessRegisterUrl mpesaRequest, string token)
        {
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Clear();
            client.BaseAddress = new Uri("https://sandbox.safaricom.co.ke");

            client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
            var json = JsonConvert.SerializeObject(mpesaRequest);

            var httpContent = new StringContent(json, Encoding.UTF8, "application/json");

            var resWithToken = client.PostAsync("/mpesa/c2b/v1/registerurl", httpContent).Result;

            stringData = resWithToken.Content.ReadAsStringAsync().Result;
            var response = JsonConvert.DeserializeObject <URLRegisterResponse>(stringData);

            return(response);
        }
        public void RegisterURLs(CustomerToBusinessRegisterUrl mpesaRequest, string b2cUrl, string token)
        {
            if (mpesaRequest == null)
            {
                //return null;
            }
            string         serializedBodyRequest = JsonConvert.SerializeObject(mpesaRequest);
            HttpWebRequest httpRequest           = (HttpWebRequest)WebRequest.Create(b2cUrl);

            httpRequest.ContentType = "application/json";
            httpRequest.Method      = "POST";
            httpRequest.Headers.Add("Authorization", "Bearer" + token);
            using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
            {
                streamWriter.Write(serializedBodyRequest);
                streamWriter.Flush();
                streamWriter.Close();
            }
            try
            {
                HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                var             result       = "";
                using (var responseStream = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = responseStream.ReadToEnd();
                }
                var b2CResponse = JsonConvert.DeserializeObject <String>(result);
                if (b2CResponse == null)
                {
                    // return null;
                }
                //return b2CResponse;
            }
            catch (Exception Ex)
            {
                //return null;
            }
        }
        public async Task <IActionResult> C2BRegister(CustomerToBusinessRegisterViewModel customerToBusinessRegisterViewModel)
        {
            MpesaResponse c2BRegisterResults;

            try
            {
                var c2BRegisterCallback = new CustomerToBusinessRegisterUrl
                                          (
                    shortCode: _mpesaApiConfiguration.C2BShortCode,
                    responseType: customerToBusinessRegisterViewModel.customerToBusinessResponse.ToString(),
                    confirmationUrl: customerToBusinessRegisterViewModel.ConfirmationUrl,
                    validationUrl: customerToBusinessRegisterViewModel.ValidationUrl
                                          );

                c2BRegisterResults = await _mpesaClient.RegisterC2BUrlAsync(c2BRegisterCallback, await RetrieveAccessToken(), MpesaRequestEndpoint.RegisterC2BUrl);
            }
            catch (MpesaAPIException ex)
            {
                _logger.LogError(ex, ex.Message);
                return(View().WithDanger("Error", ex.Message));
            }

            return(View().WithSuccess("Success", "Successfully added C2B confirmation and validation URLs"));
        }