public static GetBillersResponse GetBillers()
        {
            GetBillersResponse billers = new GetBillersResponse();

            //Console.WriteLine("Getting Error response. . .");
            ErrorResponse errorResponse = validateCredentials(credentials);
            //Console.WriteLine("Error response. . ."+ errorResponse.responseMsg);

            string responseCode = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                billers.responseCode = errorResponse.responseCode;
                billers.responseMsg  = errorResponse.responseMsg;
                return(billers);
            }

            try
            {
                var response = WebClientUtil.GetResponse(credentials.url, RemitaBillerUrl.GetBillers(), _header);
                billers = JsonConvert.DeserializeObject <GetBillersResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(billers);
        }
        public static GetCustomFieldsResponse GetCustomFields(string billId)
        {
            GetCustomFieldsResponse servicesTypes = new GetCustomFieldsResponse();

            ErrorResponse errorResponse = validateCredentials(credentials);
            string        responseCode  = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                servicesTypes.responseCode = errorResponse.responseCode;
                servicesTypes.responseMsg  = errorResponse.responseMsg;
                return(servicesTypes);
            }

            if (String.IsNullOrEmpty(billId))
            {
                servicesTypes.responseCode = "14";
                servicesTypes.responseMsg  = "Missing billId parameter";
                return(servicesTypes);
            }

            try
            {
                var response = WebClientUtil.GetResponse(credentials.url, RemitaBillerUrl.GetServiceTypes(billId), _header);

                servicesTypes = JsonConvert.DeserializeObject <GetCustomFieldsResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(servicesTypes);
        }
        public static PaymentStatusResponse PaymentStatus(string transactionId)
        {
            PaymentStatusResponse paymentStatusResponse = new PaymentStatusResponse();
            ErrorResponse         errorResponse         = validateCredentials(credentials);
            string responseCode = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                paymentStatusResponse.responseCode = errorResponse.responseCode;
                paymentStatusResponse.responseMsg  = errorResponse.responseMsg;
                return(paymentStatusResponse);
            }

            if (String.IsNullOrEmpty(transactionId))
            {
                paymentStatusResponse.responseCode = "22";
                paymentStatusResponse.responseMsg  = "Missing transactionId parameter";
                return(paymentStatusResponse);
            }
            try
            {
                var response = WebClientUtil.GetResponse(credentials.url, RemitaBillerUrl.PaymentStatus(transactionId), _header);
                paymentStatusResponse = JsonConvert.DeserializeObject <PaymentStatusResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(paymentStatusResponse);
        }
        public static GetRRRDetailsResponse GetRRRDetails(string rrr)
        {
            GetRRRDetailsResponse rrrDetails = new GetRRRDetailsResponse();

            ErrorResponse errorResponse = validateCredentials(credentials);
            string        responseCode  = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                rrrDetails.responseCode = errorResponse.responseCode;
                rrrDetails.responseMsg  = errorResponse.responseMsg;
                return(rrrDetails);
            }

            if (String.IsNullOrEmpty(rrr))
            {
                rrrDetails.responseCode = "20";
                rrrDetails.responseMsg  = "Missing rrr parameter";
                return(rrrDetails);
            }
            try
            {
                var response = WebClientUtil.GetResponse(credentials.url, RemitaBillerUrl.GetRRRDetails(rrr), _header);

                rrrDetails = JsonConvert.DeserializeObject <GetRRRDetailsResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(rrrDetails);
        }
        public static GenerateRRRResponse GenerateRRR(GenerateRRRRequest generateRRRRequest)
        {
            GenerateRRRResponse generateRRRResponse = new GenerateRRRResponse();

            ErrorResponse errorResponse = validateCredentials(credentials);
            string        responseCode  = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                generateRRRResponse.responseCode = errorResponse.responseCode;
                generateRRRResponse.responseMsg  = errorResponse.responseMsg;
                return(generateRRRResponse);
            }

            if (generateRRRRequest == null)
            {
                generateRRRResponse.responseCode = "18";
                generateRRRResponse.responseMsg  = "Missing Generate RRR Request object";
                return(generateRRRResponse);
            }

            String jsonGenerateRRRRequest = JsonConvert.SerializeObject(generateRRRRequest);

            try
            {
                var response = WebClientUtil.PostResponse(credentials.url, RemitaBillerUrl.Generate(), jsonGenerateRRRRequest, _header);
                generateRRRResponse = JsonConvert.DeserializeObject <GenerateRRRResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(generateRRRResponse);
        }
        public static ValidateResponse Validate(ValidateRequest validateRequest)
        {
            ValidateResponse validateResponse = new ValidateResponse();

            ErrorResponse errorResponse = validateCredentials(credentials);
            string        responseCode  = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                validateResponse.responseCode = errorResponse.responseCode;
                validateResponse.responseMsg  = errorResponse.responseMsg;
                return(validateResponse);
            }

            if (validateRequest == null)
            {
                validateResponse.responseCode = "14";
                validateResponse.responseMsg  = "Missing Validate Request object";
                return(validateResponse);
            }

            String jsonValidateRequest = JsonConvert.SerializeObject(validateRequest);

            try
            {
                var response = WebClientUtil.PostResponse(credentials.url, RemitaBillerUrl.Validate(), jsonValidateRequest, _header);
                validateResponse = JsonConvert.DeserializeObject <ValidateResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(validateResponse);
        }
        public static BillPaymentNotificationResponse BillPaymentNotification(NotificationRequest notificationRequest)
        {
            BillPaymentNotificationResponse notificationResponse = new BillPaymentNotificationResponse();
            ErrorResponse errorResponse = validateCredentials(credentials);
            string        responseCode  = errorResponse.responseCode;

            if (errorResponse.responseCode != "00")
            {
                notificationResponse.responseCode = errorResponse.responseCode;
                notificationResponse.responseMsg  = errorResponse.responseMsg;
                return(notificationResponse);
            }

            if (notificationRequest == null)
            {
                notificationResponse.responseCode = "24";
                notificationResponse.responseMsg  = "Missing Notification Request Object";
                return(notificationResponse);
            }

            var    stringToHash = notificationRequest.rrr + notificationRequest.amountDebitted + notificationRequest.fundingSource + notificationRequest.debittedAccount + notificationRequest.paymentAuthCode + credentials.secretKey;
            string hashed       = SHA512(stringToHash);

            notificationRequest.hash = hashed;

            String jsonNotificationRequest = JsonConvert.SerializeObject(notificationRequest);

            credentials.transactionId = DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString();

            try
            {
                headers.Add(new Header {
                    header = "transactionId", value = credentials.transactionId
                });
                headers.Add(new Header {
                    header = "TXN_HASH", value = notificationRequest.hash
                });
                headers.Add(new Header {
                    header = "secretKey", value = credentials.secretKey
                });
                _header.headers = headers;

                var response = WebClientUtil.PostResponse(credentials.url, RemitaBillerUrl.Notification(), jsonNotificationRequest, _header);
                notificationResponse = JsonConvert.DeserializeObject <BillPaymentNotificationResponse>(response);
            }
            catch (Exception)
            {
                throw;
            }
            return(notificationResponse);
        }