مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

logout شدن کاربر پس ازبرگشت از درگاه بانک

  • شنبه 28 دی 1398
  • 23:46
تشکر میکنم

سلام خسته نباشید 
کاربر لاگین میکنه سپس خرید و بعد به درگاه بانک هدایت میشه و بعد از پرداخت خود ، درگاه کاربر رو هدایت می کنه به اون کنترلری که من بهش گفتم مثلا فلان آدرس 
ولی وقتی از صفحه بانک بر میگرده دوباره داخل سایت ، کاربر logout شده ، 
چه طور میتونم کاربر رو لاگین نگه دارم ؟
از سداد استفاده می کنم 

پاسخ های این پرسش

تعداد پاسخ ها : 5 پاسخ
کاربر سایت

mohammadd

عضویت از 1395/12/08

  • یکشنبه 29 دی 1398
  • 13:50

کاربر لاگین نمیشه که بخواد لاگ اوت بشه

همون سداد بهت به مقداری برمرگردونه تو باید اون مقدار رو قبل تو بانکت یا تو سشنی چیزی نگه داری و مجدد مقایسه کنی و ازش بپرسی همچین چیزی رو داره

یه CallApi باید داشته باشی برای رفتن به سداد و وقتی برمیگردی

رو اون باید کار کنی

token

SignData

تو باید وقتی ارسالش میکنی به بانک Token رو نگه داری و تو برگشت Token رو به همراه Sindata بهش بدی بهت نتیجه برگردونه

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • یکشنبه 29 دی 1398
  • 15:11

منظورتون رو متوجه نشدم
کاربر در سایت لاگین میشه و بعد از انتخاب محصول و ... میره سبد خرید اونجا هم به درگاه بانک ارسال میشه ولی وقتی برمیگرده تو سایت دیگه لاگین نیست 

دفعه اول که بانک میره که token نداره signdata رو داره ، چه تغییراتی باید بدم signdata  رو ؟

      var dataBytes = Encoding.UTF8.GetBytes(string.Format("{0};{1};{2}", request.TerminalId, request.OrderId, request.Amount));

                var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(request.MerchantKey), new byte[8]);

                request.SignData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

کاربر سایت

mohammadd

عضویت از 1395/12/08

  • دوشنبه 30 دی 1398
  • 09:07

خب شما مشکلت اینه تو زمان ارسال یا برگشت داری موجودیت کاربر لاگین شدت رو پاک میکنی ربطی به سداد نداره

شما چک کن زمانی که داری callapi میکنی و میفرستی موجودیت کاربرت رو پاک میکنی یا نه

تو برگشت هم چک کن شاید چیزی گذاشتی که داره logout میکنه

چون به جز بسته شدن مرورگر در هیچ صورت دیگری کاربر logout نمیشه مگر خودت بگی

شما زحمت بکش چک کن ببین وقتی لاگین هستی تو همون تب یه سایت دیگرو باز میکنی بر میگردی بازم لاگینی؟ لاگین کن - تو همون تب یه سایت باز کن - مجدد آدرس سایت خودت رو بزن

اگر لاگین نبودی مشکل از جای دیگست نه سداد

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • دوشنبه 30 دی 1398
  • 11:45

نیست اصلا پیدا نکردم اینا دوتا api هایی که صدا می زنم 

   public async Task<PayResultData> CallPayApi(string apiUrl, object value)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            using (var client = new HttpClient())
            {

                client.BaseAddress = new Uri("https://sadad.shaparak.ir/");
                client.DefaultRequestHeaders.Accept.Clear();

                StringContent content = new StringContent(JsonConvert.SerializeObject(value), Encoding.UTF8, "application/json");
                var response = await client.PostAsync(apiUrl, content);
                string apiResponse = await response.Content.ReadAsStringAsync();
                var result = JsonConvert.DeserializeObject<PayResultData>(apiResponse);
                
                return result;
            }
        }
        public async Task<VerifyResultData> CallVerifyApi(string apiUrl, object value)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            using (var client = new HttpClient())
            {

                client.BaseAddress = new Uri("https://sadad.shaparak.ir/");
                client.DefaultRequestHeaders.Accept.Clear();

                StringContent content = new StringContent(JsonConvert.SerializeObject(value), Encoding.UTF8, "application/json");
                var response = await client.PostAsync(apiUrl, content);
                string apiResponse = await response.Content.ReadAsStringAsync();
                var result = JsonConvert.DeserializeObject<VerifyResultData>(apiResponse);

                return result;
            }
        }

 اینم متدی هست که برا دفعه اول میره بانک , api رو صدا میزنه 

   request.OrderId = new Random().Next(1000, int.MaxValue).ToString();
                var dataBytes = Encoding.UTF8.GetBytes(string.Format("{0};{1};{2}", request.TerminalId, request.OrderId, request.Amount));

                var symmetric = SymmetricAlgorithm.Create("TripleDes");
                symmetric.Mode = CipherMode.ECB;
                symmetric.Padding = PaddingMode.PKCS7;

                var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String(request.MerchantKey), new byte[8]);

                request.SignData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length));

                if (HttpContext.Request.Host != null)
                    request.ReturnUrl = string.Format("{0}://{1}{2}/factor-checkout",Request.Scheme, Request.Host, Url.Content("~"));

                var ipgUri = string.Format("https://sadad.shaparak.ir/api/v0/Request/PaymentRequest");

                CookieOptions option = new CookieOptions(); option.Expires = DateTime.Now.AddHours(1);
                Response.Cookies.Append("bank_data", JsonConvert.SerializeObject(request), option);
                _purchaseResult2 = request;


                var data = new
                {
                    request.TerminalId,
                    request.MerchantId,
                    request.Amount,
                    request.SignData,
                    request.ReturnUrl,
                    LocalDateTime = DateTime.Now,
                    request.OrderId,
            
                };

                var res = await CallPayApi(ipgUri, data);

                if (res != null && res != null)
                {
                  ";
                    if (res.ResCode == "0")
                    {
                       ));
                        return new BankResultViewModel { PurchasePage = request.PurchasePage, Token = res.Token };
                    }
                    ViewBag.Message = res.Description;
                }

کاربر سایت

mohammadd

عضویت از 1395/12/08

  • سه شنبه 1 بهمن 1398
  • 09:26

اولا سداد این متد رو دیگه ساپورت نمیکنه SecurityProtocolType.Tls

باید SecurityProtocolType.Tls1.1  | SecurityProtocolType.Tls1.2  استفاده کنی

بعدشم تو این مشکلی نیست گفتم اگر کاربرت لاگین هستش و تو حساب کاربریشه و میره میاد میندازه بیرون ربطی به پرداختت نداره شما داری کاربر رو sinout میکنی کجا؟ معلوم نیست break poit بزار ببین قبل از اینکه redirect میکنی کاربرت هنوز سشن یا هرچیز دیگه که داری برای لاگین ثابت باقی مونده یا نه؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)