using Parbad.AspNetCore;
private readonly IOnlinePayment _onlinePayment;
public PaymentController(IOnlinePayment onlinePayment)
{
_onlinePayment = onlinePayment;
}
public async Task<IActionResult> 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
}
}
شئ result در کد بالا حاوی اطلاعاتی مانند کد رهگیری، مبلغ داده شده، درگاه بانکی انتخاب شده، پیام و غیره است.
نکته: کد رهگیری را در پایگاه داده وب سایت خودتان برای فاکتور مورد نظر ذخیره کنید. این کد پس از عملیات تایید پرداخت (که پایینتر توضیح داده شده)، توسط پَرباد به شما داده خواهد شد و شما میتوانید فاکتور مورد نظر در پایگاه داده خودتان را آپدیت کنید.
تایید پرداخت
پس از اینکه کاربر مبلغ را در درگاه بانکی پرداخت کرد، به سمت وب سایت شما و آدرسی که در مرحله اول وارد کرده بودید هدایت خواهد شد. در این مرحله شما باید اطمینان حاصل کنید که صورت حساب پرداخت شده است یا خیر. بنابراین به روش زیر عمل میکنیم:
نکته: طبق توضیحاتی که بالاتر داده شد، بسته به اینکه در پروژه خود از تزریق وابستگی استفاده میکنید یا خیر، یکی از اینترفیس IOnlinePayment و یا کلاس استاتیک StaticOnlinePayment را انتخاب کنید.
نمونه کد
public async Task<IActionResult> 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 را به شکل صحیح (نمونه مثال بالاتر ذکر شده) استفاده کنید، نیازی به استفاده از این متد ندارید.
نمونه کدها
مقالههای مرتبط: