ورود

View Full Version : سوال: اشکال در اجرا شدن کد های بعد از تراکنش موفق



yayan85
جمعه 01 خرداد 1394, 00:33 صبح
سلام. بعد از انجام تراکنش زرین پال در سایت و بازگشت به صفحه سایت ، با اینکه تراکنش موفق انجام شده و شماره تراکنش رو هم کاربر میبینه ولی بعضی وقت ها کد های بعد که مربوط به درج اطلاعات تراکنش در جدول مربوطه هستند انجام نمیشه و قسمت catch (در روند ثبت اطلاعات مشکلی رخ داده است) اجرا میشه که همین باعث شارژ نشدن اتوماتیک حساب کاربر در سایت میشه. البته این اتفاق همیشه نمی افته. تقریبا از 150 کاربر شاید 20 تا این مشکل پیش میاد. برای همین هر چی خودم تست می کنم درسته .
کد ها:



protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["Status"] != "" && Request.QueryString["Status"] != null && Request.QueryString["Authority"] != "" && Request.QueryString["Authority"] != null)
{
if (Request.QueryString["Status"].ToString().Equals("OK"))
{
int Amount = 2000;
long RefID;
System.Net.ServicePointManager.Expect100Continue = false;
zarinpal.PaymentGatewayImplementationService zp = new zarinpal.PaymentGatewayImplementationService();

int Status = zp.PaymentVerification("**************************", Request.QueryString["Authority"].ToString(), Amount, out RefID);

if (Status == 100)
{


try
{
//Response.Write("Success!! RefId: " + RefID);
verifyPM.Text = "پرداخت شما با موفقیت انجام شد.شماره تراکنش :" + RefID;

/////ثبت تراکنش در جدول پرداخت ها و فعال سازی اکانت
DateTime persianDate = DateTime.Now;
var Engheza = (persianDate.AddDays(30));


_newTBLpricelist.pricecode = RefID.ToString();
_newTBLpricelist.userID = Int32.Parse(Session["ID"].ToString());
_newTBLpricelist.pricemablagh = Amount;
_newTBLpricelist.enghezaDate = Persia.Calendar.ConvertToPersian(Engheza).ToString ();
_newTBLpricelist.priceDate = Persia.Calendar.ConvertToPersian(persianDate).ToSt ring();

db.TBL_priceLists.InsertOnSubmit(_newTBLpricelist) ;
db.SubmitChanges();
userPM.Text = "مبلغ پرداخت شده در حساب شما ذخیره شد و حساب کاربری شما به مدت 30 روز فعال گردید";
lbl_engheza.Text = "تاریخ انقضا حساب کاربری شما" + " " + Persia.Calendar.ConvertToPersian(Engheza).ToString ();


}
catch
{
userPM.Text = "در روند ثبت اطلاعات مشکلی رخ داده است";
}

}
else
{
try
{
verifyPM.Text = ".خطا: پرداخت شما انجام نشد" + Status;
//Response.Write("Error!! Status: " + Status);
//ثبت در جدول لاگ خطا عدم ارسال
TBL_priceLog _newTBL = new TBL_priceLog();
_newTBL.userID = Int32.Parse(Session["ID"].ToString());
_newTBL.Tdarj = Persia.Calendar.ConvertToPersian(DateTime.Now).ToS tring();
_newTBL.logName = Status.ToString();

db.TBL_priceLogs.InsertOnSubmit(_newTBL);
db.SubmitChanges();
}
catch
{
verifyPM.Text = ".خطا: پرداخت شما انجام نشد" + Status;
}

}

}
else
{
verifyPM.Text = ("Error! Authority: " + Request.QueryString["Authority"].ToString() + " Status: " + Request.QueryString["Status"].ToString());
}
}
else
{
verifyPM.Text = ("خطا : ورودی نا مشخص");
}

yayan85
سه شنبه 05 خرداد 1394, 18:07 عصر
یعنی کسی چیزی به ذهنش نمیرسه؟؟؟؟؟

kamranetemadi
چهارشنبه 06 خرداد 1394, 00:08 صبح
باید اطلاعاتی که برای ثبت وارد میشه مشکلدار باشه

احتمال نمیدین سشن تمام شده باشه و ID خطا بده؟؟؟؟؟؟

yayan85
چهارشنبه 06 خرداد 1394, 01:57 صبح
سلام. احتمالش هست ، با اینکه تایم سشن رو زیاد کردم ، ولی باز هم ممکنه. چاره اش چی هست که امتحان کنم ببینم دلیلش این هست یا نه؟ برای صفحه verify در پیج لود چک null بودن سشن رو نذاشتم ، چون خیلی ضایع میشه کاربر بعد از واریز ، برگرده به صفحه ورود. هنگام ورود به صفحه پرداخت ، خالی بودن سشن بررسی میشه ، بعدش هم که مراحل زرین پال هست و بعد هم صفحه verify :متفکر:

yayan85
دوشنبه 22 تیر 1394, 20:27 عصر
بهترین راه برای ذخیره ID کاربر چی هست که بعد از اتمام تراککنش که بر می گرده به صفحه سایت ، اگه تایم سشن تموم شده بود از اونجا بخونه ID رو ؟؟؟؟؟

توی کوکی؟ (اگه دو تا کاربر از یک سیستم استفاده کنند مشکل در محتوای کوکی پیش نمیاد؟)
catche ???
کوئری استرینگ؟ ( آیا بعد از ارسال پارامتر های زرین پال در url دچار مشکل نمیشه؟؟؟)
چی کار کنم؟؟؟:گریه:

yayan85
دوشنبه 22 تیر 1394, 21:17 عصر
من از روش فایل global استفاده کردم.
در فایل لم
static string _importantData;
public static string ImportantData
{
get
{
return _importantData;
}
set
{
_importantData = value;
}

}
و در صفحه ورود کاربر:

string important1 = Global.ImportantData;
important1 = Session["ID"].ToString();
Global.ImportantData = important1;


ولی معایب و مزایای این روش رو نمی دونم. خوبه یا نه؟

korosh00
دوشنبه 22 تیر 1394, 22:12 عصر
شما یک جدول بساز و همه مشخصاتی که می خوای بساز و یک فیلد بنام مثلا Authority یا هر اسمی بساز .
در زرین پال موقع ارسال مقادیر به زرین پال یک Authority میده بشما و بعد مقادیر رو ارسال میکنه .
تو زرین پال به شما یک Authority میده اول همه مشخصات کاربر و Authority رو ثبت کن بعد که رفت پرداخت شد و برگشت بیا بگو هر جا اون Authority مقدارش مساوی بود مقدار برگشتی از زرین پال مثلا مقدار فیلد "پرداخت موفقش" رو ok بنویس . یعنی کاربر پرداختش موفق بوده .