예제 #1
0
        public string Request(ref string result)
        {
            try
            {
                int    resultResCode = -1;
                string resultRefID   = string.Empty;
                string response      = behPardakhtWebService.bpPayRequest(TerminalID, UserName, Password, OrderID, Amount, LocalDate, LocalTime, AdditionalData, CallBackUrl, PayerID);

                if (response.IndexOf(',') != -1)
                {
                    resultResCode = Helper.GetInt(response.Split(',')[0]);
                    resultRefID   = Helper.GetString(response.Split(',')[1]);
                }
                else
                {
                    resultResCode = Helper.GetInt(response);
                }

                foreach (ResCode resCode in Enum.GetValues(typeof(ResCode)))
                {
                    if (resultResCode == (int)resCode && resCode != ResCode.TransactionWasSuccessful)
                    {
                        throw new Exception(Language.GetString(resCode.ToString()));
                    }
                }

                return(resultRefID);
            }
            catch (Exception ex)
            {
                //throw new Exception(Language.GetString("DontRecieveResponseFromBank"));
                throw ex;
            }
        }
예제 #2
0
        /// <summary>
        /// استارت ارتباط با یانک
        /// </summary>
        /// <param name="amount"></param>
        /// <param name="payDate"></param>
        /// <param name="time"></param>
        /// <param name="additionalInfo"></param>
        /// <param name="payerId"></param>
        /// <returns>اگر اکی باشد، خروجی RefCode خواهد بود
        /// وگرنه خروجی Null خواهد بود که نشان دهنده رخ دادن خطا است</returns>
        public KeyValuePair <string, string> bpPayRequest(long amount, DateTime payDate, TimeSpan time, string additionalInfo, long payId, string userIP, int?payType)
        {
            long payerId = 0;//این باید طبق قوانین به پرداخت صفر باشد!

            payId = 0;
            KeyValuePair <string, string> result;

            try
            {
                //گرفتن رکورد پرداخت قبل از تایید پرداخت
                //PaysClass payClass = new PaysClass();
                // payId = payClass.Add(amount, payerId, DateTime.Now, additionalInfo, behpardakhtSystem.SystemId, userIP,payType:payType);

                PaymentGatewayImplService bpService = new PaymentGatewayImplService();
                //ارسال درخواست اتصال به بانک
                var response = bpService.bpPayRequest(OtherId,
                                                      behpardakht_username,
                                                      behpardakht_password,
                                                      payId,
                                                      amount,
                                                      payDate.Year.ToString() + payDate.Month.ToString().PadLeft(2, '0') + payDate.Day.ToString().PadLeft(2, '0'),
                                                      payDate.Hour.ToString().PadLeft(2, '0') + payDate.Minute.ToString().PadLeft(2, '0') + payDate.Second.ToString().PadLeft(2, '0'),
                                                      additionalInfo,
                                                      callbackurl,
                                                      payerId);

                String[] resultArray = response.Split(',');
                if (resultArray[0] == "0")
                {
                    result = new KeyValuePair <string, string>(resultArray[0], resultArray[1]);
                    RunPostScript(resultArray[1]);
                    return(result);
                }
                else if (string.IsNullOrEmpty(response))
                {
                    return(errorCode3);
                }
                else
                {
                    result = new KeyValuePair <string, string>(resultArray[0], ResCodeFarsi(resultArray[0]));
                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #3
0
        /// <summary>
        /// Post process payment (used by payment gateways that require redirecting to a third-party URL)
        /// </summary>
        /// <param name="postProcessPaymentRequest">Payment info required for an order processing</param>
        public void PostProcessPayment(PostProcessPaymentRequest postProcessPaymentRequest)
        {
            ir.shaparak.bpm.PaymentGatewayImplService bmService = new PaymentGatewayImplService();
            string strPhaseOneResult = "";
            string strRefNum         = "";
            string strStatCode       = "";

            // Get the ref num to get started
            //string strdata = _mellatBankPaymentSettings.TerminalId + "##" + _mellatBankPaymentSettings.Username + "##" + _mellatBankPaymentSettings.Password + "##" + Convert.ToInt64(postProcessPaymentRequest.Order.Id).ToString() + "##" + Convert.ToInt64(postProcessPaymentRequest.Order.OrderTotal).ToString() + "##" + DateTime.Now.ToString("yyyyMMdd") + "##" + DateTime.Now.ToString("HHmmss") + "##" + GetMellatBankCallBackUrl();
            strPhaseOneResult = bmService.bpPayRequest(_mellatBankPaymentSettings.TerminalId, _mellatBankPaymentSettings.Username, _mellatBankPaymentSettings.Password, Convert.ToInt64(postProcessPaymentRequest.Order.Id), Convert.ToInt64(postProcessPaymentRequest.Order.OrderTotal), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), "", GetMellatBankCallBackUrl(), 0);
            //_httpContext.Response.Redirect("http://asjhdgasjhdg.com/" + strPhaseOneResult + "-" + _mellatBankPaymentSettings.TerminalId + "-" + _mellatBankPaymentSettings.Username + "-" + _mellatBankPaymentSettings.Password + "-" + Convert.ToInt64(postProcessPaymentRequest.Order.Id) + "-" + Convert.ToInt64(postProcessPaymentRequest.Order.OrderTotal) + "-" + GetMellatBankCallBackUrl());

            if (strPhaseOneResult.Length > 0 && strPhaseOneResult.IndexOf(',') > 0)
            {
                string[] parts = strPhaseOneResult.Split(',');
                if (parts.Length == 2)
                {
                    if (Convert.ToInt32(parts[0]) == 0)
                    {
                        // its ok
                        strRefNum   = parts[1].ToString();
                        strStatCode = parts[0].ToString();
                    }

                    // after getting the number check for duplicate in db in case of fraud

                    var query = from or in _orderRepository.Table
                                where or.AuthorizationTransactionCode == strRefNum
                                select or;

                    if (query.Count() > 0)
                    {
                        // THIS REFNUM ALREADY EXISTS,   H A L T   O P E R A T I O N
                        postProcessPaymentRequest.Order.PaymentStatus = PaymentStatus.Pending;
                        return;
                    }
                    else
                    {
                        // NO PREVIOUS RECORD OF REFNUM, CLEAR TO PROCEED


                        var remotePostHelper = new RemotePost();
                        remotePostHelper.FormName = "form1";
                        remotePostHelper.Url      = GetMellatBankUrl();
                        remotePostHelper.Add("RefId", strRefNum);
                        remotePostHelper.Post();
                    }
                }
                else
                {
                    postProcessPaymentRequest.Order.PaymentStatus = PaymentStatus.Pending;
                    return;
                }
            }
            else
            {
                // no usable response from server
                postProcessPaymentRequest.Order.PaymentStatus = PaymentStatus.Pending;

                _logger.InsertLog(Core.Domain.Logging.LogLevel.Error, GetErrorDescription(Convert.ToInt32(strPhaseOneResult)), strPhaseOneResult);
                return;
            }
        }
예제 #4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        SetDefaultDateTime();
        BypassCertificateError();

        try
        {
            if (RequestUnpack())
            {
                if (transactionState.Equals("OK"))
                {
                    ///For Ignore SSL Error
                    ServicePointManager.ServerCertificateValidationCallback =
                        delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return(true); };
                    Response.Write("OK");

                    ///WebService Instance
                    var srv = new PaymentGatewayImplService();
                    srv.bpDynamicPayRequestAsync(1309976, "shfd", "shfd47", 123, 10000, dateNow, timeNow, "88,140000,108;74,12000,;", "http://shahdforoush.ir/", 123, 33333);

                    var result = srv.bpPayRequest(1309976, "shfd", "shfd47", 123, 10000, dateNow, timeNow, "88,140000,108;74,12000,;", "http://shahdforoush.ir/", 123);//Request.Form["RefNum"], Request.Form["MID"]);
                    //PaymentGatewayImplService bpService = new PaymentGatewayImplService();
                    //string result = bpService.bpReversalRequest(1309976, "shfd", "shfd47", 123, 10000, 321);//Int64.Parse(ReversalOrderIdTextBox.Text),Int64.Parse(ReversalSaleOrderIdTextBox.Text),Int64.Parse(ReversalSaleReferenceIdTextBox.Text));

                    Response.Write(result);

                    //if (Convert.ToInt32(result) > 0)
                    //{
                    //    isError = false;
                    //    succeedMsg = "بانک صحت رسيد ديجيتالي شما را تصديق نمود. فرايند خريد تکميل گشت";
                    //    Response.Write(succeedMsg);
                    //}

                    //else
                    //{
                    //    Response.Write(TransactionChecking(Convert.ToInt32(result)));
                    //}
                }
                else
                {
                    isError  = true;
                    errorMsg = "متاسفانه بانک خريد شما را تاييد نکرده است";

                    if (transactionState.Equals("Canceled By User") || transactionState.Equals(string.Empty))
                    {
                        // Transaction was canceled by user
                        isError  = true;
                        errorMsg = "تراكنش توسط خريدار كنسل شد";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Invalid Amount"))
                    {
                        // Amount of revers teransaction is more than teransaction
                        isError  = true;
                        errorMsg = "2";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Invalid Transaction"))
                    {
                        // Can not find teransaction
                        isError  = true;
                        errorMsg = "3";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Invalid Card Number"))
                    {
                        // Card number is wrong
                        isError  = true;
                        errorMsg = "4";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("No Such Issuer"))
                    {
                        // Issuer can not find
                        isError  = true;
                        errorMsg = "5";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Expired Card Pick Up"))
                    {
                        // The card is expired
                        isError  = true;
                        errorMsg = "6";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Allowable PIN Tries Exceeded Pick Up"))
                    {
                        // For third time user enter a wrong PIN so card become invalid
                        isError  = true;
                        errorMsg = "7";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Incorrect PIN"))
                    {
                        // Pin card is wrong
                        isError  = true;
                        errorMsg = "8";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Exceeds Withdrawal Amount Limit"))
                    {
                        // Exceeds withdrawal from amount limit
                        isError  = true;
                        errorMsg = "9";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Transaction Cannot Be Completed"))
                    {
                        // PIN and PAD are currect but Transaction Cannot Be Completed
                        isError  = true;
                        errorMsg = "10";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Response Received Too Late"))
                    {
                        // Timeout occur
                        isError  = true;
                        errorMsg = "11";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Suspected Fraud Pick Up"))
                    {
                        // User did not insert cvv2 & expiredate or they are wrong.
                        isError  = true;
                        errorMsg = "12";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("No Sufficient Funds"))
                    {
                        // there are not suficient funds in the account
                        isError  = true;
                        errorMsg = "13";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("Issuer Down Slm"))
                    {
                        // The bank server is down
                        isError  = true;
                        errorMsg = "14";
                        Response.Write(errorMsg);
                    }
                    else if (transactionState.Equals("TME Error"))
                    {
                        // unknown error occur
                        isError  = true;
                        errorMsg = "15";
                        Response.Write(errorMsg);
                    }
                }
            }
        }

        catch (Exception ex)
        {
        }
    }
예제 #5
0
        public PayRequestResultDTO AddPayment(PaymentDTO payment)
        {
            string log        = DateTime.Now + " * ";
            var    RequestKey = string.Empty;
            var    Result     = string.Empty;
            var    gateway    = string.Empty;
            var    payDate    = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0');
            var    payTime    = DateTime.Now.Hour.ToString().PadLeft(2, '0') + DateTime.Now.Minute.ToString().PadLeft(2, '0') + DateTime.Now.Second.ToString().PadLeft(2, '0');
            var    PayerId    = long.Parse(payment.stcode + payment.stcode.ToPayerId());

            log += "payerID=" + PayerId + " * ";
            Random random = new Random();
            long   orderid;

            do
            {
                orderid = random.Next(100, 100000000);
            } while (walletDAO.SelectPayment(new PaymentDTO {
                OrderId = orderid, BankId = payment.BankId
            }).Count() > 0);
            log += "orderid=" + orderid + " * ";

            if (payment.BankId == Convert.ToInt32(BanksEnum.MellatBank))
            {
                //read config
                gateway = ConfigurationManager.AppSettings["PgwSite"];
                var callback   = ConfigurationManager.AppSettings["Mellat_Wallet_CallBackURL"];
                var terminalId = Convert.ToInt64(ConfigurationManager.AppSettings["Mellat_TerminalId"]);
                var userName   = ConfigurationManager.AppSettings["Username"];
                var password   = ConfigurationManager.AppSettings["UserPassword"];

                //call web service
                PaymentGatewayImplService bpService = new PaymentGatewayImplService();
                var result = bpService.bpPayRequest(terminalId, userName, password, orderid, Convert.ToInt64(payment.Amount), payDate, payTime, payment.stcode, callback, PayerId);
                log += "result=" + result + " * ";
                var resultArray = result.Split(',');
                log   += "resultArray=" + resultArray + " * ";
                Result = resultArray[0];
                if (resultArray.Length > 1)
                {
                    RequestKey = resultArray[1];
                }
                log += "RequestKey=" + RequestKey + " * ";
            }



            payment.OrderId       = orderid;
            payment.CreateDate    = DateTime.Now;
            payment.PayType       = Convert.ToInt32(PayTypeEnum.OnlineTopUp);
            payment.RequestKey    = RequestKey;
            payment.Result        = -1;
            payment.RetrivalRefNo = RequestKey;
            payment.Status        = (int)PaymentStatusEnum.New;
            log += "resultTranslate= " + TranslateMellatError(Convert.ToInt32(Result)) + " * ";
            log += "GateWay= " + gateway + " * ";
            System.IO.File.AppendAllText(@"D:\web-folder\IAUEC\University\wallet\walletError.txt", "\r\n" + log);
            if (walletDAO.InsertPayment(payment) > 0)
            {
                return new PayRequestResultDTO {
                           GateWay = gateway, RefId = RequestKey, Result = TranslateMellatError(Convert.ToInt32(Result))
                }
            }
            ;
            log = "--72--";
            System.IO.File.AppendAllText(@"D:\web-folder\IAUEC\University\wallet\walletError.txt", "\r\n" + log);

            return(new PayRequestResultDTO {
                Result = "خطا در ثبت اطلاعات"
            });
        }