Sina-Soltani / Parbad

A free, open-source, integrated and extensible library which connects your web applications to online payment gateways. Gateways can be added or developed by you.
GNU Lesser General Public License v3.0
371 stars 81 forks source link

پیاده سازی درگاه آسان پرداخت با REST #304

Open idotnetdev opened 2 years ago

idotnetdev commented 2 years ago

سلام و عرض ادب قبل از هر چیز، تشکر میکنم ازتون بخاطر پیاده سازی خوب و تمیز درگاه های بانکی کشور.

با توجه به اینکه درگاه آسان پرداخت به وسیله SOAP پیاده سازی شده، آیا امکان داره که درگاه رو با استفاده از وب سرویس های REST پیاده سازی کنید؟ ممنون

Sina-Soltani commented 2 years ago

درود خواهش میکنم.

با توجه به اینکه درگاه آسان پرداخت به وسیله SOAP پیاده سازی شده، آیا امکان داره که درگاه رو با استفاده از وب سرویس های REST پیاده سازی کنید؟ ممنون

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

idotnetdev commented 2 years ago

ممنون. خودم هم میتونم پیاده سازیشو انجام بدم.

Sina-Soltani commented 2 years ago

بسیار عالی. پس لطفا برنچ مستر رو استفاده کنید و pull request رو ارسال کنید تا بررسی و مرج بشه.

idotnetdev commented 2 years ago

سلام مجدد امروز میخواستم پیاده سازی رو شروع کنم متوجه شدم که انگار قبلا توسط آقای محمد افشاری تغییراتی برای REST آسان پرداخت انجام شده. ولی انگار مرج نشده با کدهای اصلی.

image

بررسی میکنید لطفا؟

idotnetdev commented 2 years ago

انگار قبلا با REST پیاده شده بوده که با تغییرات آقای افشاری (@mohammad-ashrafi2020 ) تبدیل به SOAP شده. واقعا دلیلش چی بوده؟ خیلی جالبه که downgrade شده!

mohammad-ashrafi2020 commented 2 years ago

سلام ، اشرافی هستم دلیلش این بود که توی Encrypt کردن اطلاعات مشکل وجود داشت و درگاه بهمون خطا میداد ( کتابخونه ای که باهاش این کار رو انجام میدادیم توی Dotnet Core کار نمیکنه و خوده آسان پرداخت هم توی Rest APi چیزی برای Encrype و Decrypt کردن اطلاعات قرار ندادن فقط توی Soap وجود داره

idotnetdev commented 2 years ago

ممنون از شما. بله چیزی برای Encrypt و Decrypt نداره چون توی REST اصلا ازش استفاده نمیشه و تنها چیزهایی که نیازه اینا هستن MerchantConfigurationId Usr => Username Pwd => Password بنده خودم با پشتیبانی آسان پرداخت هم صحبت کردم و گفتن که احتمال خیلی زیاد سرویس SOAP بزودی از کار خواهد افتاد و باید از REST استفاده بشه. نمیدونم میتونیم کدها رو به قبل برگردونیم یا نه.

mohammad-ashrafi2020 commented 2 years ago

آخرین مشکلی که توی Rest داشتیم این بود که شناسه تراکنش رو تشخیص نمیداد ، وارد درگاه میشد و می گفت : "خطا، شناسه تراکنش معتبر نمی‌باشد"

idotnetdev commented 2 years ago

منظور از شناسه تراکنش localInvoiceId هست؟

mohammad-ashrafi2020 commented 2 years ago

مشخص نبود مشکل از کجاست ( این خطا رو توی صفحه درگاه آسان پرداخت میداد ، 1 هفته باهاش سرو کله زدیم ، دیدیم به جواب نرسیدیم ، اومدیم سمت همون Soap )

idotnetdev commented 2 years ago

حالا به نظرم باید آقای سلطانی نظر بدن که آیا میتونیم کدهای قبلی رو داشته باشیم که بتونیم روش کار کنیم و تست کنم مجددا و ببریمش روی REST یا نه باید از اول کار بشه. @Sina-Soltani

Sina-Soltani commented 2 years ago

@idotnetdev @mohammad-ashrafi2020

درود مشکلی که وجود داشت همون عدم امکان استفاده از الگوریتم رمزنگاری در دات نت کور بود. بعد ما کدها رو تغییر دادیم تا از REST استفاده کنیم. اما ظاهرا با خطا مواجه میشدن @mohammad-ashrafi2020 بنده هم که امکان تست رو نداشتم چون آی پی خارج از ایران هستم خود درگاه آسان پرداخت هم که به قدری افتضاح بوده که حتی امکان تست رو برای توسعه دهنده‌ها محیا نکرده، دیگه چه برسه به پیاده‌سازی‌ هایی که انجام دادن. در نتیجه ما دوباره از همون SOAP استفاده کردیم

جزئیات مربوط به این بحث رو در این تیکت می تونید ببینید: https://github.com/Sina-Soltani/Parbad/issues/259

در نهایت قبل از اینکه تصمیمی گرفته بشه،‌باید اول مشخص بشه که آیا این درگاه با REST کار میکنه یا خیر. چون طبق بحث‌های اون تیکت، ما کدها رو دقیقا اونطوری که انتظار میرفت پیاده‌سازی کردیم،‌ اما کار نکرد. شما می تونید یک نمونه پروژه کاملا جدید بسازید و بدون استفاده از پکیج پَرباد، این درگاه رو با REST پیاده‌سازی کنید و تست کنید. در صورتی که به درستی کار کنه،‌ پروژه رو اینجا آپلود کنید تا من هم یک بررسی جزئی بکنم. اگر همه چیز به خوبی پیش بره، شما می تونید کد‌ها رو در Pull Request پیاده‌سازی و ارسال کنید

idotnetdev commented 2 years ago

خود آسان پرداخت یه پروژه تستی داره که به همراه اطلاعات درگاه ارسال کرده. با REST پیاده سازی شده ولی برای تست نیاز هست که آی پی شما ثبت بشه روی درگاه که بتونید تستش کنید.

Sina-Soltani commented 2 years ago

@idotnetdev آیا شما امکان تست رو دارید؟ یعنی در واقع حساب بانکی و درگاه رو دارید که تست کنید؟

idotnetdev commented 2 years ago

بله میتونم تست کنم. هم اطلاعات حساب دارم و هم IP Valid خودم رو به آسان پرداخت اعلام کردم. میتونم از اول و صفر بشینم بنویسم ولی میگم وقتی قبلا نوشتیم دوباره کاری هست انگار و الا موردی نداره بخواین به این SOAP هم کاری ندارم یه پروژه درست میکنم روی پرباد Parbad.Gateway.AsanPardakhtRest یا هرچی اونجا کدهاشو مینویسم.

Sina-Soltani commented 2 years ago

پس لطفا داخل خود پَرباد، این درگاه رو با REST انجام بدید (اگر هنوز انجام نشده) نیازی به تغییر نام یا ایجاد پروژه جدیدی نیست. داخل پروژه فعلی کدها رو به rest تغییر بدید Parbad.Gateway.AsanPardakht

بعد نوگت رو تولید کنید و نصب کنید روی یک پروژه وب و ازش استفاده کنید و تست کنید. همونطور که گفتم، هدف نهایی این هست که تغییرات جواب بده و روی درگاه واقعی شرکت آسان پرداخت کار کنه. اگر همه چیز با موفقیت انجام شد و نتیجه داد، Pull Request رو ارسال کنید بعدش لطفا

idotnetdev commented 2 years ago

باشه ممنون.

idotnetdev commented 2 years ago

سلام وقت بخیر درگاه آسان پرداخت رو با REST مجددا پیاده سازی کردم و سعی کردم از کدهای قبلی هم استفاده کنم. به درگاه پرداخت وصل میشم و اطلاعات پرداخت رو میزنم و مشکل نداره. وقتی که میخواد برگرده به سایت و متد FetchAsync رو فراخوانی میکنم، موقع فراخوانی متد httpClient.GetAsync(...) به ددلاک میخوره و هیچ جوره حل نمیشه نمیدونم واقعا چرا. جاهای دیگه ای هم استفاده شده ازش مثلا توی ایجاد Request. جالبه که هیچ Exception ی هم صادر نمیشه حتی چند ساعت هم بگذره توی همون حالت میمونه و هیچ بازگشتی نداره. تا بحال با این مشکل مواجه شدید؟

image

Sina-Soltani commented 2 years ago

درود خیر به چنین مشکلی برنخوردم من. اما دلیلی که می تونه وجود داشته باشه اینه پاسخ دهنده (آسان پرداخت) دچار مشکلاتی هست. Pull Request رو ارسال کنید تا من هم نگاهی بندازم

idotnetdev commented 2 years ago

به خاطر استفاده از Task هست GetAsync. با این کدها به راحتی میتونه نتیجه رو بگیره. `HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl); request.Headers.Add("usr", account.UserName); request.Headers.Add("pwd", account.Password);

            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                var res = await reader.ReadToEndAsync();
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    var errorModel = JsonConvert.DeserializeObject<AsanPardakhtApiErrorModel>(res);

                    var failedMessage = errorModel.Title ?? messagesOptions.PaymentFailed;

                    return (false, null, failedMessage);
                }

                var transModel = JsonConvert.DeserializeObject<AsanPardakhtPaymentResultModel>(res);
                // return await reader.ReadToEndAsync();
                return (true, transModel, null);
            }`

موضوع دیگه اینه که گفته بودید که برنچ مستر رو استفاده کنم و روی همون تغییرات دادم. Pull request بزنم؟

Sina-Soltani commented 2 years ago

ارتباطی به task نمیتونه داشته باشه.

شما pull request رو لطفا ارسال کنید من علاوه بر بررسی کلی، یک نگاهی هم به این قسمت میندازم ببینم مشکل چیه

idotnetdev commented 2 years ago

من pull request زدم ولی ریفکتور کدها نیاز هست که هنوز انجام ندادم تا کامل تست کنم و جواب بگیرم.

idotnetdev commented 2 years ago

@Sina-Soltani آقای سلطانی تونستید بررسی کنید مشکلش رو؟

Sina-Soltani commented 2 years ago

خیر متاسفانه فرصت نداشتم. امروز بررسی میکنم pull request شما آماده هست؟ چون مثل اینکه گفتید باید ریفکتور و تست کنید

idotnetdev commented 2 years ago

بله من دیشب pull request زدم که شما مشکل رو بتونید بررسی کنید. اگه مشکلش حل بشه میتونم تست کنم و در نهایت ریفکتور میکنم و کدها و کامنت های اضافه رو هم حذف میکنم.

Sina-Soltani commented 2 years ago

بله من دیشب pull request زدم که شما مشکل رو بتونید بررسی کنید. اگه مشکلش حل بشه میتونم تست کنم و در نهایت ریفکتور میکنم و کدها و کامنت های اضافه رو هم حذف میکنم.

شما pull request رو به هر روشی که در نظر دارید تکمیل و آماده کنید. در صورت نیاز من پس از بررسی و تست تغییرات رو انجام میدم

idotnetdev commented 2 years ago

سلام وقت بخیر @Sina-Soltani پیاده سازی درگاه انجام شد و ریفکتور و تست هم انجام شد. لطفا بررسی بفرمایید و در صورت صلاحدید مرج کنید. ممنون

Sina-Soltani commented 2 years ago

درود سپاس از شما سعی میکنم به زودی نگاه کنم

idotnetdev commented 2 years ago

سلام و عرض ادب آقای سلطانی منتظرم که تایید کنید و پکیجش ایجاد بشه که بتونم نصبش کنم. خودم نمیخوام تولید کنم پکیجش رو. لطفا یه بررسی بفرمایید.

Sina-Soltani commented 2 years ago

درود من فرصتی برای انجام این کار ندارم متاسفانه طی این یکی دو هفته. پکیج رو در سیستم خودتون تولید و استفاده کنید تا من بعدا این کدهای جدید رو مرج و بررسی کنم. سپاس از شما