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; } }
/// <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; } }
/// <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; } }
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) { } }
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 = "خطا در ثبت اطلاعات" }); }