در قسمت مقدمه، با پَرباد و ویژگیهای آن آشنا شدید. در این مقاله قصد داریم آموزش پایه استفاده از آن را آموزش دهیم.
آنچه شما در این مقاله یاد خواهید گرفت:
درخواست پرداخت
تایید پرداخت
بازگرداندن مبلغ پرداخت شده
کلیه عملیات درخواست پرداخت، تایید پرداخت و بازگرداندن مبلغ، به دو روش قابل استفاده هستند:
اینترفیس IOnlinePayment (برای پروژههایی که از تزریق وابستگیها استفاده میکنند)
کلاس StaticOnlinePayment (برای پروژههایی که از تزریق وابستگیها استفاده نمیکنند)
درخواست پرداخت
var result = await _onlinePayment.RequestAsync(Gateways.[Your Selected Gateway], [Tracking Number], [Amount], [Verify URL]);
Gateway، درگاه بانکی مورد نظر جهت پرداخت است.
TrackingNumber یک کد رهگیری یکتا جهت شناسایی صورت حساب است. (در مقالهی آموزش پیشرفته، نحوه ایجاد اتوماتیک این کد را یاد خواهید گرفت)
Amount مبلغ مورد نظر (به ریال) جهت پرداخت است.
Verify URL یک آدرس در وب سایت شما است. زمانیکه کاربر، پرداخت را در درگاه بانکی انجام داد، به این آدرس جهت تایید پرداخت هدایت خواهد شد.
نکته ۲: در صورتیکه قصد لغو عملیات پرداخت را دارید، حتما متد CancelPayment را فراخوانی کنید.
نمونه کدها
ASP.NET WebForms
using Parbad;
protected void BtnPay_Click(object sender, EventArgs e)
{
// استفاده به صورت استاتیک و بدون تزریق وابستگی
var result = StaticOnlinePayment.Instance.Request(Gateways.Mellat, 123, 25000, "http://www.mywebsite.com/foo/bar/");
if (result.IsSucceed)
{
// کاربر را به سمت درگاه بانکی هدایت میکند
// همچنین بهتر است کد رهگیری که در شئ نتیجه است را، برای فاکتور مورد نظر در پایگاه داده خودتان ذخیره کنید
result.GatewayTransporter.Transport();
}
else
{
// درخواست پرداخت موفقیت آمیز نبود
}
}
ASP.NET MVC
using Parbad.Mvc5;
private readonly IOnlinePayment _onlinePayment;
// تزریق وابستگی به کنترلر
public PaymentController(IOnlinePayment onlinePayment)
{
_onlinePayment = onlinePayment;
}
public async Task Pay()
{
var result = await _onlinePayment.RequestAsync(Gateways.Mellat, 123, 25000, "http://www.mywebsite.com/foo/bar/");
if (result.IsSucceed)
{
// کاربر را به سمت درگاه بانکی هدایت میکند
// همچنین بهتر است کد رهگیری که در شئ نتیجه است را، برای فاکتور مورد نظر در پایگاه داده خودتان ذخیره کنید
return result.GatewayTransporter.TransportToGateway();
}
else
{
// درخواست پرداخت موفقیت آمیز نبود
}
}
ASP.NET CORE
using Parbad.AspNetCore;
private readonly IOnlinePayment _onlinePayment;
public PaymentController(IOnlinePayment onlinePayment)
{
_onlinePayment = onlinePayment;
}
public async Task Pay()
{
var result = await _onlinePayment.RequestAsync(Gateways.Mellat, 123, 25000, "http://www.mywebsite.com/foo/bar/");
if (result.IsSucceed)
{
// کاربر را به درگاه بانکی هدایت میکند
// همچنین بهتر است کد رهگیری که در شئ نتیجه است را، برای فاکتور مورد نظر در پایگاه داده خودتان ذخیره کنید
return result.GatewayTransporter.TransportToGateway();
}
else
{
// do something else
}
}
تایید پرداخت
پس از اینکه کاربر مبلغ را در درگاه بانکی پرداخت کرد، به سمت وب سایت شما و آدرسی که در مرحله اول وارد کرده بودید هدایت خواهد شد. در این مرحله شما باید اطمینان حاصل کنید که صورت حساب پرداخت شده است یا خیر. بنابراین به روش زیر عمل میکنیم:
نکته: طبق توضیحاتی که بالاتر داده شد، بسته به اینکه در پروژه خود از تزریق وابستگی استفاده میکنید یا خیر، یکی از اینترفیس IOnlinePayment و یا کلاس استاتیک StaticOnlinePayment را انتخاب کنید.
نمونه کد
public async Task Verify()
{
var result = await _onlinePayment.VerifyAsync(invoice =>
{
// در این مرحله هنوز درخواست واریز وجه از وب سایت شما به بانک ارسال نشده است
// بنابراین شما میتوانید اطلاعات صورتحساب را با پایگاه داده خود چک کنید
// و در صورت لزوم تراکنش را لغو کنید
if (!Is_There_Still_Enough_SmartPhone_In_Shop(invoice.TrackingNumber))
{
// لغو عملیات پرداخت
invoice.CancelPayment("We have no more smart phones to sell.");
}
});
if(result.IsSucceed)
{
// پرداخت موفقیت آمیز بوده است. کد تراکنش بانکی را در پایگاه داده خود ذخیره کنید
var transactionCode = result.TransactionCode;
}
else
{
// پرداخت به دلایلی موفقیت آمیز نبوده.
// در صورت تمایل میتوانید پراپرتی پیام در شئ نتیجه را مشاهده کنید و یا به کاربر نمایش دهید
}
}
نکته ۱: در صورت موفقیت آمیز بودن پرداخت، باید کد تراکنش بانکی (Transaction Code) را طبق دستورالعمل بانکها به کاربر نمایش دهید.
نکته ۲: در صورتیکه قصد لغو عملیات پرداخت را دارید، حتما متد CancelPayment را فراخوانی کنید.
نکته ۳: در صورت فراخوانی متد CancelPayment به منظور لغو پرداخت، اگر مبلغی از حساب مشتری به حساب شما واریز شده باشد، پس از حدود ۱۵ دقیقه تا ۱ روز، به حساب مشتری به صورت خودکار توسط بانک برگشت داده خواهد شد (مدت زمان برگشت مبلغ به حساب مشتری برای هر بانک متفاوت است).
برای مثال: در زمانیکه مشتری در درگاه بانکی در حال پرداخت است، این احتمال وجود دارد که موجودی کالای شما به اتمام رسیده باشد و شما قصد دارید عملیات پرداخت را لغو کنید. برای این منظور مانند مثال بالا، در درون متد Verify، ابتدا با توجه به شماره رهگیری که پَرباد به شما میدهد پایگاه دادهی فروشگاه خود را بررسی میکنید و در صورت لزوم متد CancelPayment را فراخوانی میکنید.
بازگرداندن مبلغ پرداخت شده
در صورتیکه پس از عملیات پرداخت تشخیص میدهید که مبلغ پرداخت شده باید دوباره به حساب مشتری برگردانده شود، میتوانید به روش زیر عمل کنید:
// کد رهگیری صورت حساب مورد نظر
var trackingNumber = 123;
var result = await _onlinePayment.RefundCompletelyAsync(trackingNumber);
نکته: شما فقط و فقط زمانی به استفاده از این متد نیاز دارید که یک پرداخت، با موفقیت انجام شده باشد و مبلغ از حساب مشتری کم شده باشد و همچنین شما قصد بازگشت مبلغ را به حساب مشتری داشته باشید. در غیر اینصورت هیچگونه نیازی به استفاده از این متد نیست. در واقع اگر متد Verify را به شکل صحیح (نمونه مثال بالاتر ذکر شده) استفاده کنید، نیازی به استفاده از این متد ندارید.
نمونه کدها
مقالههای مرتبط:
پَرباد – اموزش پیادهسازی پرداخت آنلاین در دات نت – مقدمه
پَرباد – آموزش پیادهسازی پرداخت آنلاین در دات نت – تنظیمات
پَرباد – آموزش پیادهسازی پرداخت آنلاین در دات نت – آموزش پیشرفته