YNICTE/FO/Controllers/FOBaseController.cs

1033 lines
71 KiB
C#
Raw Normal View History

2020-10-12 14:39:23 +09:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using NP.Model;
using NP.Base.Auth;
namespace NP.FO.Controllers
{
public class FOBaseController : NP.Base.BaseController
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Request.AcceptTypes == null && !Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/") && !Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/PAYVBANKMONEY"))
{
if ("Y".Equals(GetConfig("isdebug")))
{
var rtn = System.Threading.Tasks.Task.Run(async () => Console.WriteLine(await Dao.Log(
new NP.Model.PageLog() { uno = SUserInfo.UserNo, uip = GetUserIP(), logsite = 1, loginfo = "fobaseempry: "+Request.Url.ToString() + Request.Params.ToString() })));
}
filterContext.Result = new EmptyResult();
}
else
{
if (Request.IsSecureConnection &&
(Request.Url.AbsolutePath.ToUpper().StartsWith("/CROOM/") ||
Request.Url.AbsolutePath.ToUpper() == "/CROOM" ||
Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/")) &&
Request.Url.AbsolutePath.ToUpper() != "/CDMS/HTTPS")
{
//Response.Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery, true);
filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
}
else if ("Y".Equals(GetConfig("usessl")) &&
!Request.IsSecureConnection &&
!Request.Url.AbsolutePath.StartsWith("/Open/") &&
!(Request.Url.AbsolutePath.ToUpper().StartsWith("/CROOM/") || Request.Url.AbsolutePath.ToUpper() == "/CROOM") &&
!(Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/") || Request.Url.AbsolutePath.ToUpper() == "/CDMS") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/ERROR"))
{
filterContext.Result = new RedirectResult("https://" + Request.Url.Host + Request.Url.PathAndQuery);
}
//여기서 로그 남겨?
base.OnActionExecuting(filterContext);
var cm = new Model.MenuPage() { };
//if (Request.Url.AbsolutePath.ToUpper().StartsWith("/DIVISION/A"))
//{
// cm = GetMENUPAGES.Where(w => (w.usertype == 0 || w.usertype == SUserInfo.UserType) && w.pageurl.Equals(Request.Url.PathAndQuery)).OrderByDescending(od => od.pdepth).FirstOrDefault();
//}
//else
//{
cm = GetMENUPAGES.Where(w => (w.usertype == 0 || w.usertype == SUserInfo.UserType) && (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault();
//}
if (cm != null || Request.Url.AbsolutePath.ToUpper().Equals("/HOME/HTML")
|| Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/BANEMAIL")
|| Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/LOGOUT")
|| Request.Url.AbsolutePath.ToUpper().StartsWith("/BOARD/"))
{
ViewBag.Title = (cm ?? new Model.MenuPage()).pagename;
ViewBag.MenuPage = (cm ?? new Model.MenuPage());
ViewBag.MenuPageNo = (cm ?? new Model.MenuPage()).pno;
ViewBag.Menus = GetMENUPAGES.Where(w => w.usertype == 0 || w.usertype == base.SUserInfo.UserType).ToList();
if (!Request.IsAjaxRequest())
{
ViewBag.TopMenu = GetGnbTop(SUserInfo.UserNo);
ViewBag.TopMenu2 = SUserInfo.UserNo < 1 ? GNBTOP2 : GNBTOP2AUTH;
ViewBag.TopMenu3 = SUserInfo.UserNo < 1 ? GNBTOP3 : GNBTOP3AUTH;
ViewBag.TopMenuM = SUserInfo.UserNo < 1 ? GNBTOPM : GNBTOPMAUTH;
var pno = GetInt(Request["menupageno"]);
if (pno > 0)
{
ViewBag.MenuPage = GetMENUPAGES.Where(w => w.pno == pno).FirstOrDefault();
ViewBag.MenuPageNo = ViewBag.MenuPage.pno;
ViewBag.Title = ViewBag.MenuPage.pagename;
}
}
//접속로그
if (Request.Url.AbsolutePath.ToUpper() != "/ACCOUNT/INDEX")
{
var rtn = System.Threading.Tasks.Task.Run(async () => Console.WriteLine(await Dao.Log(
new NP.Model.PageLog() { uno = SUserInfo.UserNo, uip = GetUserIP(), logsite = 1, pno = cm.pno < 1 ? (int?)null : cm.pno, loginfo = (cm.ppagename ?? "") + " > " + cm.pagename })));
}
}
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/PLAY")
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CONTENTS")
)
{
filterContext.Result = new RedirectResult("/Account/Index?fobase=xx&ru=" + Request.Url.AbsolutePath, true);
//학습창 등이 안뜨고 로그인창으로 갈 경우 여기에 urlreferrer suserinfo, viewbag.ssuser~, GetMENUPAGES 등의 값들을 로깅해본다.
//~~
//Response.Redirect("/Account/Index?ru=" + Request.Url.AbsolutePath, true);
}
else if (!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/HOME/POPUP") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/ERROR") &&
Request.Url.AbsolutePath.ToUpper() != "/ACCOUNT/ADMINEE")
{
filterContext.Result = new RedirectResult("/Account/Error");
}
//if (Request.IsSecureConnection &&
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/") &&
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/"))
//{
// //Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery);
// filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
//}
else if (GetMENUPAGES.Where(w => (w.pageurl ?? "").ToUpper().Equals(Request.Url.AbsolutePath.ToUpper())).OrderByDescending(od => od.pdepth).FirstOrDefault() != null
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CDMS/PLAY")
//&& !Request.Url.AbsolutePath.ToUpper().StartsWith("/CONTENTS")
)
{
filterContext.Result = new RedirectResult("/Account/Index?fobase=1&ru=" + Request.Url.AbsolutePath, true);
SetError("fobaseerror:path=" + Request.Url.AbsolutePath + "&urlrefer=" + Request.UrlReferrer + "&userinfo=" + SUserInfo.UserNo + "&ssuer=" + ViewBag.SSUserNo);
//학습창 등이 안뜨고 로그인창으로 갈 경우 여기에 urlreferrer suserinfo, viewbag.ssuser~, GetMENUPAGES 등의 값들을 로깅해본다.
//~~
//Response.Redirect("/Account/Index?ru=" + Request.Url.AbsolutePath, true);
}
else if (!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/HOME/POPUP") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/ERROR") &&
!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/CERTOK3") &&
2020-10-12 14:39:23 +09:00
Request.Url.AbsolutePath.ToUpper() != "/ACCOUNT/ADMINEE")
{
filterContext.Result = new RedirectResult("/Account/Error");
}
//if (Request.IsSecureConnection &&
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/ACCOUNT/") &&
//!Request.Url.AbsolutePath.ToUpper().StartsWith("/OPEN/"))
//{
// //Redirect("http://" + Request.Url.Host + Request.Url.PathAndQuery);
// filterContext.Result = new RedirectResult("http://" + Request.Url.Host + Request.Url.PathAndQuery);
//}
}
}
private static IList<NP.Model.Popup> POPUPS { get; set; }
public IList<NP.Model.Popup> GetPOPUPS
{
get
{
if (POPUPS == null)
{
POPUPS = Dao.Get<Popup>("mm.popups", new System.Collections.Hashtable() { { "isopen", 1} });
POPUP = null;
}
return POPUPS;
}
set
{
POPUPS = value;
}
}
private static String POPUP { get; set; }
public String GetPOPUP
{
get
{
if (POPUP == null)
{
var popups = GetPOPUPS;
POPUP = "";
if (GetPOPUPS.Count() > 0)
{
POPUP = string.Join("nptechpopuplistseparator", GetPOPUPS.Select(s => string.Format("{0}nptechpopupseparator{1}nptechpopupseparator{2}nptechpopupseparator{3}nptechpopupseparator{4}nptechpopupseparator{5}nptechpopupseparator{6}nptechpopupseparator{7}nptechpopupseparator{8}"
, s.pno, s.ptitle, "", s.toppx, s.leftpx, s.pwidth, s.pheight+37, s.purl, s.zindex + 100)));
}
}
return POPUP;
}
set
{
POPUP = value;
}
}
private static IList<NP.Model.Banner> BANNERS { get; set; }
public IList<NP.Model.Banner> GetBANNERS
{
get
{
if (BANNERS == null)
{
BANNERS = Dao.Get<Banner>("mm.banners", new System.Collections.Hashtable() { { "isopen", 1 } });
BANNER = null;
BANNERCROOM = null;
}
return BANNERS;
}
set
{
BANNERS = value;
}
}
private static String BANNER { get; set; }
public String GetBANNER
{
get
{
if (BANNER == null)
{
//var banners = GetBANNERS;
BANNER = "";
if (GetBANNERS.Where(w => w.ismain == 0).Count() > 0)
{
BANNER = string.Join("", GetBANNERS.Where(w => w.ismain == 0).Select(s =>
string.Format("<div {2} class=\"mpgsdCont\" style=\"{3}background:url({0})no-repeat left center;\"><img src=\"{1}\" alt=\"\" /></div>",
(new BaseModel()).rootfolder + s.fileurl,
(new BaseModel()).rootfolder + s.fileurl2,
string.IsNullOrEmpty(s.burl)?"": s.burl.ToLower().StartsWith("http")? ("onclick=\"window.open('" + s.burl + "')\"") : ("onclick=\"location.href='" + s.burl + "'\""),
string.IsNullOrEmpty(s.burl)?"":"cursor:pointer;"
)));
}
}
return BANNER;
}
set
{
BANNER = value;
}
}
private static String BANNERCROOM { get; set; }
public String GetBANNERCROOM
{
get
{
if (BANNERCROOM == null)
{
//var banners = GetBANNERS;
BANNERCROOM = "";
if (GetBANNERS.Where(w => w.ismain == 1).Count() > 0)
{
//BANNERCROOM = string.Join("", GetBANNERS.Where(w => w.ismain == 1).Select(s =>
// string.Format("<div class=\"mpgsdCont\" style=\"background:url({0})no-repeat left center;\"><img src=\"{1}\" alt=\"\" /></div>"
// , (new BaseModel()).rootfolder + s.fileurl, (new BaseModel()).rootfolder + s.fileurl2)));
}
}
return BANNERCROOM;
}
set
{
BANNERCROOM = value;
}
}
private static IList<NP.Model.MenuPage> MENUPAGES { get; set; }
public IList<NP.Model.MenuPage> GetMENUPAGES
{
get
{
if (MENUPAGES == null)
{
MENUPAGES = Dao.Get<NP.Model.MenuPage>("mm.pages", new System.Collections.Hashtable() { { "isopen", 9 } });
GNBTOP = null;
}
return MENUPAGES.ToList();
}
set
{
MENUPAGES = value;
}
}
private static String GNBTOP { get; set; }
private static String GNBTOPAUTH { get; set; }
private static String GNBTOP2 { get; set; }
private static String GNBTOP2AUTH { get; set; }
private static String GNBTOP3 { get; set; }
private static String GNBTOP3AUTH { get; set; }
private static String GNBTOPM { get; set; }
private static String GNBTOPMAUTH { get; set; }
public String GetGnbTop(int usertype)
{
if (GNBTOP == null)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder("");
System.Text.StringBuilder sbauth = new System.Text.StringBuilder("");
System.Text.StringBuilder sb2 = new System.Text.StringBuilder("");
System.Text.StringBuilder sb2auth = new System.Text.StringBuilder("");
System.Text.StringBuilder sbm = new System.Text.StringBuilder("");
System.Text.StringBuilder sbmauth = new System.Text.StringBuilder("");
var tops = "";
var topsauth = "";
2020-11-04 09:26:33 +09:00
sbmauth.Append("<li><a class=\"mlink\" href=\"/My/Index\">Home</a></li>");
2020-10-12 14:39:23 +09:00
foreach (var m in GetMENUPAGES.Where(w => w.pdepth == 0 && w.isopen == 1))
{
var mp = m.pagetype == 0 ? GetMENUPAGES.Where(w => w.pagetype > 0 && (w.m0 == m.pno || w.m1 == m.pno || w.m2 == m.pno || w.m3 == m.pno || w.m4 == m.pno)).FirstOrDefault() ?? new Model.MenuPage() { } : m;
sbauth.Append(string.Format("<li class=\"topmenu{5}\"><a href=\"#\" onclick=\"gomenu({0},{1}, '{2}', this)\" data-refcode=\"{3}\">{4}</a>", mp.pno, mp.pagetype, mp.pageurl ?? "", m.refcode??"", m.pagename, m.pno));
topsauth += string.Format("<li class=\"topmenu{1}\"><h5>{0}</h5></li>", m.pagename, m.pno);
if (m.usertype == 0)
{
sb.Append(string.Format("<li><a href=\"#\" onclick=\"gomenu({0},{1}, '{2}', this)\" data-refcode=\"{3}\">{4}</a>", mp.pno, mp.pagetype, mp.pageurl ?? "", m.refcode ?? "", m.pagename));
tops += string.Format("<li><h5>{0}</h5></li>", m.pagename);
}
sb2.Append("<li><ul>");
sb2auth.Append("<li><ul>");
foreach (var m2 in GetMENUPAGES.Where(w => w.pdepth == 1 && w.isopen == 1 && w.ppno == m.pno && w.pagetype != 4))
{
sb2auth.Append(string.Format("<li class=\"topsubmenu{4}\"><a href=\"#\" onclick=\"gomenu({0}, {1}, '{2}', this)\">{3}</a></li>", m2.pno, m2.pagetype, m2.pageurl ?? "", m2.pagename, m2.pno));
if (m.usertype == 0 && m2.usertype == 0)
{
sb2.Append(string.Format("<li class=\"topsubmenu{4}\"><a href=\"#\" onclick=\"gomenu({0}, {1}, '{2}', this)\">{3}</a></li>", m2.pno, m2.pagetype, m2.pageurl ?? "", m2.pagename, m2.pno));
}
}
sb2.Append("</ul></li>");
sb2auth.Append("</ul></li>");
sbmauth.Append(string.Format("<li class=\"topmenu{1}" + (m.pno == 16 ? "style=\"display:none;\"" : string.Empty) + "\"><a>{0}</a><span></span><ul>", m.pagename, m.pno));
2020-10-12 14:39:23 +09:00
if (m.usertype == 0)
{
sbm.Append(string.Format("<li class=\"topmenu{1}" + (m.pno == 16 ? "style=\"display:none;\"" : string.Empty) + "\"><a>{0}</a><span></span><ul>", m.pagename, m.pno));
2020-10-12 14:39:23 +09:00
}
foreach (var m2 in GetMENUPAGES.Where(w => w.pdepth == 1 && w.isopen == 1 && w.ppno == m.pno && w.pagetype != 4))
{
sbmauth.Append(string.Format("<li class=\"topsubmenu{4}\"><a href=\"#\" onclick=\"gomenu({0}, {1}, '{2}', this)\">{3}</a></li>", m2.pno, m2.pagetype, m2.pageurl ?? "", m2.pagename, m2.pno));
if (m.usertype == 0)
{
sbm.Append(string.Format("<li class=\"topsubmenu{4}\"><a href=\"#\" onclick=\"gomenu({0}, {1}, '{2}', this)\">{3}</a></li>", m2.pno, m2.pagetype, m2.pageurl ?? "", m2.pagename, m2.pno));
}
}
sbmauth.Append("</ul></li>");
if (m.usertype == 0)
{
sbm.Append("</ul></li>");
}
}
GNBTOP = sb.ToString();
GNBTOPAUTH = sbauth.ToString();
GNBTOP2 = tops;
GNBTOP2AUTH = topsauth;
GNBTOP3 = sb2.ToString();
GNBTOP3AUTH = sb2auth.ToString();
GNBTOPM = sbm.ToString();
GNBTOPMAUTH = sbmauth.ToString();
}
return usertype < 1 ? GNBTOP : GNBTOPAUTH;
}
protected void ResetMenu()
{
MENUPAGES = null;
}
protected void ResetPopup()
{
POPUPS = null;
}
protected void ResetBanner()
{
BANNERS = null;
}
private System.Security.Authentication.SslProtocols ExtractSslProtocol(System.IO.Stream stream)
{
if (stream is null) return System.Security.Authentication.SslProtocols.None;
System.Reflection.BindingFlags bindingFlags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;
System.IO.Stream metaStream = stream;
if (stream.GetType().BaseType == typeof(System.IO.Compression.GZipStream))
{
metaStream = (stream as System.IO.Compression.GZipStream).BaseStream;
}
else if (stream.GetType().BaseType == typeof(System.IO.Compression.DeflateStream))
{
metaStream = (stream as System.IO.Compression.DeflateStream).BaseStream;
}
var connection = metaStream.GetType().GetProperty("Connection", bindingFlags).GetValue(metaStream);
if (!(bool)connection.GetType().GetProperty("UsingSecureStream", bindingFlags).GetValue(connection))
{
// Not a Https connection
return System.Security.Authentication.SslProtocols.None;
}
var tlsStream = connection.GetType().GetProperty("NetworkStream", bindingFlags).GetValue(connection);
var tlsState = tlsStream.GetType().GetField("m_Worker", bindingFlags).GetValue(tlsStream);
return (System.Security.Authentication.SslProtocols)tlsState.GetType().GetProperty("SslProtocol", bindingFlags).GetValue(tlsState);
}
protected void PayAll(VMPay vm)
{
//ViewBag.IsOldTLS = false;
//try
//{
// if (Request.IsSecureConnection)
// {
// System.Net.Security.SslStream sss = new System.Net.Security.SslStream(Request.UrlReferrer.);
// Console.WriteLine(sss.SslProtocol);
// //if (ssp.SslProtocol != System.Security.Authentication.SslProtocols.Tls12)
// //{
// // ViewBag.IsOldTLS = true;
// //}
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine(ex.Message);
//}
vm.PayItems = new List<PayItem>() { };
if (vm.ispaycart)
{
//장바구니에서 결제 진입
vm.PayItems = Dao.Get<PayItem>("pay.payitems.forcartpay", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } });
vm.User = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).First();
}
else if (vm.ispaycert && vm.payno > 0)
{
//자격증강좌는 신청 시점에는 금액이 0이므로 결제시점에 현재가격으로 갱신해준다.
vm.PayItems = Dao.Get<PayItem>("pay.payitems.forcertpay", new System.Collections.Hashtable() { { "payno", vm.payno }, { "userno", SUserInfo.UserNo} });
vm.User = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).First();
}
else if (vm.ispayexam)
{
vm.PayItems = Dao.Get<PayItem>("pay.payitems.forexampay", new System.Collections.Hashtable() { { "exno", vm.exno }, { "userno", SUserInfo.UserNo } });
vm.User = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).First();
}
else
{
//구매상품데이터를 추출한다.
foreach (var d in vm.items.Split(';'))
{
var dd = d.Split(':');
vm.PayItems.Add(new PayItem() { ptype = GetInt(dd[0]), itemno = GetLong(dd[1]), pcnt = GetInt(dd[2]), userno = vm.isgroup == 0 ? SUserInfo.UserNo : GetInt(dd[3]), isrebate = GetInt(dd[4]), fgno = dd[5] == "0" ? (Int64?)null : GetLong(dd[5]) });
}
var pis = Dao.Get<PayItem>("pay.payitems.forpay", new System.Collections.Hashtable(){
{"userno", SUserInfo.UserNo },
{ "cmnos0", string.Join(",", vm.PayItems.Where(w=>w.ptype == 0).Select(s=>s.itemno).Distinct()) },
{"bknos", string.Join(",", vm.PayItems.Where(w=>w.ptype == 2).Select(s=>s.itemno)) }
});
vm.User = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).First();
foreach(var pi in vm.PayItems)
{
var item = pis.Where(w => w.ptype == pi.ptype && w.itemno == pi.itemno).First();
pi.days = item.days;
pi.itemname = item.itemname;
pi.orgamt = item.orgamt;
pi.discamt = item.discamt;
pi.payamt = item.payamt;
pi.cshape = item.cshape;
}
}
vm.pginfo = GetConfig("pginfo");
vm.pginfomobile = GetConfig("pginfomobile");
vm.signkey = ComputeHash(vm.pginfo.Split('|')[2]);
//vm.payitemname = Utf8ToEuckr();
vm.viewname5 = GetConfig("fronturl") + "/Course/PayClose";
vm.previewname = vm.previewname ?? "/My/Cart";
vm.deliveramt = GetInt(GetConfig("deliveramt"));
}
//private String Utf8ToEuckr(String s)
//{
// byte[] pbSource = System.Text.Encoding.UTF8.GetBytes(s);
// byte[] pbDest = System.Text.Encoding.Convert(
// System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding("euc-kr"), pbSource);
// pbSource = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("euc-kr"), System.Text.Encoding.UTF8, pbDest);
// char[] psUnicode = System.Text.UTF8Encoding.UTF8.GetChars(pbSource);
// return new string(psUnicode);
//}
protected ActionResult PayReturn(VMPay vm)
{
if (vm.payno > 0 && vm.absptype == 6)
{
//0원강좌 결제
vm.Pay = new Pay() { payno = vm.payno, ptype = vm.absptype, oid2 = "free" + vm.payno };
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
}
else
{
if (string.IsNullOrEmpty(Request["P_NOTI"]))
{
ViewBag.OffCode = OffCode;
System.Collections.Specialized.NameValueCollection parameters = Request.Params;
System.Collections.IEnumerator enumerator = parameters.GetEnumerator();
System.Text.StringBuilder sb = new System.Text.StringBuilder("paramMap : ");
while (enumerator.MoveNext())
{
string key = enumerator.Current.ToString();
sb.Append(string.Format("{0}={1}&", key, HttpUtility.UrlEncode(parameters[key])));
}
//#####################
// 인증이 성공일 경우만
//#####################
vm.Pay = new Pay() { payno = GetLong(parameters["orderNumber"].Substring(2)), uno = SUserInfo.UserNo, uip = GetUserIP() };
if ("0000".Equals(parameters["resultCode"]))
{
var pginfo = GetConfig("pginfo").Split('|');
//############################################
// 1.전문 필드 값 설정(***가맹점 개발수정***)
//############################################
String mid = parameters.Get("mid"); // 가맹점 ID 수신 받은 데이터로 설정
Int64 oid = GetLong(parameters["orderNumber"].Substring(2));//주문번호 np + payno
String signKey = pginfo[2]; // 가맹점에 제공된 키(이니라이트키) (가맹점 수정후 고정) !!!절대!! 전문 데이터로 설정금지
string timeTemp = "" + DateTime.UtcNow.Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds;
string[] artime = timeTemp.Split('.');
String timestamp = artime[0];
String charset = "UTF-8"; // 리턴형식[UTF-8,EUC-KR](가맹점 수정후 고정)
String format = "JSON"; // 리턴형식[XML,JSON,NVP](가맹점 수정후 고정)
String authToken = parameters.Get("authToken"); // 취소 요청 tid에 따라서 유동적(가맹점 수정후 고정)
String authUrl = parameters.Get("authUrl"); // 승인요청 API url(수신 받은 값으로 설정, 임의 세팅 금지)
String netCancel = parameters.Get("netCancelUrl"); // 망취소 API url(수신 받은 값으로 설정, 임의 세팅 금지)
String mKey = ComputeHash(signKey); // 가맹점 확인을 위한 signKey를 해시값으로 변경 (SHA-256방식 사용)
String merchantData = parameters.Get("merchantData"); // 가맹점 관리데이터 수신
//#####################
// 2.signature 생성
//#####################
String signParam = "authToken=" + @authToken + "&timestamp=" + timestamp;
String signature = ComputeHash(signParam);
//#####################
// 3.API 요청 전문 생성
//#####################
System.Collections.Generic.Dictionary<String, String> authMap = new System.Collections.Generic.Dictionary<String, String>();
authMap.Add("mid", mid); // 필수
authMap.Add("authToken", HttpUtility.UrlEncode(authToken)); // 필수 - 반드시 urlencode 해서 전달.
authMap.Add("timestamp", timestamp); // 필수
authMap.Add("signature", signature); // 필수
authMap.Add("charset", charset); // default=UTF-8
authMap.Add("format", format); // default=XML
authMap.Add("mkey", mKey); // default=XML
String cancelMsg = "결제오류|" + oid;
vm.Pay.payno = oid; //이거 확인 MOID?
try
{
//#####################
// 4.API 통신 시작
//#####################
String authResultString = "";
authResultString = processHTTP(authMap, authUrl);
//############################################################
//5.API 통신결과 처리(***가맹점 개발수정***)
//############################################################
String strReplace = authResultString.Replace(",", "&").Replace(":", "=").Replace("\"", "").Replace(" ", "").Replace("\n", "").Replace("}", "").Replace("{", "");
System.Collections.Generic.Dictionary<string, string> resultMap = parseStringToMap(strReplace); //문자열을 MAP형식으로 파싱
/************************* 결제보안 추가 START ****************************/
Dictionary<String, String> secureMap = new Dictionary<String, String>();
if (resultMap["resultCode"] == "R201")
{
vm.Pay.payresult = "1:결제완료";
//기결제 건(새로고침)
vm.Pay.oid2 = pginfo[4] + vm.Pay.payno;
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
return View("PayReturn", vm);
}
secureMap.Add("mid", mid); //mid
secureMap.Add("tstamp", timestamp); //timestemp
secureMap.Add("MOID", resultMap["MOID"]); //MOID
secureMap.Add("TotPrice", resultMap["TotPrice"]); //TotPrice
vm.Pay.pgkey = (resultMap.ContainsKey("tid") ? resultMap["tid"] : "null");
vm.Pay.ptype = "Card".Equals(resultMap.ContainsKey("payMethod") ? resultMap["payMethod"] : "") ? 1 : "DirectBank".Equals(resultMap.ContainsKey("payMethod") ? resultMap["payMethod"] : "") ? 2 : 3;
vm.Pay.payamt = GetInt(resultMap.ContainsKey("TotPrice") ? resultMap["TotPrice"] : "0");
vm.Pay.payno = GetLong((resultMap.ContainsKey("MOID") ? resultMap["MOID"] : "np0").Substring(2));
//(resultMap.ContainsKey("applDate") ? resultMap["applDate"] : "null") //승인날짜
//(resultMap.ContainsKey("applTime") ? resultMap["applTime"] : "null")//승인시간
// signature 데이터 생성
String secureSignature = makeSignatureAuth(secureMap);
/************************* 결제보안 추가 END ****************************/
if ("0000".Equals((resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "null")) && secureSignature.Equals(resultMap["authSignature"])) //결제보안 추가
{
/*****************************************************************************
* DB에 .
[중요!] DB에
.
******************************************************************************/
vm.Pay = Dao.Get<Pay>("pay.pay", new System.Collections.Hashtable() { { "payno", oid }, { "userno", SUserInfo.UserNo }, { "pstatus21", 0 } }).FirstOrDefault();
if (vm.Pay == null)
{
vm.Pay = new Pay() { payno = oid, uno = SUserInfo.UserNo, uip = GetUserIP() };
vm.Pay.payresult = "0:결제상품 오류(E1)";
cancelMsg += "|결제상품 오류(E1)";
vm.Pay = new Pay() { payno = oid, uno = SUserInfo.UserNo, uip = GetUserIP() };
throw new Exception("결제상품 오류(E1)");
}
else
{
vm.Pay.uno = SUserInfo.UserNo;
vm.Pay.uip = GetUserIP();
//if (vm.Pay.ptypecode != (resultMap.ContainsKey("payMethod") ? resultMap["payMethod"] : "x"))
//{
// vm.Pay.payresult = "0:결제방식 오류(E2)";
// cancelMsg += "|결제방식 오류(E2)";
// throw new Exception("결제방식 오류(E2)");
//}
if (vm.Pay.payamt != GetInt((resultMap["TotPrice"] ?? "").Replace(",", "")))
{
vm.Pay.payresult = "0:결제금액 오류(E3)";
cancelMsg += "|결제금액 오류(E3)";
throw new Exception("결제금액 오류(E3)");
}
else
{
if (vm.Pay.ptype == 3)
{ //가상계좌
vm.Pay.vactnum = resultMap.ContainsKey("VACT_Num") ? resultMap["VACT_Num"] : null;
vm.Pay.vactbankcode = resultMap.ContainsKey("VACT_BankCode") ? resultMap["VACT_BankCode"] : null;
vm.Pay.vactbankname = resultMap.ContainsKey("vactBankName") ? resultMap["vactBankName"] : null;
vm.Pay.vactname = resultMap.ContainsKey("VACT_Name") ? resultMap["VACT_Name"] : null;
vm.Pay.vactinname = resultMap.ContainsKey("VACT_InputName") ? resultMap["VACT_InputName"] : null;
//resultMap.ContainsKey("VACT_Date") ? resultMap["VACT_Date"] : "null" 송금일자 확인, 송금 전인데?
//resultMap.ContainsKey("VACT_Time") ? resultMap["VACT_Date"] : "null" 송금시간 확인, 송금 전인데?
}
else if (vm.Pay.ptype == 2)
{ //실시간계좌이체
vm.Pay.vactbankcode = resultMap.ContainsKey("ACCT_BankCode") ? resultMap["ACCT_BankCode"] : null;
vm.Pay.cshrrcode = resultMap.ContainsKey("CSHR_ResultCode") ? resultMap["CSHR_ResultCode"] : null;
vm.Pay.cshrtype = resultMap.ContainsKey("CSHR_Type") ? resultMap["CSHR_Type"] : null;
}
else
{//카드
vm.Pay.cardquota = resultMap.ContainsKey("CARD_Quota") ? resultMap["CARD_Quota"] : null;
int quota = Convert.ToInt16((resultMap.ContainsKey("CARD_Quota") ? resultMap["CARD_Quota"] : "01"));
if ("1".Equals((resultMap.ContainsKey("CARD_Interest") ? resultMap["CARD_Interest"] : "null"))
|| "1".Equals((resultMap.ContainsKey("EventCode") ? resultMap["EventCode"] : "null")))
{
vm.Pay.cardquotatype = 1;
}
vm.Pay.cardeventcode = resultMap.ContainsKey("EventCode") ? resultMap["EventCode"] : null;
vm.Pay.cardnum = resultMap.ContainsKey("CARD_Num") ? resultMap["CARD_Num"] : null;
vm.Pay.iscardpoint = "1".Equals((resultMap.ContainsKey("point") ? resultMap["point"] : "null")) ? 1 : 0;
vm.Pay.cardcode = resultMap.ContainsKey("CARD_Code") ? resultMap["CARD_Code"] : null;
vm.Pay.cardbankcode = resultMap.ContainsKey("CARD_BankCode") ? resultMap["CARD_BankCode"] : null;
vm.Pay.cardprtccode = resultMap.ContainsKey("CARD_PRTC_CODE") ? resultMap["CARD_PRTC_CODE"] : null;
vm.Pay.checkflag = resultMap.ContainsKey("CARD_CheckFlag") ? resultMap["CARD_CheckFlag"] : null;
if ((resultMap.ContainsKey("OCB_Num") ? resultMap["OCB_Num"] : "null") != null && (resultMap.ContainsKey("OCB_Num") ? resultMap["OCB_Num"] : "null") != "")
{
vm.Pay.ocbnum = resultMap.ContainsKey("OCB_Num") ? resultMap["OCB_Num"] : null;
vm.Pay.ocbappno = resultMap.ContainsKey("OCB_SaveApplNum") ? resultMap["OCB_SaveApplNum"] : null;
vm.Pay.ocbprice = resultMap.ContainsKey("OCB_PayPrice") ? resultMap["OCB_PayPrice"] : null;
}
if ((resultMap.ContainsKey("GSPT_Num") ? resultMap["GSPT_Num"] : "null") != null && (resultMap.ContainsKey("GSPT_Num") ? resultMap["GSPT_Num"] : "null") != "")
{
vm.Pay.gsnum = resultMap.ContainsKey("GSPT_Num") ? resultMap["GSPT_Num"] : null;
vm.Pay.gsremain = resultMap.ContainsKey("GSPT_Remains") ? resultMap["GSPT_Remains"] : null;
vm.Pay.gsprice = resultMap.ContainsKey("GSPT_ApplPrice") ? resultMap["GSPT_ApplPrice"] : null;
}
if ((resultMap.ContainsKey("UNPT_CardNum") ? resultMap["UNPT_CardNum"] : "null") != null && (resultMap.ContainsKey("UNPT_CardNum") ? resultMap["UNPT_CardNum"] : "null") != "")
{
vm.Pay.unum = resultMap.ContainsKey("UNPT_CardNum") ? resultMap["UNPT_CardNum"] : null;
vm.Pay.upoint = resultMap.ContainsKey("UPNT_UsablePoint") ? resultMap["UPNT_UsablePoint"] : null;
vm.Pay.uprice = resultMap.ContainsKey("UPNT_PayPrice") ? resultMap["UPNT_PayPrice"] : null;
}
}
vm.Pay.payresult = resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : null;
vm.Pay.payresultmsg = resultMap.ContainsKey("resultMsg") ? resultMap["resultMsg"] : null;
vm.Pay.pgkey = resultMap.ContainsKey("tid") ? resultMap["tid"] : null;
vm.Pay.uno = SUserInfo.UserNo;
vm.Pay.uip = GetUserIP();
//상품구매완료 처리 (최소 3건 업데이트 (pay, paydata, payitem)
if (Dao.Save("pay.paylect", vm.Pay) < 3)
{
vm.Pay.payresult = "0:구매완료 실패(E4)";
cancelMsg += "|구매완료 실패(E4)";
throw new Exception("구매완료 실패(E4)");
}
vm.Pay.payresult = "1:결제완료";
//if (GetConfig("ispaytest") == "1" && vm.Pay.ptype != 3)
//{
// vm.Pay.payresult = "1:구매완료 성공 개발단 망취소(S1)";
// String netcancelResultString = processHTTP(authMap, netCancel); // 망취소 요청 API url(고정, 임의 세팅 금지)
//}
try
{
vm.Pay.oid2 = pginfo[4] + vm.Pay.payno;
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
}
catch (Exception exresult)
{
SetError(exresult.StackTrace);
}
}
}
//System.Collections.Generic.Dictionary<string, string> checkMap = new System.Collections.Generic.Dictionary<string, string>();
//checkMap.Add("mid", mid); // 필수
//checkMap.Add("authToken", HttpUtility.UrlEncode(authToken)); // 필수 - 반드시 urlencode 해서 전달.
//checkMap.Add("applDate", (resultMap.ContainsKey("applDate") ? resultMap["applDate"] : "null")); // 필수
//checkMap.Add("applTime", (resultMap.ContainsKey("applTime") ? resultMap["applTime"] : "null")); // 필수
//checkMap.Add("timestamp", timestamp); // 필수
//checkMap.Add("signature", signature); // 필수
//checkMap.Add("charset", charset); // default=UTF-8
//checkMap.Add("format", format); // default=XML
}
else
{
vm.Pay.payresult = resultMap.ContainsKey("resultMsg") ? ("0:" + resultMap["resultMsg"]) : "0:결제취소";
vm.Pay.cancelresult = resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "";
//결제보안키가 다른 경우.
if (!secureSignature.Equals(resultMap["authSignature"]) && "0000".Equals((resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "null")))
{
cancelMsg += "|보안키오류(E41)";
vm.Pay.payresult = "0:보안키오류(E41)";
//망취소
if ("0000".Equals((resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "null")))
{
vm.Pay.payresult = "0:데이터 위변조 에크 오류(E42)";
cancelMsg += "|데이터위변조 체크 실패(E42)";
throw new Exception("데이터 위변조 체크 실패");
}
else
{
try
{
Dao.Save("pay.pay.fail", new System.Collections.Hashtable() { {"payno", oid },{"pstatus", 66 },
{ "payresult", (resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "").Substring(0, 100)},
{"payresultmsg", (resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "").Substring(0, 100) },{ "uno", SUserInfo.UserNo},{"uip", GetUserIP() } });
}
catch (Exception ex2)
{
SetError(cancelMsg += "|" + (cancelMsg ?? "") + "|" + ex2.StackTrace);
}
}
}
else
{
vm.Pay.payresult = "0:결제오류(기타)(E44)";
try
{
Dao.Save("pay.pay.fail", new System.Collections.Hashtable() { {"payno", oid },{"pstatus", 66 },
{ "payresult", (resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "").Substring(0, 100)},
{"payresultmsg", (resultMap.ContainsKey("resultCode") ? resultMap["resultCode"] : "").Substring(0, 100) },{ "uno", SUserInfo.UserNo},{"uip", GetUserIP() } });
}
catch (Exception ex2)
{
SetError(cancelMsg += "|" + (cancelMsg ?? "") + "|" + ex2.StackTrace);
}
}
}
// 수신결과를 파싱후 resultCode가 "0000"이면 승인성공 이외 실패
// 가맹점에서 스스로 파싱후 내부 DB 처리 후 화면에 결과 표시
// payViewType을 popup으로 해서 결제를 하셨을 경우
// 내부처리후 스크립트를 이용해 opener의 화면 전환처리를 하세요
//throw new Exception("강제 Exception");
}
catch (Exception ex)
{
//####################################
// 실패시 처리(***가맹점 개발수정***)
//####################################
//---- db 저장 실패시 등 예외처리----//
//#####################
// 망취소 API
//#####################
String netcancelResultString = processHTTP(authMap, netCancel); // 망취소 요청 API url(고정, 임의 세팅 금지)
// 취소 결과 확인
//Response.Write("<p>" + netcancelResultString.Replace("<", "&lt;").Replace(">", "&gt;") + "</p>");
//망취소기록
try
{
vm.Pay.cancelresult = (vm.Pay.cancelresult ?? "") + "|" + netcancelResultString;
vm.Pay.pstatus = 66;
Dao.Save("pay.pay.fail", vm.Pay);
SetError(cancelMsg += "|" + (netcancelResultString ?? "") + "|" + ex.StackTrace);
}
catch (Exception ex2)
{
SetError(cancelMsg += "|" + (netcancelResultString ?? "") + "|" + ex2.StackTrace);
}
vm.Pay.payresult = "0:결제중 오류(E101)";
}
}
else
{
//#############
// 인증 실패시
//#############
vm.Pay.payresult = "0:인증실패";
vm.Pay.cancelresult = HttpUtility.UrlDecode(sb.ToString());
}
}
else
{
var noti = Request["P_NOTI"];
//모바일
vm.pginfo = GetConfig("pginfo");
vm.IsMobilePay = true;
System.Collections.Specialized.NameValueCollection parameters = Request.Params;
if ("00".Equals(parameters.Get("P_STATUS")))
{
String strReplace = "";
try
{
//데이터베이스
System.Collections.Generic.Dictionary<String, String> authMap = new System.Collections.Generic.Dictionary<String, String>();
authMap.Add("P_TID", parameters.Get("P_TID"));// 필수
authMap.Add("P_MID", vm.pginfo.Split('|')[1]); // 필수
//결제승인요청
String authResultString = processHTTP(authMap, parameters.Get("P_REQ_URL"));
strReplace = authResultString.Replace(",", "&").Replace(":", "=").Replace("\"", "").Replace(" ", "").Replace("\n", "").Replace("}", "").Replace("{", "");
System.Collections.Generic.Dictionary<string, string> resultMap = parseStringToMap(strReplace);
if ("00".Equals(resultMap["P_STATUS"]))
{
//db처리
try
{
Int64 oid = GetLong(resultMap["P_OID"].Substring(2));
vm.Pay = Dao.Get<Pay>("pay.pay", new System.Collections.Hashtable() { { "payno", oid }, { "userno", SUserInfo.UserNo } }).FirstOrDefault();
if (vm.Pay == null)
{
vm.Pay = new Pay() { payno = 0, payresultmsg = "주문내역오류입니다." };
throw new Exception("결제상품 오류(E1)");
}
else if (vm.Pay.pstatus == 1 || vm.Pay.pstatus == 22)
{
vm.Pay = new Pay() { payno = 0, payresultmsg = "이미 결제된 주문내역입니다." };
}
else
{
vm.Pay.uno = SUserInfo.UserNo;
vm.Pay.uip = GetUserIP();
if (vm.Pay.payamt != GetInt((resultMap["P_AMT"] ?? "").Replace(",", "")))
{
vm.Pay = new Pay() { payno = 0, payresultmsg = "결제금액 오류입니다." };
throw new Exception("결제금액 오류(E3)");
}
else
{
//if (GetConfig("ispaytest") == "1" && vm.Pay.ptype != 3)
//{
// try
// {
// //개발단 망취소
// System.Collections.Generic.Dictionary<String, String> authMapCancel = new System.Collections.Generic.Dictionary<String, String>();
// authMapCancel.Add("P_TID", parameters.Get("P_TID"));
// authMapCancel.Add("P_MID", vm.pginfo.Split('|')[1]);
// authMapCancel.Add("P_AMT", vm.Pay.payamt.ToString());
// authMapCancel.Add("P_OID", resultMap["P_OID"]);
// authResultString = processHTTP(authMapCancel, parameters.Get("P_REQ_URL").Substring(0, parameters.Get("P_REQ_URL").Length - parameters.Get("P_REQ_URL").Split('/').Last().Length) + "payNetCancel.ini", true);
// strReplace = authResultString.Replace(",", "&").Replace(":", "=").Replace("\"", "").Replace(" ", "").Replace("\n", "").Replace("}", "").Replace("{", "");
// System.Collections.Generic.Dictionary<string, string> resultMapCancel = parseStringToMap(strReplace);
// if ("00".Equals(resultMapCancel["P_STATUS"]))
// {
// Console.WriteLine(resultMapCancel["P_TID"] + ":" + resultMapCancel["P_RMESG1"]);
// }
// else
// {
// Console.WriteLine(EuckrToUtf8(resultMapCancel["P_RMESG1"]));
// }
// }
// catch (Exception excancel)
// {
// SetError(excancel.Message);
// }
//}
if (vm.Pay.ptype == 3)
{
#region
//가상계좌
//"P_STATUS=00&P_AUTH_DT=20190819174235&P_AUTH_NO=&P_RMESG1=성공적으로 처리 하였습니다.&P_RMESG2=
//&P_TID =INIMX_VBNKINIpayTest20190819174235894667&P_FN_CD1=&P_AMT=1000&P_TYPE=VBANK&P_UNAME=npuser1name&P_MID=INIpayTest
//&P_OID=te170&P_NOTI=MOBILE|/OffDetail?cmno=87|170
//&P_NEXT_URL=https://phd.nptc.kr:8080/Course/OffPayReturn&P_MNAME=
//&P_NOTEURL=https://phd.nptc.kr:8080/Account/PayVBankMoney
//&P_VACT_NUM=07500531297112
//&P_VACT_DATE=20190825
//&P_VACT_TIME=235900
//&P_VACT_NAME=(주)케이지이니시
//&P_VACT_BANK_CODE=03
//&P_CSHR_CODE=0000&P_CSHR_MSG=정상처리되었습니다.&P_CSHR_AMT=1000
//&P_CSHR_SUP_AMT=1000&P_CSHR_TAX=0&P_CSHR_SRVC_AMT=0&P_CSHR_TYPE=0&P_CSHR_DT=20190819174235&P_CSHR_AUTH_NO="
#endregion
vm.Pay.vactnum = resultMap["P_VACT_NUM"];
vm.Pay.vactbankcode = resultMap["P_VACT_BANK_CODE"];
vm.Pay.vactbankname = GetBankName(resultMap["P_VACT_BANK_CODE"]);
vm.Pay.vactname = resultMap["P_VACT_NAME"];
//vm.Pay.vactinname = resultMap.ContainsKey("VACT_InputName") ? resultMap["VACT_InputName"] : null; 입금자명 안주네?
}
else if (vm.Pay.ptype == 2)
{
#region
/*
*
P_STATUS=00
P_AUTH_DT =20190820154747
P_AUTH_NO=
P_RMESG1=.
P_RMESG2=
P_TID=INIMX_DBNKINIpayTest20190820154747214066
P_FN_CD1=04
P_AMT=1000
P_TYPE=BANK
P_UNAME=npuser1name
P_MID=INIpayTest
P_OID=te222
P_NOTI=MOBILE|/OffDetail?cmno=87|222
P_NEXT_URL=https=//phd.nptc.kr=8080/Course/OffPayReturn
P_MNAME=
P_NOTEURL=
P_FN_NM=KB국민은행
P_ACCT_NUM=*********58215
P_CSHR_CODE=0000
P_CSHR_MSG=.
P_CSHR_AMT=1000
P_CSHR_SUP_AMT=1000
P_CSHR_TAX=0
P_CSHR_SRVC_AMT=0
P_CSHR_TYPE=0
P_CSHR_DT=20190820154747
P_CSHR_AUTH_NO=266393740
*/
#endregion
vm.Pay.vactnum = resultMap["P_ACCT_NUM"];
vm.Pay.vactbankcode = resultMap["P_FN_CD1"];
vm.Pay.vactbankname = resultMap["P_FN_NM"];
vm.Pay.cshrrcode = resultMap["CSHR_ResultCode"];
vm.Pay.cshrtype = resultMap["CSHR_Type"];
vm.Pay.cshrauthno = resultMap["P_CSHR_AUTH_NO"];
}
else
{
#region
//카드
//P_STATUS=00
//P_AUTH_DT =20190820154214
//P_AUTH_NO =30025104
//P_RMESG1=성공적으로처리하였습니다.
//P_RMESG2=00
//P_TID=INIMX_ISP_INIpayTest20190820154214874779
//P_FN_CD1=06
//P_AMT=1000
//P_TYPE=CARD
//P_UNAME=npuser1name
//P_MID=INIpayTest
//P_OID=te219
//P_NOTI=MOBILE|/OffDetail?cmno=87|219
//P_NEXT_URL=https=//phd.nptc.kr=8080/Course/OffPayReturn
//P_MNAME=
//P_NOTEURL=
//P_CARD_MEMBER_NUM=
//P_CARD_NUM=943646*********7
//P_CARD_ISSUER_CODE=04
//P_CARD_PURCHASE_CODE=06
//P_CARD_PRTC_CODE=1
//P_CARD_INTEREST=0
//P_CARD_CHECKFLAG=1
//P_CARD_ISSUER_NAME=국민카드
//P_CARD_PURCHASE_NAME=국민계열
//P_FN_NM=국민계열
//P_ISP_CARDCODE=000204040015606
//P_CARD_APPLPRICE=1000
#endregion
vm.Pay.cardquota = resultMap["P_RMESG2"];
vm.Pay.cardquotatype = GetInt(resultMap["P_CARD_INTEREST"]);
vm.Pay.cardnum = resultMap["P_CARD_NUM"];
vm.Pay.cardcode = resultMap["P_FN_CD1"];
vm.Pay.cardbankcode = resultMap["P_CARD_ISSUER_CODE"];
vm.Pay.cardprtccode = resultMap["P_CARD_PURCHASE_CODE"];
vm.Pay.checkflag = resultMap["P_CARD_CHECKFLAG"];
vm.Pay.vactname = resultMap["P_AUTH_NO"];
}
vm.Pay.payresult = resultMap["P_STATUS"];
vm.Pay.payresultmsg = resultMap["P_RMESG1"];
vm.Pay.pgkey = resultMap["P_TID"];
vm.Pay.uno = SUserInfo.UserNo;
vm.Pay.uip = GetUserIP();
//상품구매완료 처리 (최소 3건 업데이트 (pay, paydata, payitem)
if (Dao.Save("pay.paylect", vm.Pay) < 3)
{
//vm.Pay.payresult = "0:구매완료 실패(E4)";
vm.Pay = new Pay() { payno = 0, payresultmsg = "상품DB처리 중 오류발생" };
throw new Exception("구매완료 실패(E4)");
}
vm.Pay.payresult = "1:결제완료";
try
{
vm.Pay.oid2 = vm.pginfo.Split('|')[4] + vm.Pay.payno;
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
}
catch (Exception exresult)
{
SetError(exresult.StackTrace);
}
return View("PayReturn", vm);
}
}
}
catch (Exception ex2)
{
SetError("모바일결제오류망취소: " + noti.Split('|')[1] + ": " + ex2.Message);
//망취소요청
try
{
vm.Pay = new Pay() { payno = 0, payresultmsg = "상품 DB처리중 오류발생" };
//개발단 망취소
System.Collections.Generic.Dictionary<String, String> authMapCancel = new System.Collections.Generic.Dictionary<String, String>();
authMapCancel.Add("P_TID", parameters.Get("P_TID"));
authMapCancel.Add("P_MID", vm.pginfo.Split('|')[1]);
authMapCancel.Add("P_AMT", vm.Pay.payamt.ToString());
authMapCancel.Add("P_OID", resultMap["P_OID"]);
authResultString = processHTTP(authMapCancel, parameters.Get("P_REQ_URL").Substring(0, parameters.Get("P_REQ_URL").Length - parameters.Get("P_REQ_URL").Split('/').Last().Length) + "payNetCancel.ini", true);
strReplace = authResultString.Replace(",", "&").Replace(":", "=").Replace("\"", "").Replace(" ", "").Replace("\n", "").Replace("}", "").Replace("{", "");
System.Collections.Generic.Dictionary<string, string> resultMapCancel = parseStringToMap(strReplace);
if ("00".Equals(resultMapCancel["P_STATUS"]))
{
Console.WriteLine(resultMapCancel["P_TID"] + ":" + resultMapCancel["P_RMESG1"]);
}
else
{
SetError("모바일망취소실패2: " + noti.Split('|')[1] + ": " + (resultMapCancel["P_RMESG1"] ?? ""));
}
}
catch (Exception ex3)
{
SetError("모바일망취소실패1: " + noti.Split('|')[1] + ": " + ex2.Message);
}
}
vm.Pay = new Pay() { payno = 1, payresultmsg = Request["P_RMESG1"] };
}
else
{
//Dictionary<String, String> secureMap = new Dictionary<String, String>();
//if (resultMap["resultCode"] == "R201")
//{
vm.Pay = new Pay() { payno = GetLong(Request["P_NOTI"].Split('|')[2]), oid2 = GetConfig("pginfo").Split('|')[4] + GetLong(Request["P_NOTI"].Split('|')[2]) };
vm.Pay.payresult = "1:결제완료";
//기결제 건(새로고침)
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
return View("PayReturn", vm);
//}
//SetError("모바일결제오류02: " + noti.Split('|')[1] + ": ");
//vm.Pay = new Pay() { payno = 0, payresultmsg = "결제사 승인오류발생" };
}
}
catch (Exception ex)
{
SetError("모바일결제오류01: " + noti.Split('|')[1] + ": " + ex.Message);
vm.Pay = new Pay() { payno = 0, payresultmsg = "결제사 연결중 오류발생" };
}
}
else
{
vm.Pay = new Pay() { payno = 0, payresultmsg = Request["P_RMESG1"] + "<br />결제완료화면에서 이전화면으로 돌아가면서 이동하면 발생하는 경우일 수 있습니다." };
}
}
}
return View("PayReturn", vm);
}
}
}