Parbad icon indicating copy to clipboard operation
Parbad copied to clipboard

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

Open idotnetdev opened this issue 2 years ago • 30 comments

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

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

idotnetdev avatar Jun 06 '22 09:06 idotnetdev

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

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

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

Sina-Soltani avatar Jun 06 '22 10:06 Sina-Soltani

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

idotnetdev avatar Jun 06 '22 10:06 idotnetdev

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

Sina-Soltani avatar Jun 06 '22 10:06 Sina-Soltani

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

image

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

idotnetdev avatar Jun 08 '22 09:06 idotnetdev

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

idotnetdev avatar Jun 08 '22 09:06 idotnetdev

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

mohammad-ashrafi2020 avatar Jun 08 '22 09:06 mohammad-ashrafi2020

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

idotnetdev avatar Jun 08 '22 09:06 idotnetdev

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

mohammad-ashrafi2020 avatar Jun 08 '22 09:06 mohammad-ashrafi2020

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

idotnetdev avatar Jun 08 '22 09:06 idotnetdev

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

mohammad-ashrafi2020 avatar Jun 08 '22 10:06 mohammad-ashrafi2020

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

idotnetdev avatar Jun 08 '22 10:06 idotnetdev

@idotnetdev @mohammad-ashrafi2020

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

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

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

Sina-Soltani avatar Jun 08 '22 11:06 Sina-Soltani

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

idotnetdev avatar Jun 08 '22 11:06 idotnetdev

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

Sina-Soltani avatar Jun 08 '22 11:06 Sina-Soltani

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

idotnetdev avatar Jun 08 '22 11:06 idotnetdev

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

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

Sina-Soltani avatar Jun 08 '22 11:06 Sina-Soltani

باشه ممنون.

idotnetdev avatar Jun 08 '22 11:06 idotnetdev

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

image

idotnetdev avatar Jun 15 '22 11:06 idotnetdev

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

Sina-Soltani avatar Jun 15 '22 18:06 Sina-Soltani

به خاطر استفاده از 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 بزنم؟

idotnetdev avatar Jun 15 '22 18:06 idotnetdev

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

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

Sina-Soltani avatar Jun 15 '22 18:06 Sina-Soltani

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

idotnetdev avatar Jun 15 '22 18:06 idotnetdev

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

idotnetdev avatar Jun 16 '22 06:06 idotnetdev

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

Sina-Soltani avatar Jun 16 '22 08:06 Sina-Soltani

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

idotnetdev avatar Jun 16 '22 12:06 idotnetdev

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

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

Sina-Soltani avatar Jun 16 '22 15:06 Sina-Soltani

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

idotnetdev avatar Jun 20 '22 12:06 idotnetdev

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

Sina-Soltani avatar Jun 20 '22 12:06 Sina-Soltani

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

idotnetdev avatar Jun 24 '22 20:06 idotnetdev

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

Sina-Soltani avatar Jun 25 '22 10:06 Sina-Soltani