PDA

View Full Version : آموزش: پَرباد - راهنمای اتصال و پیاده‌سازی درگاه‌های پرداخت اینترنتی (شبکه شتاب)



SinaSoltani
چهارشنبه 20 تیر 1397, 18:22 عصر
پَرباد چیست؟

منبع مقاله: NetTips. (https://www.dotnettips.info/post/2880/%d9%be%d8%b1%d8%a8%d8%a7%d8%af-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%a7%d8%aa%d8%b5%d8%a7%d9%84-%d9%88-%d9%be%db%8c%d8%a7%d8%af%d9%87%e2%80%8c%d8%b3%d8%a 7%d8%b2%db%8c-%d8%af%d8%b1%da%af%d8%a7%d9%87%e2%80%8c%d9%87%d8%a 7%db%8c-%d9%be%d8%b1%d8%af%d8%a7%d8%ae%d8%aa-%d8%a7%db%8c%d9%86%d8%aa%d8%b1%d9%86%d8%aa%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%d8%b4%d8%aa%d8%a7%d8%a8)

همانطور که همه ما میدانیم، اتصال و راه اندازی درگاه‌های پرداخت اینترنتی (شبکه شتاب)، از همان ابتدا کاری مشکل و پر دردسر برای برنامه نویسان بود. هر بانک، سیستم متفاوت و مخصوص به خود را دارد و این بدان معنا است که برنامه نویسان باید کدهای کاملا متفاوت و همچنین پیاده سازی‌های متفاوتی را از روی فایل‌های PDF راهنمای بانکی، که در نهایت منجر به بی نظمی در پروژه‌ها می‌شود، بنویسند و البته مشکل بزرگتر آن است که پس از پیاده سازی هم اطمینان کاملی از صحت کدهای نوشته شده وجود ندارد؛ چه بسا که واحد‌های پشتیبانی درگاه‌های پرداخت هم افراد حرفه‌ای و آشنا با توسعه نرم افزار نیستند و اکثر اوقات نمی‌توان به آنها تکیه کرد.
برای راحتی کار برنامه نویسان حوضه فریم ورک دات نت، سیستمی جامع، اوپن سورس (https://github.com/Sina-Soltani/Parbad) و کاملا رایگان، بدون نیاز به اضافه کردن هیچ گونه وب سرویسی تهیه شده است که به برنامه نویسان اجازه می‌دهد تنها با نوشتن چند خط کد، وب سایت خود را به پرداخت اینترنتی مجهز کنند.
این سیستم در حال حاضر متشکل از درگاه‌های پرداخت اینترنتی بانک‌های ملت، سامان، پارسیان، تجارت و پاسارگاد است.
همچنین این سیستم در قالب یک Nuget Package (https://www.nuget.org/packages/Parbad/) برای نصب راحت در اپلیکیشن آماده شده است.

آنچه که شما در این مطلب یاد خواهید گرفت:



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



طریقه نصب


PM> Install-Package Parbad


برای وب سایت‌های بر پایه فریم ورک MVC


PM> Install-Package Parbad.MVC5


ایجاد صورتحساب و ارسال کاربر به درگاه پرداخت

ابتدا یک شیٔ صورتحساب را به صورت زیر ایجاد کنید

var invoice = new Invoice( [Order Number], [Amount], [Verify URL]);


- Order Number شماره صورتحساب است و باید همیشه یک عدد یکتا باشد (تکراری نباشد).
- Amount مبلغ قابل پرداخت به ریال است.
- Verify URL یک آدرس در وب سایت شما، برای بازگشت مشتری پس از پرداخت و تأیید صورتحساب است.

برای مثال:

var invoice = new Invoice(1, 30000, "http://www.mywebsite.com/payment/verify" );

سپس صورتحساب را به درگاه مورد نظر ارسال میکنیم.

var result = Payment.Request(Gateways.Mellat, invoice);


شیٔ result حاوی شماره یکتا رجوع و وضعیت درخواست (موفقیت یا عدم موفقیت درخواست) است.

if (result.Status == RequestResultStatus.Success)
{
// این متد، کاربر را به سمت وب سایت درگاه پرداخت هدایت میکند
result.Process(Context);
}
else
{
// در صورت تمایل می‌توانید پیغام مورد نظر از درگاه پرداخت را نمایش دهید
var msg = result.Message;
}

در وب سایت‌های MVC می‌توانید به روش زیر عمل کنید

if (result.Status == RequestResultStatus.Success)
{
// کاربر را به سمت وب سایت درگاه پرداخت هدایت میکند
return new RequestActionResult(result);
}
else
{
return View("Error");
}



تأیید صورتحساب

پس از بازگشت کاربر از وب سایت بانک، باید از پرداخت صورتحساب توسط کاربر اطمینان حاصل کنید. کد زیر را باید در آدرسی که هنگام ساخت صورتحساب ذکر کرده بودید، قرار دهید.

var result = Payment.Verify(System.Web.HttpContext.Current);

شیٔ result در اینجا حاوی اطلاعاتی مانند: درگاه بانکی (که کاربر در آن صورتحساب را پرداخت کرده)، شماره رجوع، شماره تراکنش یکتای بانکی، وضعیت پرداخت و پیام درگاه است.
شما می‌توانید با بررسی این شیٔ، تصمیمات لازم را بگیرید.

if(result.Status == VerifyResultStatus.Success)
{
// کاربر، صورتحساب را پرداخت کرده است و شما میتوانید ادامه عملیات خرید را انجام دهید
}
else
{
// کاربر بنا به دلایلی صورتحساب را پرداخت نکرده است
// شما همچنین میتوانید علت را در قالب یک پیام از پراپرتی پیام مشاهده کنید

// بنابراین شما میتوانید این صورتحساب را در پایگاه داده خود مردود اعلام کنید
}


مردود کردن صورتحساب قبل از انتقال وجه از مشتری به فروشنده

در بعضی شرایط، پس از پرداخت صورتحساب توسط مشتری، شما متوجه می‌شوید که باید عملیات را لغو کنید.

سناریو زیر را در نظر بگیرید:

در زمانیکه مشتری در وب سایت بانکی، صورتحساب را پرداخت میکرده است، موجودی کالای خریداری شده توسط او در فروشگاه شما، به پایان رسیده ! حال باید این وجه پرداخت شده را فورا مردود اعلام کنید.
برای این منظور متد تأیید صورتحساب را به روش زیر بازنویسی کنید


https://www.dotnettips.info/file/image?name=ParbadCancelRequest2.png


همانطور که در تصویر می‌بینید، در هنگام بازگشت مشتری به وب سایت شما و تأیید کردن صورتحساب، شما می‌توانید اطلاعات تراکنش مورد نظر را که شامل، درگاه پرداخت بانکی، شماره سفارش و شماره رجوع است را دریافت کنید و سپس با استفاده از این اطلاعات، پایگاه داده خود را بررسی کرده و در صورت لزوم، متد Cancel را فراخوانی کنید. به این ترتیب به درگاه بانکی، هیچگونه تأییدیه ای اعلام نمی‌شود و این بدان معناست که اگر وجهی به حساب فروشگاه واریز شده باشد، پس از چند دقیقه (معمولا ۱۵ دقیقه) به حساب مشتری برگشت داده خواهد شد.

برگشت وجه به حساب مشتری پس از تأیید صورتحساب

var refundResult = Payment.Refund(new RefundInvoice([Order Number], [Amount]));

در اینجا، Order Number همان شماره سفارش صورتحساب و Amount مقداری از وجه و یا کل وجه برای برگشت به حساب مشتری است.
پس از آن شما می‌توانید نتیجه این عملیات را در شیٔ refundResult بررسی کنید.


درگاه مجازی پرداخت

درصورتیکه شما نیاز به تست عملکرد اپلیکیشن خود داشته باشید، نیازی به داشتن یک حساب واقعی در بانک‌های اینترنتی ندارید و می‌توانید اپلیکیشن خود را با یک درگاه مجازی بسیار ساده تست کنید. برای انجام این کار در هنگام ارسال صورتحساب، از میان درگاه‌های بانکی، درگاه مجازی پَرباد را انتخاب کنید.

var result = Payment.Request(Gateways.ParbadVirtualGateway, invoice);


در نتیجه در هنگام هدایت کاربر به درگاه پرداخت، کاربر به درگاه مجازی هدایت خواهد شد.

https://www.dotnettips.info/file/image?name=ParbadVirtualGateway.png


https://www.dotnettips.info/file/image?name=ParbadaVirtualGatewaySuccess.png


اما قبل از کار با درگاه مجازی باید در فایل web.config وب اپلیکیشن خود، تنظیمات زیر را قرار دهید:

<system.webServer>
<handlers>
<add name="ParbadGatewayPage" verb="*" path="Parbad.axd" type="Parbad.Web.Gateway.ParbadVirtualGatewayHandler" />
</handlers>
</system.webServer>

در اینجا، درگاه مجازی به عنوان یک HttpHandler معرفی شده است. مقداری که در مشخصه path ذکر شده، در واقع آدرس درگاه مجازی است که شما می‌توانید به دلخواه خود آن را وارد کنید. ما در این مثال از آدرس parbad.axd استفاده کرده ایم.
و در نهایت در وب اپلیکیشن خود، مسیر ذکر شده را به صورت زیر معرفی کنید:

ParbadConfiguration.Gateways.ConfigureParbadVirtua lGateway(new ParbadVirtualGatewayConfiguration("Parbad.axd"));

در نتیجه در هنگام هدایت کاربر به درگاه مجازی، شما باید در نوار آدرس مرورگر خود، مقداری را که تنظیم کرده اید مشاهده کنید.


https://www.dotnettips.info/file/image?name=ParbadVirtualGatewayAddress.png


نکته مهم: فراموش نکنید، قبل از انتشار نهایی وب سایت بر روی سرور (نمایش عمومی)، تنظیمات HttpHandler مربوط به این درگاه مجازی را از درون فایل web.config حذف کنید. بدین صورت، این درگاه از دسترس عموم خارج خواهد بود.

تنظیمات پَرباد

بهترین مکان برای درج این تنظیمات در اپلیکیشن‌های ASP.NET WebForms فایل Global.asax.cs و در اپلیکیشن‌های ASP.NET MVC فایل Startup.cs است.

ASP.NET Web Forms


public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// configurations
}
}


ASP.NET MVC


public class Startup
{
public void Configuration(IAppBuilder app)
{
// configurations
}
}


تنظیمات درگاه‌های پرداخت

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

برای مثال: تنظیم درگاه پرداخت بانک ملت


https://www.dotnettips.info/file/image?name=Parbad_Configure_Mellat-95cc98188f674a9db2f5702d79910f44.png



تنظیمات ذخیره سازی اطلاعات پرداخت

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

ذخیره و بازیابی توسط SQL Server

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

ParbadConfiguration.Storage = new SqlServerStorage("Connection String", "MyPaymentTableName");


فیلد‌های مورد نیاز در این جدول:

https://www.dotnettips.info/file/image?name=ParbadPaymentData.png



ذخیره و بازیابی اطلاعات توسط روش مورد نظر شما:

در صورتیکه مایلید ذخیره و بازیابی را به روش خود انجام دهید، کلاس Storage را پیاده سازی کنید

public class MyStorage : Storage
{
// Implement methods here...
}

و کلاس مورد نظر را در تنظیمات به عنوان منبع، معرفی کنید.

ParbadConfiguration.Storage = new MyStorage();


لازم به ذکر است که این کلاس شامل متد‌های synchronous و همچنین asynchronous است. بنابراین در صورتیکه برای مثال در هنگام ارسال درخواست به بانک، از متد‌های async استفاده می‌کنید، نیازی به پیاده سازی کردن متد‌های synchronous نیست.

در صورتیکه هر گونه پیشنهاد یا انتقاد نسبت به کارکرد این سیستم دارید، صمیمانه منتظر شنیدن آن در راستای توسعه این سیستم هستم.
همچنین در صورت تمایل به توسعه آن، می‌توانید آن را در گیت هاب (https://github.com/Sina-Soltani/Parbad) دنبال کنید.

با توجه به دارا بودن پَرباد به لایسنس، در صورت استفاده و یا کپی از کدهای این پروژه و بازنشر آن، مراتب به گیت هاب و سایر منابع گزارش خواهد شد.

با تشکر.

منبع مقاله: NetTips.

(https://www.dotnettips.info/post/2880/%d9%be%d8%b1%d8%a8%d8%a7%d8%af-%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d8%a7%d8%aa%d8%b5%d8%a7%d9%84-%d9%88-%d9%be%db%8c%d8%a7%d8%af%d9%87%e2%80%8c%d8%b3%d8%a 7%d8%b2%db%8c-%d8%af%d8%b1%da%af%d8%a7%d9%87%e2%80%8c%d9%87%d8%a 7%db%8c-%d9%be%d8%b1%d8%af%d8%a7%d8%ae%d8%aa-%d8%a7%db%8c%d9%86%d8%aa%d8%b1%d9%86%d8%aa%db%8c-%d8%b4%d8%a8%da%a9%d9%87-%d8%b4%d8%aa%d8%a7%d8%a8)

stormaref
یک شنبه 18 شهریور 1397, 09:57 صبح
پکیج رو .net core کار نمیکنه یعنی اصلا ساپورتش نمیکنه

SinaSoltani
سه شنبه 20 شهریور 1397, 00:25 صبح
پکیج رو .net core کار نمیکنه یعنی اصلا ساپورتش نمیکنه



نسخه جدید در حال توسعه هست که شامل .net core هم هست.
طی چند روز آینده منتشر میشه.

شرلوک هلمز
یک شنبه 07 بهمن 1397, 23:01 عصر
برای بانک پارسیان من یک آموزش تهیه کرده ام که در آدرس زیر قابل دریافت است.
https://masoudpart.ir/Subjects.aspx?id=OQ%3d%3d

SinaSoltani
جمعه 09 فروردین 1398, 21:10 عصر
نسخه جدید آماده استفاده شد.
با قابلیت پشتیبانی از:

ASP.NET CORE
ASP.NET MVC
ASP.NET WebForms


لینک جهت نصب (https://www.nuget.org/packages/Parbad/)