コード例 #1
0
        /// <summary>
        /// Makes HttpRequest to mpesa api server
        /// </summary>
        /// <param name="mpesaDto">Data transfer object</param>
        /// <param name="accessToken">Mpesa Accesstoken</param>
        /// <param name="mpesaEndpoint">Request endpoint</param>
        /// <param name="cancellationToken">Cancellation Token</param>
        /// <returns>Mpesa API response based on the API requests made.</returns>
        private async Task <T> MpesaPostRequestAsync <T>(object mpesaDto, string accessToken, string mpesaEndpoint, CancellationToken cancellationToken = default) where T : new()
        {
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            T      result  = new();
            string json    = JsonConvert.SerializeObject(mpesaDto);
            var    content = new StringContent(json, Encoding.UTF8, "application/json");

            cancellationToken.ThrowIfCancellationRequested();
            var response = await _client.PostAsync(mpesaEndpoint, content, cancellationToken).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                await response.Content.ReadAsStreamAsync().ContinueWith((Task <Stream> stream) =>
                {
                    using var reader = new StreamReader(stream.Result);
                    using var json   = new JsonTextReader(reader);
                    result           = _serializer.Deserialize <T>(json);
                }, cancellationToken);
            }
            else
            {
                MpesaErrorResponse mpesaErrorResponse = new MpesaErrorResponse();
                await response.Content.ReadAsStreamAsync().ContinueWith((Task <Stream> stream) =>
                {
                    using var reader   = new StreamReader(stream.Result);
                    using var json     = new JsonTextReader(reader);
                    mpesaErrorResponse = _serializer.Deserialize <MpesaErrorResponse>(json);
                }, cancellationToken);

                throw new MpesaAPIException(new HttpRequestException(mpesaErrorResponse.ErrorMessage), response.StatusCode, mpesaErrorResponse);
            }
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Method makes the accesstoken request to mpesa api
        /// </summary>
        /// <param name="consumerKey"></param>
        /// <param name="consumerSecret"></param>
        /// <param name="mpesaRequestEndpoint"></param>
        /// <param name="cancellationToken">Cancellation Token</param>
        /// <returns>string representing accesstoken for the mpesa api calls</returns>
        private async Task <string> RequestAccessTokenAsync(string consumerKey, string consumerSecret, string mpesaRequestEndpoint, CancellationToken cancellationToken = default)
        {
            var keyBytes = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{consumerKey}:{consumerSecret}"));

            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", keyBytes);
            MpesaAccessTokenResponse result = new MpesaAccessTokenResponse();

            cancellationToken.ThrowIfCancellationRequested();
            var response = await _client.GetAsync(mpesaRequestEndpoint, cancellationToken).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                await response.Content.ReadAsStreamAsync().ContinueWith((Task <Stream> stream) =>
                {
                    using var reader = new StreamReader(stream.Result);
                    using var json   = new JsonTextReader(reader);
                    result           = _serializer.Deserialize <MpesaAccessTokenResponse>(json);
                }, cancellationToken);
            }
            else
            {
                MpesaErrorResponse mpesaErrorResponse = new MpesaErrorResponse();
                await response.Content.ReadAsStreamAsync().ContinueWith((Task <Stream> stream) =>
                {
                    using var reader   = new StreamReader(stream.Result);
                    using var json     = new JsonTextReader(reader);
                    mpesaErrorResponse = _serializer.Deserialize <MpesaErrorResponse>(json);
                }, cancellationToken);

                throw new MpesaAPIException(new HttpRequestException(mpesaErrorResponse.ErrorMessage), response.StatusCode, mpesaErrorResponse);
            }
            return(result.AccessToken);
        }
コード例 #3
0
 public MpesaAPIException(Exception ex, HttpStatusCode statusCode, MpesaErrorResponse mpesaErrorResponse) : base(ex.Message)
 {
     StatusCode          = statusCode;
     _mpesaErrorResponse = mpesaErrorResponse;
 }