برنامه نویسی درگاه بانک
بسم الله الرحمن الرحیم
بخش چهارم
برنامه نویسی درگاه پرداخت آنلاین
بخش اول (اتصال سایت به درگاه بانک)
بخش دوم (برنامه نویسی درگاه پرداخت آنلاین)
بخش سوم (آموزش راه اندازی درگاه بانک ملت)
بخش چهارم (برنامه نویسی درگاه بانک)
در بخش پیش اطلاعات را برای درگاه بانک ملت ارسال کردیم، در این بخش اطلاعات برگردانده شده را بررسی و این آموزش را به پایان خواهیم رساند.
اطلاعاتی که درگاه پرداخت به شما بر می گرداند به صورت POST خواهد بود و این اطلاعات به صفحه ی callBackUrl که در متد bpPayRequest معرفی کرده اید، ارسال خواهد شد.
اطلاعاتی که بانک ملت پس از اتمام تراکنش برای شما ارسال خواهد کرد به صورت زیر خواهد بود:
ردﻳﻒ |
ﻧﺎم ﭘﺎراﻣﺘﺮ |
ﻣﺜﺎل |
توضیح |
ﻧﻮع |
1 |
RefId |
AF82041a2Bf6989c7fF9 |
ﻛﺪ ﻣﺮﺟﻊ درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ ﻛﻪ ﻫﻤﺮاه ﺑﺎ درﺧﻮاﺳﺖ bpPayRequest ﺗﻮﻟﻴد ﺷﺪه اﺳﺖ و به پذیرنده اختصاص یافته است. |
string |
2 |
ResCode |
0 |
وضیعت خرید |
string |
3 |
saleOrderId |
10 |
ﺷﻤﺎره درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ |
long |
4 |
SaleReferenceId |
5142510 |
ﻛﺪ ﻣﺮﺟﻊ ﺗﺮاﻛﻨﺶ ﺧﺮﻳﺪ ﻛﻪ از ﺳﺎﻳﺖ ﺑﺎﻧﻚ ﺑﻪ ﭘﺬﻳﺮﻧﺪه داده ﻣﻲ ﺷﻮد |
long |
Action مربوط به callBackUrl را درون کنترلر Payment در بخش قبل ایجاد کردیم، در این بخش کدهای این Action را طراحی و پیاده سازی خواهیم کرد.
قبل از پیاده سازی این Action باید چهار متد دیگر مربوط به درگاه پرداخت بانک ملت را درون کلاس BankMellatImplement خود پیاده سازی کنیم.
متدهای درگاه پرداخت بانک ملت
ﻣﺘﺪ ﺗﺎﻳﻴد تراکنش ﺧﺮید bpVerifyRequest
با استفاده از این متد می توانید وضعیت یک تراکنش را بر اساس شماره پیگری که در اختیار دارید، بررسی کنید.
برای استفاده از این متد می بایست پارامترهای زیر را به این متد ارائه دهید.
ردﻳﻒ |
ﻧﺎم ﭘﺎراﻣﺘﺮ |
ﻣﺜﺎل |
توضیح |
ﻧﻮع |
1 |
terminalId |
1234 |
ﺷﻤﺎره ﭘﺎﻳﺎﻧﻪ ﭘﺬﻳﺮﻧﺪه |
long |
2 |
userName |
******* |
ﻧﺎم ﻛﺎرﺑﺮی ﭘﺬﻳﺮﻧﺪه |
string |
3 |
userPassword |
****** |
ﻛﻠﻤﻪ ﻋﺒﻮر ﭘﺬﻳﺮﻧﺪه |
string |
4 |
orderId |
10 |
ﺷﻤﺎره درﺧﻮاﺳﺖ ( پرداخت) |
long |
5 |
saleOrderId |
10 (همان orderId می باشد) |
ﺷﻤﺎره درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ |
long |
6 |
SaleReferenceId |
5142510 |
ﻛﺪ ﻣﺮﺟﻊ ﺗﺮاﻛﻨﺶ ﺧﺮﻳﺪ |
long |
ابتدا باید این متد را درون کلاس BankMellatImplement پیاده سازی کنیم. این متد را مانند متد bpPayRequest پیاده سازی می کنیم که بسیار هم ساده می باشد.
public string VerifyRequest(long orderId, long saleOrderId, long saleReferenceId)
{
try
{
MellatWebService.PaymentGatewayImplService WebService = new MellatWebService.PaymentGatewayImplService();
return WebService.bpVerifyRequest(terminalId, userName, password, orderId, saleOrderId, saleReferenceId);
}
catch (Exception Error)
{
throw new Exception(Error.Message);
}
}
این متد سه پارامتر مربوط به شماره تراکتش را دریافت می کند و سپس نتیجه این تراکنش را برای ما باز می گرداند، خروجی این متد یکی از اعدادی خواهد بود که قبلا آن ها را به صورت enum ذخیره کردیم.
متد درخواست واریز وجه bpSettleRequest
ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﻣﺘﺪ ﻋﻤﻠﻴﺎت وارﻳﺰ اﻧﺠﺎم ﺧﻮاﻫﺪ ﺷﺪ، در ﺣﻘﻴﻘﺖ اﻳﻦ ﻣﺘﺪ ﺟﻬﺖ وارﻳﺰ ﻧﻬﺎﻳﻲ ﻧﻤﻮدن ﻋﻤﻠﻴﺎت واریز اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد.
ﺑﺎﻧﻚ ﺗﺮاﻛﻨﺸﻬﺎی ﺗﺎﻳﻴﺪ ﺷﺪه ﺗﻮﺳﻂ اﻳﻦ ﻣﺘﺪ را ﻃﺒﻖ ﻗﺮارداد ﺑﻪ ﺣﺴﺎب شما وارﻳﺰ می کند. ﻣﻘﺪار ﺑﺮﮔﺸﺘﻲ "0" ﺑﻪ ﻣﻌﻨﺎی ﻣﻮﻓﻖ درﺧﻮاﺳﺖ وارﻳﺰ به حساب شما می ﺑﺎﺷﺪ.
برای استفاده از این متد می بایست پارامترهای زیر را به این متد ارائه دهید.
ردﻳﻒ |
ﻧﺎم ﭘﺎراﻣﺘﺮ |
ﻣﺜﺎل |
توضیح |
ﻧﻮع |
1 |
terminalId |
1234 |
ﺷﻤﺎره ﭘﺎﻳﺎﻧﻪ ﭘﺬﻳﺮﻧﺪه |
long |
2 |
userName |
******* |
ﻧﺎم ﻛﺎرﺑﺮی ﭘﺬﻳﺮﻧﺪه |
string |
3 |
userPassword |
****** |
ﻛﻠﻤﻪ ﻋﺒﻮر ﭘﺬﻳﺮﻧﺪه |
string |
4 |
orderId |
10 |
ﺷﻤﺎره درﺧﻮاﺳﺖ ( پرداخت) |
long |
5 |
saleOrderId |
10 (همان orderId می باشد) |
ﺷﻤﺎره درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ |
long |
6 |
SaleReferenceId |
5142510 |
ﻛﺪ ﻣﺮﺟﻊ ﺗﺮاﻛﻨﺶ ﺧﺮﻳﺪ |
long |
ﺗﻤﺎم ﺗﺮاﻛﻨﺸﻬﺎﻳﻲ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده از اﻳﻦ ﻣﺘﺪ درﺧﻮاﺳﺖ وارﻳﺰ وﺟﻪ ﻛﺮده ﺑﺎﺷﻨﺪ، ﺑﻪ ﺣﺴﺎب شما وارﻳﺰ ﻣﻲ ﺷﻮﻧﺪ . در ﺣﻘﻴﻘﺖ اﮔﺮ ﺗﺮاﻛﻨﺶ ﻣﻮﻓﻘﻲ settle ﻧﺸﻮد وجه مورد نظر وارﻳﺰ ﻧﺨﻮاﻫﺪ ﺷﺪ.
این متد را به صورت زیر پیاده سازی می کنیم.
public string SettleRequest(long orderId, long saleOrderId, long saleReferenceId)
{
try
{
MellatWebService.PaymentGatewayImplService WebService = new MellatWebService.PaymentGatewayImplService();
return WebService.bpSettleRequest(terminalId, userName, password, orderId, saleOrderId, saleReferenceId);
}
catch (Exception Error)
{
throw new Exception(Error.Message);
}
}
این متد سه پارامتر مربوط به شماره تراکتش را دریافت می کند و سپس نتیجه مبلغ مورد ثبت شده در این تراکنش را به حساب ما واریز می کند، خروجی این متد یکی از اعدادی خواهد بود که قبلا آن ها را به صورت enum ذخیره کردیم. اگر این متد مقدار صفر برگرداند، بدین معنا خواهد بود که تراکنش مورد نظر با موفقیت به پایان رسیده و عملا وجه مورد نظر به حساب ما واریز شده است، در واقع این آخرین متدی خواهد بود که ما برای کار به آن نیاز داریم.
متد درخواست استعلام وجه bpInquiryRequest
اﻳﻦ ﻣﺘﺪ زﻣﺎﻧﻲ کارﺑﺮد دارد ﻛﻪ ﺑﻪ ﻫﺮ دﻟﻴﻠﻲ از ﻧﺘﻴﺠﻪ ﻣﻘﺪار ﺑﺎزﮔﺸﺘﻲ bpVerifyRequest ﻣﻄﻠﻊ ﻧﮕﺮدید. در اﻳﻦ ﺣﺎﻟﺖ ﺑﺮای آﮔﺎﻫﻲ از نتیجه ﺗﺮاﻛﻨﺶ می ﺗﻮاﻧید در هر زﻣﺎﻧﻲ، اﻳﻦ ﻣﺘﺪ را ﻓﺮاﺧﻮاﻧﻲ ﻧﻤﺎید. (اﺳﺘﻌﻼم ﺗﺮاﻛﻨﺶ)
ﭘﺲ از ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ ﻣﺘﺪ، وﺿﻌﻴﺖ ﺗﺮاﻛﻨﺶ ﭘﺮداﺧﺖ ﺑﺮای شما ارسال ﺧﻮاﻫﺪ ﺷﺪ.
برای استفاده از این متد می بایست پارامترهای زیر را به این متد ارائه دهید.
ردﻳﻒ |
ﻧﺎم ﭘﺎراﻣﺘﺮ |
ﻣﺜﺎل |
توضیح |
ﻧﻮع |
1 |
terminalId |
1234 |
ﺷﻤﺎره ﭘﺎﻳﺎﻧﻪ ﭘﺬﻳﺮﻧﺪه |
long |
2 |
userName |
******* |
ﻧﺎم ﻛﺎرﺑﺮی ﭘﺬﻳﺮﻧﺪه |
string |
3 |
userPassword |
****** |
ﻛﻠﻤﻪ ﻋﺒﻮر ﭘﺬﻳﺮﻧﺪه |
string |
4 |
orderId |
10 |
ﺷﻤﺎره درﺧﻮاﺳﺖ ( پرداخت) |
long |
5 |
saleOrderId |
10 (همان orderId می باشد) |
ﺷﻤﺎره درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ |
long |
6 |
SaleReferenceId |
5142510 |
ﻛﺪ ﻣﺮﺟﻊ ﺗﺮاﻛﻨﺶ ﺧﺮﻳﺪ |
long |
ﻣﻘﺪار ﺑﺎزگشتی این ﻣﺘﺪ ﻳک رﺷﺘﻪ است که حاوی ﻛﺪ ﭘﺎﺳﺦ می ﺑﺎﺷﺪ.
این متد نیز به صورت زیر است.
public string InquiryRequest(long orderId, long saleOrderId, long saleReferenceId)
{
try
{
MellatWebService.PaymentGatewayImplService WebService = new MellatWebService.PaymentGatewayImplService();
return WebService.bpInquiryRequest(terminalId, userName, password, orderId, saleOrderId, saleReferenceId);
}
catch (Exception Error)
{
throw new Exception(Error.Message);
}
}
هرگاه توسط bpVerifyRequest نتوانستید وضعیت یک تراکنش را بررسی کنید، می توانید از این متد کمک بگیرید.
یک متد دیگر وجود دارد که برای برگرداندن مبالغ واریز شده به حساب شما و یا لغو یک تراکنش می باشد، در صورتی که شما نتوانستید از وضعیت پرداخت توسط کاربر مطلع شوید و میخواهید عملیات را لغو کنید تا کاربر بدون هیچ مشکلی بتواند مجددا عملیات را انجام دهد، می بایست از متد زیر استفاده کنید.
متد درخواست برگشت وجه bpReversalRequest
اﻳﻦ ﻣﺘﺪ زﻣﺎﻧﻲ ﻛﺎرﺑﺮد می یابد که شما به هر دلیلی از نتیجه متد تایید تراکنش bpVerifyRequest و نیز متد اﺳﺘﻌﻼم ﺗﺮاﻛﻨﺶ bpInquiryRequest مطلع نگردید. در این صورت شما به دلیل روشن نبودن وضعیت پرداخت، ترجیح می دهید کالا و یا سرویس خود را به مشتری تحویل ندهید و همچنین از بانک درخواست کنید تا اگر این کاربر مبلغی را به حساب شما واریز کرده است، آن را به حسابش بازگرداند.
حداکثر زمان Reverse برای یک تراکنش تا پایان روز جاری می باشد.
با این توجه به این قانون حداقل شما یاد بگیرید هیچگاه در ساعت های پایان روز از هیچ درگاه پرداختی استفاده نکنید!
ردﻳﻒ |
ﻧﺎم ﭘﺎراﻣﺘﺮ |
ﻣﺜﺎل |
توضیح |
ﻧﻮع |
1 |
terminalId |
1234 |
ﺷﻤﺎره ﭘﺎﻳﺎﻧﻪ ﭘﺬﻳﺮﻧﺪه |
long |
2 |
userName |
******* |
ﻧﺎم ﻛﺎرﺑﺮی ﭘﺬﻳﺮﻧﺪه |
string |
3 |
userPassword |
****** |
ﻛﻠﻤﻪ ﻋﺒﻮر ﭘﺬﻳﺮﻧﺪه |
string |
4 |
orderId |
10 |
ﺷﻤﺎره درﺧﻮاﺳﺖ ( پرداخت) |
long |
5 |
saleOrderId |
10 (همان orderId می باشد) |
ﺷﻤﺎره درﺧﻮاﺳﺖ ﭘﺮداﺧﺖ |
long |
6 |
SaleReferenceId |
5142510 |
ﻛﺪ ﻣﺮﺟﻊ ﺗﺮاﻛﻨﺶ ﺧﺮﻳﺪ |
long |
ﻣﻘﺪار ﺑﺎزﮔﺸﺘﻲ اﻳﻦ ﻣﺘﺪ یک رﺷﺘﻪ اﺳﺖ ﻛﻪ ﺣﺎوی ﻛﺪ ﭘﺎﺳﺦ می ﺑﺎﺷﺪ. در صورتی که این متد مقدار صفر برگرداند، بدین معنا خواهد بود که عملیات به درستی لغو شده است. در غیر این صورت باید خطای صورت گرفته را بررسی کنید.
پیاده سازی این متد به صورت زیر خواهد بود:
public string bpReversalRequest(long orderId, long saleOrderId, long saleReferenceId)
{
try
{
MellatWebService.PaymentGatewayImplService WebService = new MellatWebService.PaymentGatewayImplService();
return WebService.bpReversalRequest(terminalId, userName, password, orderId, saleOrderId, saleReferenceId);
}
catch (Exception error)
{
throw new Exception(error.Message); ;
}
}
حال تمام متدهای اصلی درگاه پرداخت بانک را پیاده سازی کردیم، مجددا به درون PaymentController باز می گردیم و در Action مربوط به BankCallback کدهای خود را کامل می کنیم.
ابتدا یک متغییر boolean برای نگهداری وضعیت تراکنش ایجاد می کنیم و مقدار پیش فرض آن را false قرار می دهیم در صورتی که برنامه ما خطایی اتفاق رخ دهد مقدار این متغییر را برابر true قرار می دهیم تا در پایان با بررسی مقدار این متغییر اطلاع پیدا کنیم که آیا باید تراکنش را توسط متد bpReversalRequest لغو کنیم و یا خیر.
دو متغییر saleReferenceId و saleOrderId را نیز برای نگهداری شماره تراکنش ایجاد می کنیم، متغییر resultCode_bpPayRequest برای ذخیره وضعیت تراکنش مورد استفاده قرار خواهد گرفت.
در نهایت یک شی از کلاس BankMellatImplement برای فراخوانی متدهای درگاه پرداخت بانک ملت ایجاد کرده ایم.
[HttpPost]
public ActionResult BankCallback()
{
bool Run_bpReversalRequest = false;
long saleReferenceId = -999;
long saleOrderId = -999;
string resultCode_bpPayRequest;
BankMellatImplement bankMellatImplement = new BankMellatImplement();
try
{
saleReferenceId = long.Parse(Request.Params["SaleReferenceId"].ToString());
saleOrderId = long.Parse(Request.Params["SaleOrderId"].ToString());
resultCode_bpPayRequest = Request.Params["ResCode"].ToString();
همانطور که مشاهده می کنید برای خواندن اطلاعات POST شده توسط درگاه پرداخت بانک ملت، از کد [""]Request.Params استفاده کرده ایم.
کدهای زیر را به ترتیب در بدنه try در انتهای کدهای قبلی اضافه می کنیم:
سه متغییر تعریف می کنیم تا بتوانیم نتیجه نتیجه هر یک از متدهای درگاه پرداخت بانک ملت را بررسی کنیم.
مقدار پیش فرض این سه متغییر را عددی در نظر گرفتیم که این اعداد در لیست خطاهای بانک ملت نیست.
//Result Code
string resultCode_bpinquiryRequest = "-9999";
string resultCode_bpSettleRequest = "-9999";
string resultCode_bpVerifyRequest = "-9999";
مقدار ارسال شده از سوی بانک را بررسی می کنیم تا از نتیجه تراکنش اطلاع پیدا کنیم. در صورتی که عملیات موفقیت آمیز بوده باشد کار را باید ادامه دهیم در غیر این صورت باید به کاربر پیام خطا را نمایش دهیم.
if (int.Parse(resultCode_bpPayRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
{
//Success
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpPayRequest)).Replace("_", " ");
Run_bpReversalRequest = true;
}
در قسمت Success کدهای زیر را اضافه کنید.
ابتدا توسط متد VerifyRequest نتیجه را تراکنش را برای حصول اطمینان از بانک ملت دریافت می کنیم،
اگر متد VerifyRequest نتوانست نتیجه ای را برای ما برگرداند پس باید از متد InquiryRequest استفاده کنیم.
resultCode_bpVerifyRequest = bankMellatImplement.VerifyRequest(saleOrderId, saleOrderId, saleReferenceId);
if (string.IsNullOrEmpty(resultCode_bpVerifyRequest))
{
#region Inquiry Request
resultCode_bpinquiryRequest = bankMellatImplement.InquiryRequest(saleOrderId, saleOrderId, saleReferenceId);
if (int.Parse(resultCode_bpinquiryRequest) != (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
{
//the transactrion faild
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpinquiryRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
#endregion
}
حال با استفاده از دو متد VerifyRequest و InquiryRequest باید از وضعیت تراکنش صورت گرفته اطلاع پیدا کرده باشیم. اگر هر یک از این دو متد مقدار صفر را برای ما برگدانده باشند در نتیجه کاربر با موفقیت مبلغ مورد نظر را به حساب ما واریز کرده است، در غیر این صورت خطایی رخ داده است که باید خطای مربوطه را به کاربر نمایش دهیم.
if ((int.Parse(resultCode_bpVerifyRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
||
(int.Parse(resultCode_bpinquiryRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ))
{
//Success
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpVerifyRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
در نهایت در قسمت Success باید به بانک اطلاع بدهیم تا مبلغ واریز شده را به حساب ما انتقال دهد، برای اینکار باید از متد SettleRequest استفاده کنیم:
#region SettleRequest
resultCode_bpSettleRequest = bankMellatImplement.SettleRequest(saleOrderId, saleOrderId, saleReferenceId);
if ((int.Parse(resultCode_bpSettleRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
|| (int.Parse(resultCode_bpSettleRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_Settle_ﺷﺪه_اﺳﺖ))
{
TempData["Message"] = "تراکنش شما با موفقیت انجام شد ";
TempData["Message"] += " لطفا شماره پیگیری را یادداشت نمایید" + saleReferenceId;
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpSettleRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
// Save information to Database...
#endregion
همانطور که مشاهده می کنید بعد از اجرای متد SettleRequest نیز، خروجی تابع را بررسی کرده ایم، اگر خروجی این تابع برابر صفر باشد شما می توانید کالا و یا خدمات مورد نظر را به کاربر خود ارائه دهید و همچنین اطلاعات مورد نیاز را در پایگاه داده خود ذخیره و در نهایت شا پیگیری تراکنش را در پیامی برای کاربر نمایش دهید.
اما اگر در این مرحله نیز نتوانیم مبلغ را به حساب خود انتقال دهیم باید خطای مورد نظر را به کاربر نمایش دهیم.
همانطور که در کدها بالا مشاهده کردید، در هر بخش اگر خطایی رخ دهد آن خطا را در TempData ذخیره می کنیم و همچنین مقدار متغییر Run_bpReversalRequest را برابر با true قرار می دهیم تا در نهایت در بخش finally کد خود کل عملیات را لغو کنیم.
در نهایت کل کد این Action به صورت زیر خواهد بود
[HttpPost]
public ActionResult BankCallback()
{
bool Run_bpReversalRequest = false;
long saleReferenceId = -999;
long saleOrderId = -999;
string resultCode_bpPayRequest;
BankMellatImplement bankMellatImplement = new BankMellatImplement();
try
{
saleReferenceId = long.Parse(Request.Params["SaleReferenceId"].ToString());
saleOrderId = long.Parse(Request.Params["SaleOrderId"].ToString());
resultCode_bpPayRequest = Request.Params["ResCode"].ToString();
//Result Code
string resultCode_bpinquiryRequest = "-9999";
string resultCode_bpSettleRequest = "-9999";
string resultCode_bpVerifyRequest = "-9999";
if (int.Parse(resultCode_bpPayRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
{
#region Success
resultCode_bpVerifyRequest = bankMellatImplement.VerifyRequest(saleOrderId, saleOrderId, saleReferenceId);
if (string.IsNullOrEmpty(resultCode_bpVerifyRequest))
{
#region Inquiry Request
resultCode_bpinquiryRequest = bankMellatImplement.InquiryRequest(saleOrderId, saleOrderId, saleReferenceId);
if (int.Parse(resultCode_bpinquiryRequest) != (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
{
//the transactrion faild
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpinquiryRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
#endregion
}
if ((int.Parse(resultCode_bpVerifyRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
||
(int.Parse(resultCode_bpinquiryRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ))
{
#region SettleRequest
resultCode_bpSettleRequest = bankMellatImplement.SettleRequest(saleOrderId, saleOrderId, saleReferenceId);
if ((int.Parse(resultCode_bpSettleRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_ﺑﺎ_ﻣﻮﻓﻘﻴﺖ_اﻧﺠﺎم_ﺷﺪ)
|| (int.Parse(resultCode_bpSettleRequest) == (int)BankMellatImplement.MellatBankReturnCode.ﺗﺮاﻛﻨﺶ_Settle_ﺷﺪه_اﺳﺖ))
{
TempData["Message"] = "تراکنش شما با موفقیت انجام شد ";
TempData["Message"] += " لطفا شماره پیگیری را یادداشت نمایید" + saleReferenceId;
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpSettleRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
// Save information to Database...
#endregion
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpVerifyRequest.Replace("_", " ")));
Run_bpReversalRequest = true;
}
#endregion
}
else
{
TempData["Message"] = bankMellatImplement.DesribtionStatusCode(int.Parse(resultCode_bpPayRequest)).Replace("_", " ");
Run_bpReversalRequest = true;
}
return RedirectToAction("ShowError", "Payment");
}
catch (Exception Error)
{
TempData["Message"] = "متاسفانه خطایی رخ داده است، لطفا مجددا عملیات خود را انجام دهید در صورت تکرار این مشکل را به بخش پشتیبانی اطلاع دهید";
// Save and send Error for admin user
Run_bpReversalRequest = true;
return RedirectToAction("ShowError", "Payment");
}
finally
{
if (Run_bpReversalRequest) //ReversalRequest
{
if (saleOrderId != -999 && saleReferenceId != -999)
bankMellatImplement.bpReversalRequest(saleOrderId, saleOrderId, saleReferenceId);
// Save information to Database...
}
}
}
شما می توانید کل کد این پروژه را از بخش زیر دانلود کنید
دانلود پروژه درگاه پرداخت بانک ملت با ASP.NET MVC
توضیحات: برنامه نویسی درگاه بانک ملت
نظرات (۱۱)
با عرض سلام
بله حتما، لینک پروژه را در اولین فرصت نیز اصلاح خواهیم کرد.
باتشکر
و خسته نباشید
آقای شیدایی واقعا کارتون خیلی درسته
خیلی ممنون از مطالب و آموزش های مفیدتون , برای من با چند سال سابقه برنامه نویسی خیلی از مطالبتون مفید بود
با عرض سلام
ما نیز بسیار خوشحال هستیم که توانسته ایم نظر دوستان عزیزی همچون شما را جذب کنیم.
موفق باشید
با عرض سلام
یک بار کد خطا را با مستندات بانک بررسی کنید و مطمئن شوید کدی که به شما اعلام می شود کد خطای IP است.
باتشکر
با عرض سلام
بله در حال تکمیل دوره های آموزشی PHP هستیم
موفق باشید
با عرض سلام
از روش های زیر استفاده کنید و ببینید می توانید نتیجه بگیرید.
web config پروزه را به صورت زیر تنظیم کنید
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="20" />
<authentication mode="Forms">
<forms name=".SAMPLESITEAUTH" loginUrl="~/Login.aspx" protection="All" timeout="20" slidingExpiration="true" path="/" cookieless="UseCookies"></forms>
</authentication>
</system.web>
همچنین می توانید برای هر دامنه ای که قرار است سایت شما به آن متصل شود به صورت زیر اطلاعات آن را ثبت کنید. اگر دو دامنه ی بانک و سایت خود را می خواهید ثبت کنید باید از کد زیر دوبار استفاده کنید.
<forms
name="name"
loginUrl="URL"
defaultUrl="URL"
domain=".example.com">
</forms>
همچنین می توانید در web config خود مقدار Machine Key را نیز تنظیم کنید.
و آخرین روش اینکه می توانید اطلاعات session خود را به صورت cookie ذخیره کنید و آنها را در مواقع نیاز بخوانید.
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
/* only apply session cookie persistence to requests requiring session information*/
#region session cookie /*check and set data*/
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState )
{
/* Ensure ASP.NET Session Cookies are accessible throughout the subdomains.*/
if (Request.Cookies["ASP.NET_SessionId"] != null && Session != null && Session.SessionID != null)
{
Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID;
Response.Cookies["ASP.NET_SessionId"].Domain = ".know24.net"; /* the full stop prefix denotes all sub domains*/
Response.Cookies["ASP.NET_SessionId"].Path = "/"; /*default session cookie path root */
}
}
#endregion
}
موفق باشید
باعرض سلام
یه سوال دیگه راجع به صفحه BankCallback دارم و اونم اینه که من طبق آموزش شما یه اکشن مشابه اکشن شما در کنترلر نوشتم و برای این اکشن یه View ایجاد کردم،اما سوالم اینه چگونه تو View می تونم به پارامترهای ارسالی از بانک دسترسی داشته باشم و اونارو نشون بدم.تو آموزش شما راجع به View مربوط به BankCallback هیچ حرفی نزدین.
مشتاقانه منتظر پاسخ شما هستم.
تشکر و سپاس.
با عرض سلام
در قسمت اخر لینکی برای دانلود پروژه پیدا نکردم ممنون میشم بررسی کنید