Esempio n. 1
0
        public async Task <AjaxResponse> GetMayBankCCValidateStatus(string refInfo)
        {
            ValidateStatusModel result = new ValidateStatusModel();
            string posting_data        = "";

            string[]            splitInfo;
            string              path          = string.Empty;
            string              url           = string.Empty;
            string              TXN_STATUS    = string.Empty;
            string              RESPONSE_CODE = string.Empty;
            string              RESPONSE_DESC = string.Empty;
            string              returnUrl     = string.Empty;
            NameValueCollection qscoll;

            try
            {
                if (refInfo.Contains("|"))
                {
                    splitInfo = refInfo.Split('|');
                }
                else
                {
                    result.Message = "Invalid Payment Info";
                    return(new AjaxResponse(new ErrorInfo(result.Message)));
                }

                if (splitInfo.Length != 4)
                {
                    result.Message = "Invalid Payment Info";
                    return(new AjaxResponse(new ErrorInfo(result.Message)));
                }

                url       = _appConfiguration["SUNSystem:MBBQueryURL"];
                returnUrl = _appConfiguration["SUNSystem:MBBReturnURL"];

                string MERCHANT_HASHKEY = splitInfo[0];
                string MERCHANT_ACC_NO  = splitInfo[1];
                string MERCHANT_TRANID  = splitInfo[2];
                string AMOUNT           = splitInfo[3];
                string TRANSACTION_TYPE = "1";
                string TXN_SIGNATURE    = Payment.Repo.RSASign.GetSignature(string.Concat(MERCHANT_HASHKEY, MERCHANT_ACC_NO, MERCHANT_TRANID, AMOUNT));
                string RESPONSE_TYPE    = "PLAIN";
                string RETURN_URL       = returnUrl;

                posting_data += "MERCHANT_ACC_NO=" + MERCHANT_ACC_NO + "&MERCHANT_TRANID=" + MERCHANT_TRANID + "&AMOUNT=" + AMOUNT;
                posting_data += "&TRANSACTION_TYPE=" + TRANSACTION_TYPE + "&TXN_SIGNATURE=" + TXN_SIGNATURE;
                posting_data += "&RESPONSE_TYPE=" + RESPONSE_TYPE + "&RETURN_URL=" + RETURN_URL;
                byte[] _byteVersion = Encoding.ASCII.GetBytes(posting_data);

                var sunSystem = new Payment.Repo.SUNSystemConnection();
                result.CheckSum = sunSystem.POSTWebRequest(url, posting_data, _byteVersion);
                if (string.IsNullOrEmpty(result.CheckSum))
                {
                    result.Message       = "No return from MayBank";
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                result.CheckSum = result.CheckSum.Replace("<BR>", "&");

                if (result.CheckSum.ToUpper().Contains("ERROR"))
                {
                    result.Message       = result.CheckSum;
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                var clearView = result.CheckSum.Replace("&", "&" + System.Environment.NewLine);

                qscoll = HttpUtility.ParseQueryString(result.CheckSum);
                if (qscoll != null)
                {
                    TXN_STATUS    = qscoll["TXN_STATUS"];
                    RESPONSE_CODE = qscoll["RESPONSE_CODE"];
                    RESPONSE_DESC = qscoll["RESPONSE_DESC"];
                }

                if (string.IsNullOrEmpty(TXN_STATUS))
                {
                    result.Message       = "No return from MayBank";
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                if (string.IsNullOrEmpty(RESPONSE_CODE))
                {
                    result.Message       = "No return from MayBank";
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                result.Message       = RESPONSE_DESC;
                result.DebitAuthCode = "99";

                if (TXN_STATUS.ToUpper() == "C")
                {
                    if (RESPONSE_CODE == "0")
                    {
                        result.DebitAuthCode = "00";
                    }
                }
                return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 2
0
        public async Task <AjaxResponse> GetFPXValidateStatus(string refInfo)
        {
            ValidateStatusModel result = new ValidateStatusModel();
            string posting_data        = "";

            string[]            splitInfo;
            string              path = string.Empty;
            string              url  = string.Empty;
            string              fpx_debitAuthCode = string.Empty;
            NameValueCollection qscoll;

            try
            {
                if (refInfo.Contains("|AR|"))
                {
                    splitInfo = refInfo.Replace("|AR|", "|AE|").Split('|');
                }
                else
                {
                    splitInfo = refInfo.Split('|');
                }

                if (splitInfo.Length != 20)
                {
                    result.Message = "Invalid Payment Info";
                    return(new AjaxResponse(new ErrorInfo(result.Message)));
                }

                if (splitInfo[9].ToUpper() != "AE")
                {
                    result.Message = "Invalid FPX Message Type";
                    return(new AjaxResponse(new ErrorInfo(result.Message)));
                }

                path = _appConfiguration["SUNSystem:CertificateDir"] + _appConfiguration["SUNSystem:SellerExId"] + ".key";
                url  = _appConfiguration["SUNSystem:FPXTXNSTAT"];

                string fpx_buyerAccNo      = splitInfo[0];
                string fpx_buyerBankBranch = splitInfo[1];
                string fpx_buyerBankId     = splitInfo[2];
                string fpx_buyerEmail      = splitInfo[3];
                string fpx_buyerIban       = splitInfo[4];
                string fpx_buyerId         = splitInfo[5];
                string fpx_buyerName       = splitInfo[6];
                string fpx_makerName       = splitInfo[7];
                string fpx_msgToken        = splitInfo[8];
                string fpx_msgType         = splitInfo[9];
                string fpx_productDesc     = splitInfo[10];
                string fpx_sellerBankCode  = splitInfo[11];
                string fpx_sellerExId      = splitInfo[12];
                string fpx_sellerExOrderNo = splitInfo[13];
                string fpx_sellerId        = splitInfo[14];
                string fpx_sellerOrderNo   = splitInfo[15];
                string fpx_sellerTxnTime   = splitInfo[16];
                string fpx_txnAmount       = splitInfo[17];
                string fpx_txnCurrency     = splitInfo[18];
                string fpx_version         = splitInfo[19].Contains("&") ? splitInfo[19].Split('&')[0] : splitInfo[19];
                string fpx_checkSum        = Payment.Repo.RSASign.RSASignValue(refInfo, path);

                posting_data += "fpx_msgType1=AE&fpx_msgType=AE&" + "fpx_msgToken=" + fpx_msgToken + "&" + "fpx_sellerExId=" + fpx_sellerExId + "&";
                posting_data += "fpx_sellerExOrderNo=" + fpx_sellerExOrderNo + "&" + "fpx_sellerTxnTime=" + fpx_sellerTxnTime + "&";
                posting_data += "fpx_sellerOrderNo=" + fpx_sellerOrderNo + "&" + "fpx_sellerBankCode=" + fpx_sellerBankCode + "&";
                posting_data += "fpx_txnCurrency=" + fpx_txnCurrency + "&" + "fpx_txnAmount=" + fpx_txnAmount + "&";
                posting_data += "fpx_buyerEmail=" + fpx_buyerEmail + "&" + "fpx_checkSum=" + fpx_checkSum + "&";
                posting_data += "fpx_buyerName=" + fpx_buyerName + "&" + "fpx_buyerBankId=" + fpx_buyerBankId + "&";
                posting_data += "fpx_buyerBankBranch=" + fpx_buyerBankBranch + "&" + "fpx_buyerAccNo=" + fpx_buyerAccNo + "&";
                posting_data += "fpx_buyerId=" + fpx_buyerId + "&" + "fpx_makerName=" + fpx_makerName + "&";
                posting_data += "fpx_buyerIban=" + fpx_buyerIban + "&" + "fpx_productDesc=" + fpx_productDesc + "&";
                posting_data += "fpx_version=" + fpx_version + "&" + "fpx_sellerId=" + fpx_sellerId + "&";
                posting_data += "checkSum_String=" + fpx_checkSum;

                byte[] _byteVersion = Encoding.ASCII.GetBytes(string.Concat("content=", posting_data));

                var sunSystem = new Payment.Repo.SUNSystemConnection();
                result.CheckSum = sunSystem.POSTWebRequest(url, posting_data, _byteVersion);
                if (string.IsNullOrEmpty(result.CheckSum))
                {
                    result.Message       = "No return from FPX";
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                if (result.CheckSum.ToUpper().Contains("ERROR"))
                {
                    result.Message       = result.CheckSum;
                    result.DebitAuthCode = "99";
                    return(new AjaxResponse(new ErrorInfo(result.DebitAuthCode, result.Message)));
                }

                var clearView = result.CheckSum.Replace("&", "&" + System.Environment.NewLine);

                qscoll = HttpUtility.ParseQueryString(result.CheckSum);
                if (qscoll != null)
                {
                    fpx_debitAuthCode = qscoll["fpx_debitAuthCode"];
                }

                if (!string.IsNullOrEmpty(fpx_debitAuthCode))
                {
                    result.DebitAuthCode = fpx_debitAuthCode;

                    var codemasterLogic = new Core.General.Repo.CODEMASTER(_env, _connectionString);
                    var listCodemaster  = codemasterLogic.RetrieveAll(x => x.CodeType == "FPX");
                    if (listCodemaster != null && listCodemaster.Count() > 0)
                    {
                        result.Message = listCodemaster.Where(x => x.Code == result.DebitAuthCode).Select(y => y.CodeDesc).FirstOrDefault();
                    }
                }
                return(new AjaxResponse(result));
            }
            catch (Exception ex)
            {
                //result.Message = ex.Message.ToString();
                //result.DebitAuthCode = "99";
                //result.CheckSum = string.Empty;
                //Log.Error(nameof(AccountingController), ex);
                //return new AjaxResponse(result);
                throw ex;
            }
        }