Пример #1
0
        public PaymentResult BillPaymentRequest(int cyberplatOperatorId, StringList parametersList, string session)
        {
            var result = new PaymentResult
            {
                Error = 0
            };

            if (parametersList.ContainsKey("AllowPart") && bool.Parse(parametersList["AllowPart"]))
            {
                // todo проверка LOWER/UPPER
            }

            var token   = Authenticate();
            var request = GetRequestContent(Bilpmtrq);
            var signer  = new EfawateerSigner(_certificate);

            var guid = GenerateGuid();
            var time = DateTime.Now.ToString("s");

            request.Element("MsgHeader").Element("TmStp").Value = time;
            request.Element("MsgHeader").Element("TrsInf").Element("SdrCode").Value = _customerCode;

            var trxInf = request.Element("MsgBody").Element("Transactions").Element("TrxInf");

            var accInfo = trxInf.Element("AcctInfo");

            if (!parametersList.ContainsKey("BillingNo") || parametersList["BillingNo"].Contains("#"))
            {
                accInfo.Element("BillingNo").Remove();
                accInfo.Element("BillNo").Remove();
            }
            else
            {
                accInfo.Element("BillingNo").Value = parametersList["BillingNo"];
                accInfo.Element("BillNo").Value    = parametersList["BillingNo"];
            }

            accInfo.Element("BillerCode").Value =
                ExpandBillerCodeFromCyberplatOpertaroId(cyberplatOperatorId).ToString(CultureInfo.InvariantCulture);

            trxInf.Element("ServiceTypeDetails").Element("ServiceType").Value = parametersList.Get("ServiceType");

            trxInf.Element("DueAmt").Value  = parametersList.Get("DueAmt");
            trxInf.Element("PaidAmt").Value = parametersList.Get("DueAmt");

            trxInf.Element("ProcessDate").Value = time;
            trxInf.Element("BankTrxID").Value   = session;

            Audit("BillPaymentRequest request:" + request);

            request.Element("MsgFooter").Element("Security").Element("Signature").Value =
                signer.SignData(request.Element("MsgBody").ToString());

            var service = new PaymentClient(new WSHttpBinding(SecurityMode.None, true)
            {
                ReceiveTimeout = new TimeSpan(0, 0, 0, 0, _timeout)
            }, new EndpointAddress(_paymentUrl));
            var response = service.PayBill(guid, token, request);

            Audit("BillPaymentRequest response:" + response);

            trxInf       = response.Element("MsgBody").Element("Transactions").Element("TrxInf");
            result.Error = Convert.ToInt32(trxInf.Element("Result").Element("ErrorCode").Value);

            if (trxInf.Element("JOEBPPSTrx") != null)
            {
                result.JoebppsTrx = trxInf.Element("JOEBPPSTrx").Value;
            }

            if (trxInf.Element("STMTDate") != null)
            {
                result.StmtDate = DateTime.Parse(trxInf.Element("STMTDate").Value);
            }

            result.Params = parametersList;

            return(result);
        }
Пример #2
0
        public PaymentResult PrepaidValidationRequest(int cyberplatOperatorId, StringList parametersList)
        {
            var billerCode = ExpandBillerCodeFromCyberplatOpertaroId(cyberplatOperatorId);

            var token   = Authenticate();
            var request = GetRequestContent(Prepadvalrq);
            var signer  = new EfawateerSigner(_certificate);

            var time = DateTime.Now.ToString("s");
            var guid = GenerateGuid();

            request.Element("MsgHeader").Element("TmStp").Value = time;
            request.Element("MsgHeader").Element("TrsInf").Element("SdrCode").Value = _customerCode;
            request.Element("MsgHeader").Element("GUID").Value = guid;

            var billInfo = request.Element("MsgBody").Element("BillingInfo");
            var accInfo  = billInfo.Element("AcctInfo");

            accInfo.Element("BillerCode").Value = billerCode.ToString();

            if (!parametersList.ContainsKey("BillingNo") || parametersList["BillingNo"].Contains("#"))
            {
                accInfo.Element("BillingNo").Remove();
            }
            else
            {
                accInfo.Element("BillingNo").Value = parametersList["BillingNo"];
            }

            var serviceTypeDetails = billInfo.Element("ServiceTypeDetails");

            serviceTypeDetails.Element("ServiceType").Value = parametersList["ServiceType"];

            if (!parametersList.ContainsKey("PrepaidCat"))
            {
                serviceTypeDetails.Element("PrepaidCat").Remove();
            }
            else
            {
                serviceTypeDetails.Element("PrepaidCat").Value = parametersList["PrepaidCat"];
            }

            if (!parametersList.ContainsKey("DueAmt"))
            {
                billInfo.Element("DueAmt").Remove();
            }
            else
            {
                billInfo.Element("DueAmt").Value = parametersList["DueAmt"];
            }


            Audit("Validation request:" + request);

            request.Element("MsgFooter").Element("Security").Element("Signature").Value =
                signer.SignData(request.Element("MsgBody").ToString());

            var service = new PrepaidValidationClient(new WSHttpBinding(SecurityMode.None, true)
            {
                ReceiveTimeout = new TimeSpan(0, 0, 0, 0, _timeout)
            }, new EndpointAddress(_validationUrl));
            var response = service.Validate(guid, token, request);

            Audit("Validation response:" + response);

            billInfo = response.Element("MsgBody").Element("BillingInfo");

            var errorCode = Convert.ToInt32(billInfo.Element("Result").Element("ErrorCode").Value);

            if (errorCode == 0)
            {
                var validationCode = billInfo.Element("ValidationCode").Value;

                if (parametersList.ContainsKey("ValidationCode"))
                {
                    parametersList.Remove("ValidationCode");
                }

                parametersList.Add("ValidationCode", validationCode);
            }

            return(new PaymentResult
            {
                Params = parametersList,
                Error = errorCode
            });
        }
Пример #3
0
        public PaymentResult BillInquiryRequest(int cyberplatOperatorId, StringList parametersList)
        {
            var billerCode = ExpandBillerCodeFromCyberplatOpertaroId(cyberplatOperatorId);

            var token   = Authenticate();
            var request = GetRequestContent(Bilinqrq);
            var signer  = new EfawateerSigner(_certificate);

            var now = DateTime.Now;

            var time = now.ToString("s");
            var guid = GenerateGuid();

            request.Element("MsgHeader").Element("TmStp").Value = time;
            request.Element("MsgHeader").Element("TrsInf").Element("SdrCode").Value = _customerCode;

            var billInfo = request.Element("MsgBody");
            var accInfo  = billInfo.Element("AcctInfo");

            accInfo.Element("BillerCode").Value = billerCode.ToString(CultureInfo.InvariantCulture);

            if (!parametersList.ContainsKey("BillingNo") || parametersList["BillingNo"].Contains("#"))
            {
                accInfo.Element("BillingNo").Remove();
            }
            else
            {
                accInfo.Element("BillingNo").Value = parametersList["BillingNo"];
            }

            billInfo.Element("ServiceType").Value = parametersList.Get("ServiceType");

            var dateRange = billInfo.Element("DateRange");

            dateRange.Element("StartDt").Value = now.AddDays(-_startdt).ToString("s");
            dateRange.Element("EndDt").Value   = time;

            Audit("BillInquiryRequest request:" + request);

            request.Element("MsgFooter").Element("Security").Element("Signature").Value =
                signer.SignData(request.Element("MsgBody").ToString());

            var service = new BillInquiryClient(new WSHttpBinding(SecurityMode.None, true)
            {
                ReceiveTimeout = new TimeSpan(0, 0, 0, 0, _timeout)
            }, new EndpointAddress(_inquiryUrl));
            var response = service.Inquire(guid, token, request);

            Audit("BillInquiryRequest response:" + response);

            var errorCode = Convert.ToInt32(response.Element("MsgHeader").Element("Result").Element("ErrorCode").Value);

            if (errorCode != 0)
            {
                return new PaymentResult
                       {
                           Params = parametersList,
                           Error  = errorCode
                       }
            }
            ;

            errorCode = 0;

            if (response.Element("MsgBody") == null)
            {
                errorCode = 10;
            }
            else if (response.Element("MsgBody").Element("BillsRec") == null)
            {
                errorCode = 11;
            }
            else
            {
                var billRec = response.Element("MsgBody").Element("BillsRec").Element("BillRec");

                if (billRec.Element("OpenDate") != null)
                {
                    var openDate = DateTime.Parse(billRec.Element("OpenDate").Value);
                    if (openDate > now)
                    {
                        errorCode = 12;
                    }
                    //throw new Exception("Невозможно выполнить оплату счет в будущем (OpenDate)");
                }
                else
                {
                    var dueDate = DateTime.Parse(billRec.Element("DueDate").Value);
                    if (dueDate > now)
                    {
                        errorCode = 13;
                    }
                    //throw new Exception("Невозможно выполнить оплату счет в будущем (DueDate)");
                }

                if (billRec.Element("ExpiryDate") != null)
                {
                    var expiryDate = DateTime.Parse(billRec.Element("ExpiryDate").Value);
                    if (expiryDate < now)
                    {
                        errorCode = 14;
                    }
                    //throw new Exception("Невозможно выполнить оплату счет в прошлом (ExpiryDate)");
                }

                if (billRec.Element("CloseDate") != null)
                {
                    var closeDate = DateTime.Parse(billRec.Element("CloseDate").Value);
                    if (closeDate < now)
                    {
                        errorCode = 15;
                    }
                    //throw new Exception("Невозможно выполнить оплату счет в прошлом (CloseDate)");
                }

                if (errorCode == 0)
                {
                    var dueAmt   = billRec.Element("DueAmount").Value;
                    var inqRefNo = string.Empty;
                    if (billRec.Element("InqRefNo") != null)
                    {
                        inqRefNo = billRec.Element("InqRefNo").Value;
                    }

                    var pmtConst  = billRec.Element("PmtConst");
                    var lower     = pmtConst.Element("Lower").Value;
                    var upper     = pmtConst.Element("Upper").Value;
                    var allowPart = pmtConst.Element("AllowPart").Value;

                    parametersList.Add("INQREFNO", inqRefNo);
                    if (parametersList.ContainsKey("DueAmt"))
                    {
                        parametersList.Remove("DueAmt");
                    }
                    parametersList.Add("DueAmt", dueAmt);
                    parametersList.Add("AllowPart", allowPart);
                    parametersList.Add("LOWERAMOUNT", lower);
                    parametersList.Add("UPPERAMOUNT", upper);
                }
            }

            return(new PaymentResult
            {
                Params = parametersList,
                Error = errorCode
            });
        }
Пример #4
0
        public PaymentResult PaymentInquiryRequest(int cyberplatOperatorId, StringList parametersList, string session)
        {
            var result = new PaymentResult
            {
                Error = 0
            };

            var billerCode = ExpandBillerCodeFromCyberplatOpertaroId(cyberplatOperatorId);

            var token   = Authenticate();
            var request = GetRequestContent(Pmtinqrq);
            var signer  = new EfawateerSigner(_certificate);

            var now  = DateTime.Now;
            var time = now.ToString("s");
            var guid = GenerateGuid();

            request.Element("MsgHeader").Element("TmStp").Value = time;
            request.Element("MsgHeader").Element("TrsInf").Element("SdrCode").Value = _customerCode;

            var trxInf = request.Element("MsgBody").Element("Transactions").Element("TrxInf");

            trxInf.Element("PmtGuid").Value  = session;
            trxInf.Element("ParTrxID").Value = session;

            if (parametersList.ContainsKey("ValidationCode"))
            {
                trxInf.Element("ValidationCode").Value = parametersList["ValidationCode"];
            }
            else
            {
                trxInf.Element("ValidationCode").Remove();
            }

            trxInf.Element("DueAmt").Value      = parametersList.Get("DueAmt");
            trxInf.Element("PaidAmt").Value     = parametersList.Get("DueAmt");
            trxInf.Element("ProcessDate").Value = time;
            trxInf.Element("PaymentType").Value = parametersList.Get("PaymentType");
            trxInf.Element("ServiceTypeDetails").Element("ServiceType").Value = parametersList.Get("ServiceType");

            trxInf.Element("ServiceTypeDetails").Element("PrepaidCat").Remove();

            var accInfo = trxInf.Element("AcctInfo");

            if (!parametersList.ContainsKey("BillingNo") || parametersList["BillingNo"].Contains("#"))
            {
                accInfo.Element("BillingNo").Remove();
                accInfo.Element("BillNo").Remove();
            }
            else
            {
                accInfo.Element("BillingNo").Value = parametersList["BillingNo"];
                accInfo.Element("BillNo").Value    = parametersList["BillingNo"];
            }

            accInfo.Element("BillerCode").Value = billerCode.ToString(CultureInfo.InvariantCulture);

            Audit("PaymentInquiryRequest request:" + request);

            request.Element("MsgFooter").Element("Security").Element("Signature").Value =
                signer.SignData(request.Element("MsgBody").ToString());

            var service = new PaymentInquiryClient(new WSHttpBinding(SecurityMode.None, true)
            {
                ReceiveTimeout = new TimeSpan(0, 0, 0, 0, _timeout)
            }, new EndpointAddress(_paymentInquryUrl));
            var response = service.Inquire(guid, token, request);

            Audit("PaymentInquiryRequest response:" + response);

            if (response.Element("MsgBody") != null)
            {
                trxInf       = response.Element("MsgBody").Element("Transactions").Element("TrxInf");
                result.Error = Convert.ToInt32(trxInf.Element("Result").Element("ErrorCode").Value);
            }
            else
            {
                result.Error = Convert.ToInt32(response.Element("MsgHeader").Element("Result").Element("ErrorCode").Value);
            }

            result.StmtDate = DateTime.Now;

            return(result);
        }