پَرباد - راهنمای اتصال و پیادهسازی درگاههای پرداخت اینترنتی (شبکه شتاب)
نویسنده: سینا سلطانی
تاریخ: ۱۳۹۷/۰۴/۱۸ ۲۳:۵۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
پَرباد چیست؟
آنچه که شما در این مطلب یاد خواهید گرفت:
PM> Install-Package Parbad
PM> Install-Package Parbad.MVC5
var invoice = new Invoice( [Order Number], [Amount], [Verify URL]);
var invoice = new Invoice(1, 30000, "http://www.mywebsite.com/payment/verify" );
var result = Payment.Request(Gateways.Mellat, invoice);
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);
if(result.Status == VerifyResultStatus.Success)
{
// کاربر، صورتحساب را پرداخت کرده است و شما میتوانید ادامه عملیات خرید را انجام دهید
}
else
{
// کاربر بنا به دلایلی صورتحساب را پرداخت نکرده است
// شما همچنین میتوانید علت را در قالب یک پیام از پراپرتی پیام مشاهده کنید
// بنابراین شما میتوانید این صورتحساب را در پایگاه داده خود مردود اعلام کنید
}
همانطور که در تصویر میبینید، در هنگام بازگشت مشتری به وب سایت شما و تأیید کردن صورتحساب، شما میتوانید اطلاعات تراکنش مورد نظر را که شامل، درگاه پرداخت بانکی، شماره سفارش و شماره رجوع است را دریافت کنید و سپس با استفاده از این اطلاعات، پایگاه داده خود را بررسی کرده و در صورت لزوم، متد Cancel را فراخوانی کنید. به این ترتیب به درگاه بانکی، هیچگونه تأییدیه ای اعلام نمیشود و این بدان معناست که اگر وجهی به حساب فروشگاه واریز شده باشد، پس از چند دقیقه (معمولا ۱۵ دقیقه) به حساب مشتری برگشت داده خواهد شد.
var refundResult = Payment.Refund(new RefundInvoice([Order Number], [Amount]));
var result = Payment.Request(Gateways.ParbadVirtualGateway, invoice);
در نتیجه در هنگام هدایت کاربر به درگاه پرداخت، کاربر به درگاه مجازی هدایت خواهد شد.
<system.webServer> <handlers> <add name="ParbadGatewayPage" verb="*" path="Parbad.axd" type="Parbad.Web.Gateway.ParbadVirtualGatewayHandler" /> </handlers> </system.webServer>
ParbadConfiguration.Gateways.ConfigureParbadVirtualGateway(new ParbadVirtualGatewayConfiguration("Parbad.axd"));
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// configurations
}
} public class Startup
{
public void Configuration(IAppBuilder app)
{
// configurations
}
}
ParbadConfiguration.Storage = new SqlServerStorage("Connection String", "MyPaymentTableName");
public class MyStorage : Storage
{
// Implement methods here...
} ParbadConfiguration.Storage = new MyStorage();
در صورتیکه هر گونه پیشنهاد یا انتقاد نسبت به کارکرد این سیستم دارید، صمیمانه منتظر شنیدن آن در راستای توسعه این سیستم هستم.همچنین در صورت تمایل به توسعه آن، میتوانید آن را در گیت هاب دنبال کنید و یا لطفا پیشنهادات، بحثها و نظرات خود را در صفحه مخصوص این پروژه ارسال کنید.با تشکر.
payRequest = _melatServiceReference.bpCumulativeDynamicPayRequest(
bankServiceViewModel.MerchantId.ToLong(),
bankServiceViewModel.Username,
bankServiceViewModel.Password,
alternativeOrderCode,
payableAmount,
DateTime.Now.DateToString(),
DateTime.Now.TimeToString("HHMMss"),
$"{systemshareMechentId},{systemShareAmount},;{customemembershareId},{merchantShareAmount},;",
bankTokenRequestViewModel.CallBackUrl); <?xml version="1.0" encoding="UTF-8"?> -<Log xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Type>Error</Type> <Gateway>Mellat</Gateway> <OrderNumber>636685148523361974</OrderNumber> <Amount>72000</Amount> <Message>The remote server returned an error: (500) Internal Server Error.</Message> <CreatedOn>2018-07-30T02:34:12.4425676+04:30</CreatedOn> </Log>
<?xml version="1.0" encoding="utf-8"?> <Log xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Type>Verify</Type> <Gateway>Mellat</Gateway> <OrderNumber>636687181261995054</OrderNumber> <Amount>40000</Amount> <ReferenceId>691EF56C920E61EC</ReferenceId> <TransactionId /> <Status>Failed</Status> <Message>کاربر از انجام تراکنش منصرف شده است</Message> <CreatedOn>2018-08-01T11:02:11.8155948+04:30</CreatedOn> </Log>
<?xml version="1.0" encoding="utf-8"?> <Log xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Type>Request</Type> <Gateway>Mellat</Gateway> <OrderNumber>636687184847922187</OrderNumber> <Amount>1770000</Amount> <ReferenceId>51833F8D2D0C78A2</ReferenceId> <TransactionId /> <Status>Success</Status> <Message>تراکنش با موفقیت انجام شد</Message> <CreatedOn>2018-08-01T11:08:05.0821891+04:30</CreatedOn> </Log>
<?xml version="1.0" encoding="utf-8"?> <Log xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Type>Verify</Type> <Gateway>Mellat</Gateway> <OrderNumber>636696338698017740</OrderNumber> <Amount>50000</Amount> <ReferenceId>63610A4322A08FDD</ReferenceId> <TransactionId>139032371054</TransactionId> <Status>Success</Status> <Message>تراکنش با موفقیت انجام شد</Message> <CreatedOn>2018-08-12T01:25:31.1869631+04:30</CreatedOn> </Log>
وقت
بخیر؛ سوالی در خصوص پیاده سازی درگاه پرداخت اینترنتی در پروژههای SPA دارم. بنده
سمت کلاینت از انگیولار و سمت بک اند از Web Api 2 استفاده میکنم. مشکلی
که وجود داره اینه که بعد از تکمیل خرید، ریسپانس رو به redirectUrl قراره Post
بشه. پس من قاعدتا redirectUrl رو نمیتونم برابر با Route خاصی در
برنامهی انگیولار قرار بدم. چون پشت مسیرهای انگیولار هیچگونه اکشنی وجود نداره
که من بخوام HttpVerb این مسیر خاص را روی Post قرار بدم. اگه ریسپانس رو
توسط Get
توی Url میفرستاد قضیه فرق میکرد و میشد مقادیر را از Url خواند. پس
redirectUrl رو برابر با آدرس یک Api قرار دادم که HttpVerb آن Post هست. ریسپانس رو در این Api میگیرم و فعالیتهای مورد نیاز رو در سمت بک اند میتونم انجام بدم. اما تکلیف نمایش نتیجهی پرداخت به کاربر چی میشه؟
نکتهی دیگری که وجود داره اینه که سرویسها و برنامه انگیولار در 2 آدرس
متفاوت هستند؛ یعنی Api ها رو Azure هاست هستن و انگیولار جایی
دیگه. در اینجا باز هم به همان دلیل که امکان Post Request به Routeهای انگیولار وجود نداره نکتهی چشم گیری نیست.
اگه کسی در پروژههای SPA درگاه پرداخت اینترنتی استفاده کرده ممنون میشم به این سوال پاسخ بده. اگه درگاه بانک سامان استفاده کرده باشه که چه بهتر...
Install-Package Parbad -Version 1.3.0-beta1