Closed idotnetdev closed 1 year ago
درود تنظیمات پَرباد رو اینجا قرار بدید تا بررسی کنیم.
ممنون
`
public class ParbadConfiguration
{
public static IParbadBuilder Configure()
{
return ParbadBuilder.CreateDefaultBuilder()
.ConfigureGateways(gateways =>
{
gateways.AddMellat()
.WithAccounts(accounts =>
{
accounts.Add
gateways.AddIranKish()
.WithAccounts(accounts =>
{
accounts.Add<IranKishAccountSource>(ServiceLifetime.Transient);
});
gateways.AddAsanPardakht()
.WithAccounts(accounts =>
{
accounts.Add<AsanPardakhtAccount>(ServiceLifetime.Transient);
});
})
.ConfigureHttpContext(builder => builder.UseOwinFromCurrentHttpContext())
.ConfigureStorage(builder => builder.UseMemoryCache());
}
}`
این هم کانفیگ درگاه ایران کیش
public class IranKishAccountSource : IGatewayAccountSource<IranKishGatewayAccount> { public async Task AddAccountsAsync(IGatewayAccountCollection<IranKishGatewayAccount> accounts) { var gateway = EngineContext.Current.Resolve<IGatewaysService>(); var account = gateway.GetGateway(HighStore.Core.Domain.Payments.Gateway.IranKish); if (account != null) { accounts.Add(new IranKishGatewayAccount() { Name = "IranKish", AcceptorId = account.Username, PassPhrase = account.Password, TerminalId = account.Terminal, PublicKey = account.MerchenatCode }); } } }
واسه اینکه کدها رو به هم ریخته نشون میداد تصویرشون رو هم آپلود کردم چیز دیگه ای مورد نیاز هست؟
تنظیمات ظاهرا درست هست. تنها مشکلی که میتونم در پروژه شما تصور کنم اینه که Owin در پروژه شما به درستی کار نمیکنه یا تنظیم نشده.
اگر نمونه پروژه mvc رو دانلود و اجرا کنید. می بینید که درخواست پرداخت به درگاه مجازی و نتیجه وریفای همگی به درستی کار میکنند.
آخه سایت های ما هم دارن از زرین پال و ملت هم استفاده میکنن ولی مشکلی ندارن. نمیدونم چرا توی ایران کیش و آسان پرداخت مشکل داره. راستی ورژن پکیج های Owin استفاده شده در پرباد 4.0.1 هست ولی ورژنی که من توی پروژه م استفاده کردم 4.2.0 هست. به نظرتون ممکن هست از این باشه؟ نمیشه هم بیارم ورژنش رو پایین چون ورژن 4.0.1 دو تا مورد امنیتی با ریسک بالا داره
متوجه مشکل شدم!
من از متد _onlinePayment.Fetch() استفاده کرده بودم. این یه Extension Method هست که داره در نهایت این کد زیر رو اجرا میکنه
onlinePayment.FetchAsync().GetAwaiter().GetResult()
به این شکل استفاده کردن از GetAwaiter().GetResult() تقریبا در تمام موارد باعث به وجود اومدن Dead Lock میشه که اصلا توصیه نمیشه از این روش استفاده بشه. در نهایت با تغییرش به متد FetchAsync مشکلم رو پیدا کردم و حل شد.
ممنون
سلام من هم دقیقا همین مشکل رو دارم از وقتی که از پرباد استفاده کردم توی پروژه ، همیش موقع برگشت از بانک گیر میکنه و میمونه، من اتفاقا برای درگاه زرین پال این مشکل رو دارم . هم اینکه از await _onlinePayment.FetchAsync(); استفاده کردم. مشکل کجاست؟ چکار باید کرد؟ اینجوری مشجبور میشم پرباد رو حذف کنم ، قبلش این مشکل رو نداشتم
سلام سعی کنید پکیج های Owin پروژه تون با پکیج های پرباد یکی باشه و اینکه Example ها رو اجرا کنید ببینید که اونجا هم مشکل دارید یا نه؟ و اینکه پروژه شما asp.net mvc هست یا asp.net core؟
من asp.net core هست
مشکل اینه که زرین پال درگاه تستش رو بر داشته
و اینکه بعضی مواقع این مشکل پیش میاد ولی کم نیست پکیج Owin ندارم توی پروژم
و اینکه بعضی مواقع این مشکل پیش میاد ولی کم نیست پکیج Owin ندارم توی پروژم
درود نمونه پروژه asp.net core رو دانلود و اجرا کنید. یک درخواست پرداخت برای درگاه مجازی ایجاد کنید. اگر همه چیز کار میکنه، بنابراین مشکل از تنظیمات پروژه شماست. اینکه این مشکل کجا میتونه باشه، نمیشه به همین راحتی گفت، چون پروژه توسط من قابل تست نیست.
منم نمیتونم مشکل رو پیدا کنم چون بعضی مواقع اتفاق میافته نمیدونم چه شرایطی پیش میاد که این مشکل به وجود میاد روی سیستم تست میکنم مشکلی نداره اینجوری اینکه حالا چندین کاربر باهاش کار میکنن توی شرایط اونا بعضا مشکلی پیش میاد
بعید میدونم بشه گفت که «بعضی مواقع اتفاق میوفته» چون یک عملیات ثابت و تکراری هست که داره انجام میشه و در نهایت، یا باید کار کنه یا نکنه. به خصوص اگر فقط یک درگاه دارید که دیگه کاملا عملیات ثابت و تکراری به حساب میاد و جای هیچگونه سورپرایزی باقی نمی مونه.
کدهای تنظیمات رو اینجا قرار بدید برای اطمینان تا بررسی کنم.
مشکل برطرف شد از کد خودم بود ممنون
سلام وقت بخیر یه مشکلی با درگاه های ایران کیش و آسان پرداخت و سپهر اینا دارم به طور کلی اونم اینکه بعد از پرداخت تو عملیات Fetch گیر میکنه و دیگه از سایت درگاه برنمیگرده و ساعت ها میمونه توی همون صفحه تایید پرداخت بانک. خودم که دیباگ کردم متوجه شدم که وقتی میخواد Fetch کنه میخواد اطلاعات فرمی که از طرف بانک میاد رو بگیره مثلا توکن و شماره کارت پرداخت کننده و ... رو توی فراخوانی این متد گیر داره و دیگه هیچ جوره رد نمیشه.
var token = await httpRequest.TryGetParamAsync("Token", cancellationToken).ConfigureAwaitFalse();
وارد متد TryGetParamAsync هم که میشم توی این خط گیر داره
var form = await httpRequest.ReadFormAsync(cancellationToken).ConfigureAwaitFalse();
اینم عرض کنم که پروژه من ASP.NET MVC با دات نت فریمورک 4.7.2 استفاده میکنم.
یه نکته ای رو هم بگم خودم، اینکه توی asp.net mvc کلاس HttpContextAccessor وجود نداره و توی دات نت استاندارد و dot net core وجود دارن. وقتی چک میکردم از بانک که برمیگرده تو خود HttpContext.Current.Request.Form اطلاعاتی که بانک ارسال میکنه توش وجود داره. راهی رو هم نتونستم پیدا کنم که بتونم به جای HttpContextAccessor از خود HttpContext.Current استفاده کنم.
Package Name: Parbad
Version: 3.9
ASP.NET MVC