示例#1
0
        public async Task <HubtelPosProxyResponse <MerchantMomoResponse> > ChargeMomoAsync(PaymentRequest paymentRequest, string accountId)
        {
            string merchantAccountNumber = await FindAccountNumberAsync(accountId).ConfigureAwait(false);

            var url = $"{_merchantAccountConfiguration.PublicBaseUrl}/merchants/{merchantAccountNumber}/receive/mobilemoney";

            var authToken          = HubtelBasicAuthHelper.GenerateToken(_merchantAccountConfiguration.ApiKey, accountId);
            var paymentType        = _paymentTypeConfiguration.PaymentTypes.Find(x => x.Type.ToLower().Equals(paymentRequest.PaymentType.ToLower()));
            var momoPaymentRequest = MomoPaymentRequest.ToMomoPaymentRequest(paymentRequest,
                                                                             $"{_merchantAccountConfiguration.CallbackBaseUrl}/{paymentType.PrimaryCallbackUrl}",
                                                                             $"{_merchantAccountConfiguration.CallbackBaseUrl}/{paymentType.SecondaryCallbackUrl}");

            using (var response = await _merchantAccountHttpClient.PostAsync(url, momoPaymentRequest,
                                                                             _merchantAccountConfiguration.Scheme, authToken))
            {
                var respData = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var result = JsonConvert.DeserializeObject <MerchantMomoResponse>(respData);

                    _logger.LogDebug(respData);
                    return(Responses.SuccessResponse(StatusMessage.Created, result, ResponseCodes.SUCCESS));
                }
                var error = GetMerchantAccountErrorResponse(respData, response.ReasonPhrase);
                _logger.LogError(response.ReasonPhrase);
                _logger.LogError(respData);
                return(Responses.ErrorResponse(error.ToErrors(), new MerchantMomoResponse(), error.Message, ResponseCodes.EXTERNAL_ERROR));
            }
        }
示例#2
0
        public async Task <MomoFeeResponse> GetMomoFeesAsync(decimal amount, string momoChannel, bool chargeCustomer, string accountId)
        {
            string merchantAccountNumber = await FindAccountNumberAsync(accountId).ConfigureAwait(false);

            var url = $"{_merchantAccountConfiguration.PublicBaseUrl}/merchants/{merchantAccountNumber}/charges/mobile/receive";

            var authToken = HubtelBasicAuthHelper.GenerateToken(_merchantAccountConfiguration.ApiKey, accountId);

            var momoFeeRequest = new MomoFeeRequest
            {
                Amount         = amount,
                Channel        = momoChannel,
                FeesOnCustomer = chargeCustomer
            };

            using (var response = await _merchantAccountHttpClient.PostAsync(url, momoFeeRequest,
                                                                             _merchantAccountConfiguration.Scheme, authToken))
            {
                var respData = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var result = JsonConvert.DeserializeObject <MomoFeeResponse>(respData);

                    _logger.LogDebug(respData);
                    return(result);
                }
                var error = GetMerchantAccountErrorResponse(respData, response.ReasonPhrase);
                _logger.LogError(response.ReasonPhrase);
            }
            return(new MomoFeeResponse());
        }
示例#3
0
        public async Task <HubtelPosProxyResponse <MerchantTransactionCheckResponse> > CheckTransactionStatusAsync(PaymentRequest paymentRequest, string accountId)
        {
            string merchantAccountNumber = await FindAccountNumberAsync(accountId).ConfigureAwait(false);

            var url = $"{_merchantAccountConfiguration.PublicBaseUrl}/merchants/{merchantAccountNumber}/transactions/status?" +
                      $"hubtelTransactionId={paymentRequest.TransactionId}";

            var authToken = HubtelBasicAuthHelper.GenerateToken(_merchantAccountConfiguration.ApiKey, accountId);

            using (var response = await _merchantAccountHttpClient.GetAsync(url,
                                                                            _merchantAccountConfiguration.Scheme, authToken))
            {
                var respData = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var result = JsonConvert.DeserializeObject <MerchantTransactionCheckResponse>(respData);

                    _logger.LogDebug(respData);
                    return(Responses.SuccessResponse(StatusMessage.Found, result, ResponseCodes.SUCCESS));
                }
                var error = GetMerchantAccountErrorResponse(respData, response.ReasonPhrase);
                _logger.LogError(response.ReasonPhrase);
                _logger.LogError(respData);
                return(Responses.ErrorResponse(error.ToErrors(), new MerchantTransactionCheckResponse(), error.Message, ResponseCodes.EXTERNAL_ERROR));
            }
        }
示例#4
0
        public async Task <HubtelPosProxyResponse <OrderResponse> > RecordOrderAsync(OrderRequest orderRequest, string accountId)
        {
            var url = $"{_unifiedSalesConfiguration.BaseUrl}/orders";

            var authToken = HubtelBasicAuthHelper.GenerateToken(_unifiedSalesConfiguration.ApiKey, accountId);

            using (var response = await _unifiedSalesHttpClient.PostAsync(url, orderRequest, _unifiedSalesConfiguration.Scheme, authToken))
            {
                var respData = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var result = JsonConvert.DeserializeObject <OrderResponseWrapper>(respData);

                    _logger.LogDebug(respData);
                    return(Responses.SuccessResponse(StatusMessage.Found, result.Data, ResponseCodes.SUCCESS));
                }
                var error = JsonConvert.DeserializeObject <UnifiedSalesErrorResponse>(respData, new JsonSerializerSettings
                {
                    Error = HandleDeserializationError
                });
                if (error != null && error.Code == 4000)
                {
                    var validationError = JsonConvert.DeserializeObject <UnifiedSalesValidationErrorResponse>(respData, new JsonSerializerSettings
                    {
                        Error = HandleDeserializationError
                    });
                    return(Responses.ErrorResponse(validationError.ToErrors(), new OrderResponse(), error.Message, ResponseCodes.EXTERNAL_ERROR));
                }
                _logger.LogError(response.ReasonPhrase);
                _logger.LogError(respData);
                return(Responses.ErrorResponse(error.ToErrors(), new OrderResponse(), error.Message, ResponseCodes.EXTERNAL_ERROR));
            }
        }
示例#5
0
        private async Task <MerchantAccountNumberResponse> SearchAsync(string accountId)
        {
            var url = $"{_merchantAccountConfiguration.PrivateBaseUrl}/merchants/search?hubtelAccountId={accountId}";

            var authToken = HubtelBasicAuthHelper.GenerateToken(_merchantAccountConfiguration.ApiKey, accountId);

            using (var response = await _merchantAccountHttpClient.GetAsync(url, _merchantAccountConfiguration.Scheme,
                                                                            authToken))
            {
                var respData = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    var result = JsonConvert.DeserializeObject <MerchantAccountNumberResponse>(respData);

                    _logger.LogDebug(respData);
                    return(result);
                }
                _logger.LogError(response.ReasonPhrase);
            }
            return(new MerchantAccountNumberResponse());
        }