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

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

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

شنبه, 28 دی 1398 23:46

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

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

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

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

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

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

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

token

SignData

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

یکشنبه, 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));

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

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

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

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

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

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

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

دوشنبه, 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;
                }

ﺳﻪ شنبه, 01 بهمن 1398 09:26

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

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

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

ارسال پاسخ برای این تاپیک