Closed mohammadhosseinzavvar closed 3 years ago
درود
برای پیدا کردن مشکل ابتدا باید دید در کدوم مرحله بانکی این خطا داده شده آیا سمت سامانه بانک، به جز تراکنش موفق، تایید تراکنش از سمت شما رو هم ثبت کرده؟ یا فقط تایید پرداخت کاربر رو ثبت کرده؟
تایید تراکنش هم ثبت شده در سامانه ای که بانک برای گزارشگیری در اختیار ما قرار داده نوشته نتیجه تراکنش موفق تراکنش در سمت بانک موفق انجام میشه و مبلغ از حساب کسر و به حساب مقصد واریز میشه، احتمال زیاد در دیتای برگشتی از سمت بانک و کانورت به مدل شما تناقض وجود دارد
آیا اطلاع دارید که سیستمشون رو اخیرا شاید تغییری داده باشن؟ اگر از این درگاه مستندات اتصال دارید لطف کنید همینجا آپلود کنید تا بررسی کنیم
اگر نیاز به اطلاعات درگاه هم هست بفرمایید ایمیل براتون بفرستم
کد هدایت به سمت درگاه پرداخت var result = await _OnlinePayment.RequestAsync(invoice => { var VerifyUrl = Url.Action("Verify", "Default", null, Request.Scheme); invoice .SetAmount(Course.Fee - Course.Discount) .SetCallbackUrl(VerifyUrl) .SetGateway("IranKish");
invoice.UseAutoRandomTrackingNumber();
});
var TrackingNumber = result.TrackingNumber;
var Payment = await _ApplicationDbContext.TblPayment
.Where(P => P.Tracking_Number == TrackingNumber)
.FirstOrDefaultAsync();
if (Payment != null)
{
Payment.UserCourseID = UserInCourse.UserCourseID;
_ApplicationDbContext.TblPayment.Update(Payment);
await _ApplicationDbContext.SaveChangesAsync();
}
if (result.IsSucceed)
{
// کاربر را به درگاه بانکی هدایت میکند
return result.GatewayTransporter.TransportToGateway();
}
else
{
Alert(Message: "اتصال به درگاه بانک انجام نشد!", NotificationType: EnumNotificationType.error);
return RedirectToAction(nameof(CourseDetails));
}
کد اکشن بازگشت از درگاه پرداخت var invoice = await _OnlinePayment.FetchAsync(); // Check if the invoice is new or it's already processed before. if (invoice.Status == PaymentFetchResultStatus.AlreadyProcessed) { Alert(Message: "تراکنش قبلا پردازش شده است", NotificationType: EnumNotificationType.error); return View(); }
var verifyResult = await _OnlinePayment.VerifyAsync(invoice);
if (verifyResult.IsSucceed)
{
Alert(Message: $"پرداخت با موفقیت انجام شد شماره تراکنش {verifyResult.TransactionCode}", NotificationType: EnumNotificationType.success);
}
else
{
Alert(Message: verifyResult.Message, NotificationType: EnumNotificationType.error);
}
return View();
اگر نیاز به اطلاعات درگاه هم هست بفرمایید ایمیل براتون بفرستم
متاسفانه فایده ای نداره چون در حال فقط با آی پی که شما در هنگام عقد قرارداد معرفی میکنید کار میکنه و هیچکس دیگه ای نمیتونه درخواستی ارسال کنه
من مستنداتی که فرستادید رو بررسی میکنم بهتون اطلاع میدم امروز
تنظیمات فایل Startup.cs
services.AddParbad() .ConfigureGateways(gateways => { gateways .AddIranKish() .WithAccounts(accounts => { accounts.AddInMemory(account => { account.Name = "***"; account.MerchantId = "***"; }); }); gateways .AddParbadVirtual() .WithOptions(options => options.GatewayPath = "/MyVirtualGateway"); }) .ConfigureHttpContext(builder => builder.UseDefaultAspNetCore()) .ConfigureStorage(builder => { builder.UseEfCore(options => { // Using SQL Server var assemblyName = typeof(Startup).Assembly.GetName().Name; options.ConfigureDbContext = db => db.UseSqlServer(Configuration.GetConnectionString("ConnServer"), sql => sql.MigrationsAssembly(assemblyName)); options.PaymentTableOptions.Name = "TblPayment"; options.DefaultSchema = "dbo"; options.TransactionTableOptions.Name = "TblTransaction"; options.TransactionTableOptions.Schema = "dbo"; }); });
این احتمال هست که شاید در چک کردن یک پارامتر در هنگام تایید تراکنش، مشکلی وجود داشته باشه متاسفانه بدون انجام تست واقعی و به صورت حدس و گمان، نمیشه از عملکرد یک سرویس اطمینان حاصل کرد.
هر چند که میدونم امکان پذیر نیست که با آی پی دیگری درخواست ارسال بشه، اما امتحانش ضرری نداره در صورت تمایل، لطف کنید اطلاعات درگاه رو به آدرس زیر ارسال کنید تا ببینیم میشه تست کرد یا خیر. parbad@outlook.com
فکر کنم فراموش کردید اطلاعات رو کامل ارسال کنید MerchantId ارسال نشده
عذر میخوام ارسال شده. پایین ایمیل بود نگاه نکردم. فقط لطف کنید بگید کدوم از اینها دقیقا MerchantId هست
کد پذیرنده؟ شماره پذیرنده؟ کد پایانه؟
خوشبختانه میشه درخواست ارسال کرد، بر خلاف سایر درگاهها که فقط با آی پی مشخصی کار میکنن فقط مساله اینجاست که پرداخت باید به یک طریقی انجام بشه تا بشه تست کرد با مثال تستی خودشون امتحان کردم به من خطای زیر رو میده:
"مشتری گرامی دسترسی شما به این صفحه غیر مجاز می باشد"
آیا کارت عابر بانکه تست یا اکانت تست به شما دادن؟
سلام بله آی پی مشکل نداره میشه تست کرد اکانت تست ندادن، فردا پیگیر میشم ببینم امکان دریافت اکانت تست هست
On Tue, 20 Oct 2020, 21:27 Sina Soltani, notifications@github.com wrote:
خوشبختانه میشه درخواست ارسال کرد، بر خلاف سایر درگاهها که فقط با آی پی مشخصی کار میکنن فقط مساله اینجاست که پرداخت باید به یک طریقی انجام بشه تا بشه تست کرد آیا کارت عابر بانکه تست یا اکانت تست به شما دادن؟
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/Sina-Soltani/Parbad/issues/124#issuecomment-713036829, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMFWYCUPHV52DKGXVB2GF6DSLXFSLANCNFSM4SXXV5TQ .
لطفا نسخه جدید رو نصب و امتحان کنید ببینید کار میکنه یا خیر
Install-Package Parbad -Version 3.5.3-beta1
همچنین در تنظیمات این درگاه، پراپرتی Sha1Key رو با توجه به کلیدی که بانک بهتون داده مقدار دهی کنید
نسخه جدید و نصب کردم و کلید امنیتی هم تنظیم کردم ولی بازم بعد از پرداخت همین خطا و میده
در جدول تراکنش ها که توسط پرباد در دیتابیس خودم ایجاد شده برای پرداخت من 2 رکورد تراکنش ثبت شده اولی با فیلد Is_Success = true AND Type = 0 رکورد دومی Is_Success = false AND Type = 1
یک نسخه جدید دیگه منتشر شد. لطفا امتحانش کنید و ببینید بعد از وریفای، در پراپرتی پیام چه چیزی نوشته شده تا مکان دقیق خطا مشخص بشه
Install-Package Parbad -Version 3.5.3-beta2
نسخه جدید و نصب کردم در دیتابیس جدول تراکنش این خطا ثبت میشه Invalid data is received from the gateway Result: در سمت بانک تراکنش تایید شده
public async Task
var verifyResult = await _OnlinePayment.VerifyAsync(invoice);
if (verifyResult.IsSucceed)
{
Alert(Message: $"پرداخت با موفقیت انجام شد شماره تراکنش {verifyResult.TransactionCode}", NotificationType: EnumNotificationType.success);
}
else
{
Alert(Message: verifyResult.Message, NotificationType: EnumNotificationType.error);
}
return View();
}
}
بسیار عالی. پس مکان خطا دقیقا مشخص شد. پس از رفع مشکل نسخه جدید رو منتشر میکنم
لطفا نسخه آخر رو تست کنید
خطا باید رفع شده باشه
Install-Package Parbad -Version 3.5.3-beta3
بعد از پرداخت و انجام تراکنش این پیغام و میده در متد Verify No invoice found with the token 251374e5bfdb49679de288cd35af668d در سمت بانک تراکنش موفق ثبت شده ولی در دیتابیس من هیچ رکوردی ثبت نشده احتمالا نتونسته فاکتور و پیدا کنه
این کاملا یک چیزه دیگه ای هست که فقط هم موقع استفاده از متد Fetch میتونه اتفاق بیوفته که معنیش همونطور که گفتین یعنی با چنین توکنی، هیچ رکورد پرداختی پیدا نکرده در داخل دیتابیس شما پیشنهاد میکنم یا یکباره دیگه یک سفارش جدید رو انجام بدید یا اینکه ببینید مشکل پایگاه داده چیه برای مثال زمانیکه به درگاه بانک هدایت شدید، قبل از پرداخت کردن، برید دیتابیس رو چک کنید آیا رکورد جدیدی ثبت شد یا نه و اگه ثبت شده چه توکنی داره
الان یک درخواست انجام دادم و درست شده در جدول payment فیلد Is_Paid اگر true باشه یعنی کاربر این فاکتور و پرداخت موفق داشته ؟
این پرداخت من موفق بوده جدول payment هم تراکنش و موفق زده ولی در جدول تراکنش ها فیلد پیام اینه داخلش An unknown error is happened. ولی داخل خود آپ پیغام پرداخت موفق داد خطایی پیش نیومد
الان یک درخواست انجام دادم و درست شده در جدول payment فیلد Is_Paid اگر true باشه یعنی کاربر این فاکتور و پرداخت موفق داشته ؟
بله یعنی همه چیز با موفقیت انجام شده.
این پرداخت من موفق بوده جدول payment هم تراکنش و موفق زده ولی در جدول تراکنش ها فیلد پیام اینه داخلش An unknown error is happened. ولی داخل خود آپ پیغام پرداخت موفق داد خطایی پیش نیومد
جدول تراکنش ها و رکورد مربوط به این پرداخت رو کنید ببینید چک کنید ببینید آیا فیلد IsSucceed صحیح هست یا غلط. این احتمال وجود داره که شاید عملیات کاملا با موفقیت انجام گرفته اما فقط متن پیامی که نوشته شده صحیح نیست. در این صورت این مشکل احتمالا بر میگرده به ترجمه کد بانک به متن خوانا که خب میشه رفعش کرد راحت لطفا تست کنید اطلاع بدید.
در سمت بانک تراکنش موفق بوده در هر دو جدول پایمنت و تراکنش هم فیلد Is_Success = true هست چیزی که مشخصه ک عملیات با موفقیت بوده ولی فقط متن پیغام ذخیره میشه و تراکنش به هیچ وجه Faild نشده چه در سمت بانک چه در سمت آپ من
این خطا فکر میکنم در دستور Switch شما برای چک کردن خطای بانک در قسمت دیفالت گذاشتین
در سمت بانک تراکنش موفق بوده در هر دو جدول پایمنت و تراکنش هم فیلد Is_Success = true هست چیزی که مشخصه ک عملیات با موفقیت بوده ولی فقط متن پیغام ذخیره میشه و تراکنش به هیچ وجه Faild نشده چه در سمت بانک چه در سمت آپ من
پس این فقط ایراد در ترجمه کد بانکی به متن هست که چیز خاصی نیست. شما در هر صورت میتونید الان از پکیج استفاده کنید. مشکل پیام رو امروز درست میکنم و نسخه جدید رو منتشر میکنم
سپاس بابت همراهی و همکاری مشکل الحمدالله حل شد.
Bug description (wIthout specifiing the sensitive data) توضیح خطا (بدون ذکر کردن اطلاعات خصوصی درگاه بانکی) با سلام من از این کتابخانه جهت اتصال به درگاه پرداخت ایران کیش استفاده میکنم، و مراحل و مطابق مستندات انجام دادم بعد از اتصال به درگاه و ورود اطلاعات کارت بانکی در خود سامانه پیام پرداخت با موفق انجام شد نمایش داده میشه ولی بعد از بازگشت به سایت من جهت نمایش خروجی به کاربر، خطای زیر و میده Invalid data is received from the gateway البته در سمت سامانه رصد تراکنش های بانک، این تراکنش موفق و تایید شده بوده
Package name and version نام و نسخه پکیج
Web application type: نوع برنامه وب