This commit is contained in:
parent
eac0ca56cc
commit
097d8eabf3
|
|
@ -817,7 +817,7 @@ create table paydata (
|
|||
,cardquota varchar(2)
|
||||
,cardquotatype tinyint not null
|
||||
,cardeventcode varchar(30)
|
||||
,cardnum varchar(50)
|
||||
,cardnum varbinary(200)
|
||||
,iscardpoint tinyint not null
|
||||
,cardcode varchar (10)
|
||||
,cardbankcode varchar (10)
|
||||
|
|
|
|||
|
|
@ -1588,10 +1588,11 @@
|
|||
</isNotEmpty>
|
||||
</select>
|
||||
<select id="cm.cms.forpay" parameterClass="hashtable" resultClass="cm">
|
||||
select c.cmno,case when b.isjoin=1 then c.infee else c.outfee end fee,b.isjoin
|
||||
select c.cmno,case when b.isjoin=1 then c.infee else c.infee end fee,b.isjoin,d.lectno lectnocheck
|
||||
from users a
|
||||
left outer join assign b on b.asno=a.asno
|
||||
inner join cm c on c.cmno=#cmno#
|
||||
left outer join lect d on d.userno=a.userno and d.cmno=c.cmno and d.status in (1,2,3,4,6) and d.ischanged=0
|
||||
where a.userno=#userno#
|
||||
</select>
|
||||
<select id="cm.cms.forpaypc" parameterClass="hashtable" resultClass="cm">
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@
|
|||
<selectKey type="post" property="payno" resultClass="long">SELECT LAST_INSERT_ID()</selectKey>
|
||||
</insert>
|
||||
<insert id="pay.payitem.in" parameterClass="payitem">
|
||||
insert into payitem (payno,ptype,pcno,itemno,userno,pstatus,rstatus,pcnt,orgamt,discamt,payamt,payamtcash,payamtcard,refundamt,refundtime,refundtimereal,refundinfo,isrebate,<include refid="sql.inc"></include>)
|
||||
values(#payno#,#ptype#,#pcno#,#itemno#,#userno#,#pstatus#,#rstatus#,#pcnt#,#orgamt#,#discamt#,#payamt#,#payamtcash#,#payamtcard#,#refundamt#,#refundtime#,#refundtimereal#,#refundinfo#,#isrebate#,<include refid="sql.inv"></include>);
|
||||
insert into payitem (payno,ptype,pcno,itemno,userno,pstatus,rstatus,pcnt,orgamt,discamt,payamt,payamtcash,payamtcard,refundamt,refundtime,refundtimereal,refundinfo,isrebate,rbank,rbankaccnum,tbankuser,<include refid="sql.inc"></include>)
|
||||
values(#payno#,#ptype#,#pcno#,#itemno#,#userno#,#pstatus#,#rstatus#,#pcnt#,#orgamt#,#discamt#,#payamt#,#payamtcash#,#payamtcard#,#refundamt#,#refundtime#,#refundtimereal#,#refundinfo#,#isrebate#,#rbank#,#rbankaccnum#,#tbankuser#,<include refid="sql.inv"></include>);
|
||||
<selectKey type="post" property="pino" resultClass="long">SELECT LAST_INSERT_ID()</selectKey>
|
||||
</insert>
|
||||
<insert id="pay.lect.in" parameterClass="payitem">
|
||||
|
|
@ -289,8 +289,10 @@
|
|||
where a.payno=#payno# and a.userno=#userno# and a.pstatus=21;
|
||||
</update>
|
||||
<select id="pay.pay" parameterClass="hashtable" resultClass="pay">
|
||||
select a.payno,a.ptype,a.isgroup,a.isexam,a.userno,a.pstatus,a.payamt,a.rstatus,a.refundamt,a.ispg
|
||||
select a.payno,a.ptype,a.isgroup,a.isexam,a.userno,a.pstatus,a.payamt,a.rstatus,a.refundamt,a.ispg,a.paylimit
|
||||
,b.isready
|
||||
from pay a
|
||||
left outer join pplog b on b.pplno=a.pplno
|
||||
<dynamic prepend="where">
|
||||
<isNotNull property="payno" prepend="and">a.payno=#payno#</isNotNull>
|
||||
<isNotNull property="userno" prepend="and">a.userno=#userno#</isNotNull>
|
||||
|
|
@ -320,17 +322,18 @@
|
|||
,ispc,isjoin,fgno,apoint,mpoint
|
||||
,fpoint,spoint,dpoint,tpoint,ischanged
|
||||
,stime,etime,sip,eip,ispcs
|
||||
,ispce,fgno2,<include refid="sql.inc"></include>)
|
||||
,ispce,fgno2,cmisno,<include refid="sql.inc"></include>)
|
||||
select a.itemno,a.payno,a.pino,case when b.isgroup=1 then a.userno else b.userno end
|
||||
,case when b.ptype=3 then 2 else 1 end,null,null,0,a.isrebate
|
||||
,0,ifnull(d.isjoin, 0),null,null,null
|
||||
,null,null,null,null,0
|
||||
,null,null,null,null,null
|
||||
,null,a.fgno,<include refid="sql.inv"></include>
|
||||
,null,a.fgno,e.cmisno,<include refid="sql.inv"></include>
|
||||
from payitem a
|
||||
inner join pay b on b.payno=a.payno
|
||||
inner join users c on c.userno=b.userno
|
||||
left outer join assign d on d.asno=c.asno
|
||||
left outer join pplog e on e.pplno=b.pplno
|
||||
where a.payno=#payno# and a.ptype=0;
|
||||
|
||||
update lect a
|
||||
|
|
@ -339,7 +342,7 @@
|
|||
set a.status=case when b.pstatus=22 then 2 else 1 end,a.uno=#uno#,a.uip=#uip#
|
||||
where a.payno=#payno# and a.status=4;
|
||||
|
||||
update examuser a
|
||||
<!--update examuser a
|
||||
inner join pay b on b.isexam=1 and b.payno=#payno# and b.pstatus in (22,1)
|
||||
inner join payitem c on c.payno=b.payno and c.ptype=3 and c.itemno=a.exno and c.pstatus=b.pstatus
|
||||
set a.payno=b.payno,a.pstatus=case when b.pstatus=22 then 2 else 1 end,a.uno=#uno#,a.uip=#uip#
|
||||
|
|
@ -349,7 +352,7 @@
|
|||
inner join pay b on b.isexam=2 and b.payno=#payno# and b.pstatus in (22,1)
|
||||
inner join payitem c on c.payno=b.payno and c.ptype=case when a.ptype=9 then 2 else a.ptype end and c.itemno=a.itemno and c.pstatus=b.pstatus
|
||||
set a.status=3,c.cartno=a.pcno,a.uno=#uno#,a.uip=#uip#
|
||||
where a.userno=#userno# and a.status=1 and a.ispay=1;
|
||||
where a.userno=#userno# and a.status=1 and a.ispay=1;-->
|
||||
</update>
|
||||
<update id="pay.pay.fail" parameterClass="hashtable">
|
||||
update pay set pstatus=#pstatus# where payno=#payno#;
|
||||
|
|
@ -379,11 +382,11 @@
|
|||
,a.status=1
|
||||
where a.payno=#payno#;
|
||||
|
||||
update examuser a
|
||||
inner join pay b on b.isexam=1 and b.payno=a.payno and b.pstatus=1 <!--and b.pgkey=#pgkey#-->
|
||||
<!--update examuser a
|
||||
inner join pay b on b.isexam=1 and b.payno=a.payno and b.pstatus=1 --><!--and b.pgkey=#pgkey#--><!--
|
||||
set a.udt=now(),a.uno=#uno#,a.uip=#uip#
|
||||
,a.pstatus=1
|
||||
where a.payno=#payno#;
|
||||
where a.payno=#payno#;-->
|
||||
</update>
|
||||
|
||||
<select id="pay.payitems" parameterClass="long" resultClass="payitemresult">
|
||||
|
|
@ -395,7 +398,7 @@
|
|||
,CAST(AES_DECRYPT(UNHEX(ad.email), <include refid="sql.digest"></include>) AS char) email
|
||||
|
||||
,ad.post,ad.address1,ad.address2
|
||||
,a.ptype ptype2,a.payamt,a.pcnt,a.isrebate
|
||||
,a.ptype ptype2,a.payamt,a.pcnt,a.isrebate,a.itemno
|
||||
,b.cmno,b.cshape,b.sstime,b.setime
|
||||
,b1.rsno
|
||||
,b2.username,cc.cname ccpositionname,b2.isassignuser
|
||||
|
|
@ -478,14 +481,17 @@
|
|||
select a.payno,a.isgroup,a.pstatus ppstatus,a.rstatus prstatus
|
||||
,b.pino,b.ptype,b.pcno,b.itemno,b.userno,b.pstatus,b.rstatus,b.isrebate
|
||||
,c.cname,c.classno,c.rstime,c.retime,c.sstime,c.setime,c.cshape,c.isrefund
|
||||
,cc.cname studyplacename
|
||||
,d.tyear,d.tseq
|
||||
,u.username
|
||||
,ua.asname
|
||||
,uc.cname ccpositionname
|
||||
,CAST(AES_DECRYPT(UNHEX(u.email), <include refid="sql.digest"></include>) AS char) email
|
||||
,case when max(e.rfdno) > 0 then 1 else 0 end rfdstatus
|
||||
,lect.cmisno
|
||||
,cmis.estart cmiestart,cmis.eend cmieend
|
||||
from pay a
|
||||
inner join payitem b on b.payno=a.payno and b.ptype in (0,1,4) and b.pstatus in (1,21,22,51)
|
||||
inner join payitem b on b.payno=a.payno and b.ptype in (0,1,4) and b.pstatus in (1,21,22,51,55)
|
||||
inner join cm c on c.cmno=b.itemno and c.rstime < now() and c.sstime > now()
|
||||
inner join term d on d.tmno=c.tmno
|
||||
inner join users u on u.userno=b.userno
|
||||
|
|
@ -493,21 +499,27 @@
|
|||
left outer join comcode uc on uc.ccode=u.ccposition
|
||||
left outer join payrfditem e0 on e0.pino=b.pino
|
||||
left outer join payrfd e on e.rfdno=e0.rfdno and e.payno=a.payno and e.rstatus=0
|
||||
where a.userno=#userno# and a.pstatus in (1,21,22,51)
|
||||
left outer join comcode cc on cc.ccode=c.studyplace
|
||||
left outer join lect lect on lect.pino=b.pino and lect.ischanged=0
|
||||
left outer join cminningscd cmis on cmis.cmisno=lect.cmisno
|
||||
where a.userno=#userno# and a.pstatus in (1,21,22,51,55)
|
||||
group by a.payno,a.isgroup,a.pstatus,a.rstatus
|
||||
,b.pino,b.ptype,b.pcno,b.itemno,b.userno,b.pstatus,b.rstatus,b.isrebate
|
||||
,c.cname,c.classno,c.rstime,c.retime,c.sstime,c.setime,c.cshape
|
||||
,cc.cname
|
||||
,d.tyear,d.tseq
|
||||
,u.username
|
||||
,ua.asname
|
||||
,uc.cname
|
||||
,u.email
|
||||
,lect.cmisno
|
||||
,cmis.estart,cmis.eend
|
||||
order by c.retime,a.payno,b.pino
|
||||
</select>
|
||||
<update id="pay.paycancel" parameterClass="hashtable">
|
||||
update pay set <include refid="sql.up"></include>
|
||||
,pstatus=case when pstatus=22 then 43 else 41 end
|
||||
where payno=#payno# and userno=#userno# and pstatus in (51,21,22);
|
||||
where payno=#payno# and userno=#userno# and pstatus in (51,55,21,22);
|
||||
|
||||
update payitem a
|
||||
inner join pay b on b.payno=a.payno and b.userno=#userno# and b.pstatus in (41,43)
|
||||
|
|
@ -648,7 +660,7 @@
|
|||
left outer join exam c3 on a.ptype=3 and c3.exno=a.itemno
|
||||
left outer join users u on u.userno=a.userno
|
||||
left outer join assign ua on ua.asno=u.asno
|
||||
left outer join comcode uc on uc.ccode=u.ccposition
|
||||
left outer join comcode uc on uc.ccode=u.ccpositionc
|
||||
left outer join cmrs rs on rs.cmno=c0.cmno and rs.rstype=1 and rs.isdel=0
|
||||
left outer join lect t on a.ptype in (0,1,4) and t.cmno=c0.cmno and t.payno=a.payno and t.pino=a.pino and t.userno=a.userno
|
||||
where a.payno=#payno#
|
||||
|
|
@ -850,7 +862,7 @@
|
|||
</update>
|
||||
<select id="pay.pplogs" parameterClass="hashtable" resultClass="pplog">
|
||||
select a.pplno,a.isready,a.cmno,a.cmisno,a.isrebate,a.rbankname,a.rbankacc,a.rbankowner
|
||||
,b.payno
|
||||
,b.payno,b.pstatus
|
||||
from pplog a
|
||||
left outer join pay b on b.pplno=a.pplno
|
||||
<dynamic prepend="where">
|
||||
|
|
@ -863,7 +875,12 @@
|
|||
,b.itemno
|
||||
from pay a
|
||||
inner join payitem b on b.payno=a.payno
|
||||
where a.payno=#payno# and a.userno=#userno# and a.ptype > 0 and a.pstatus in (1,22,55)
|
||||
where a.payno=#payno# and a.userno=#userno# and a.pstatus in (1,22,55)
|
||||
</select>
|
||||
<select id="pay.lectready" parameterClass="int" resultClass="int">
|
||||
select count(a.userno)
|
||||
from lect a
|
||||
where a.cmno=#cmno# and a.isready=1 and a.status=6
|
||||
</select>
|
||||
</statements>
|
||||
</sqlMap>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ using Newtonsoft.Json.Linq;
|
|||
using Newtonsoft.Json;
|
||||
using OkCert3Com;
|
||||
|
||||
using XPayClientNet;
|
||||
|
||||
namespace NP.FO.Controllers
|
||||
{
|
||||
public class AccountController : FOOpenBaseController
|
||||
|
|
@ -842,5 +844,154 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public String XPayVBankMoney()
|
||||
{
|
||||
var x = new Xpay();
|
||||
x.LGD_RESPCODE = Request.Params.Get("LGD_RESPCODE");
|
||||
x.LGD_RESPMSG = Request.Params.Get("LGD_RESPMSG");
|
||||
x.LGD_MID = Request.Params.Get("LGD_MID");
|
||||
x.LGD_OID = Request.Params.Get("LGD_OID");
|
||||
x.LGD_AMOUNT = Request.Params.Get("LGD_AMOUNT");
|
||||
x.LGD_TID = Request.Params.Get("LGD_TID");
|
||||
x.LGD_PAYTYPE = Request.Params.Get("LGD_PAYTYPE");
|
||||
x.LGD_PAYDATE = Request.Params.Get("LGD_PAYDATE");
|
||||
x.LGD_HASHDATA = Request.Params.Get("LGD_HASHDATA");
|
||||
x.LGD_FINANCECODE = Request.Params.Get("LGD_FINANCECODE");
|
||||
x.LGD_FINANCENAME = Request.Params.Get("LGD_FINANCENAME");
|
||||
x.LGD_ESCROWYN = Request.Params.Get("LGD_ESCROWYN");
|
||||
x.LGD_TIMESTAMP = Request.Params.Get("LGD_TIMESTAMP");
|
||||
x.LGD_ACCOUNTNUM = Request.Params.Get("LGD_ACCOUNTNUM");
|
||||
x.LGD_CASTAMOUNT = Request.Params.Get("LGD_CASTAMOUNT");
|
||||
x.LGD_CASCAMOUNT = Request.Params.Get("LGD_CASCAMOUNT");
|
||||
x.LGD_CASFLAG = Request.Params.Get("LGD_CASFLAG");
|
||||
x.LGD_CASSEQNO = Request.Params.Get("LGD_CASSEQNO");
|
||||
x.LGD_CASHRECEIPTNUM = Request.Params.Get("LGD_CASHRECEIPTNUM");
|
||||
x.LGD_CASHRECEIPTSELFYN = Request.Params.Get("LGD_CASHRECEIPTSELFYN");
|
||||
x.LGD_CASHRECEIPTKIND = Request.Params.Get("LGD_CASHRECEIPTKIND");
|
||||
x.LGD_PAYER = Request.Params.Get("LGD_PAYER");
|
||||
|
||||
x.LGD_BUYER = Request.Params.Get("LGD_BUYER");
|
||||
x.LGD_PRODUCTINFO = Request.Params.Get("LGD_PRODUCTINFO");
|
||||
x.LGD_BUYERID = Request.Params.Get("LGD_BUYERID");
|
||||
x.LGD_BUYERADDRESS = Request.Params.Get("LGD_BUYERADDRESS");
|
||||
x.LGD_BUYERPHONE = Request.Params.Get("LGD_BUYERPHONE");
|
||||
x.LGD_BUYEREMAIL = Request.Params.Get("LGD_BUYEREMAIL");
|
||||
x.LGD_BUYERSSN = Request.Params.Get("LGD_BUYERSSN");
|
||||
x.LGD_PRODUCTCODE = Request.Params.Get("LGD_PRODUCTCODE");
|
||||
x.LGD_RECEIVER = Request.Params.Get("LGD_RECEIVER");
|
||||
x.LGD_RECEIVERPHONE = Request.Params.Get("LGD_RECEIVERPHONE");
|
||||
x.LGD_DELIVERYINFO = Request.Params.Get("LGD_DELIVERYINFO");
|
||||
x.CST_PLATFORM = GetConfig("CST_PLATFORM");
|
||||
/*
|
||||
' *************************************************
|
||||
' * 2. MD5 해쉬암호화 (수정하지 마세요) - BEGIN
|
||||
' *
|
||||
' * MD5 해쉬암호화는 거래 위변조를 막기위한 방법입니다.
|
||||
' *************************************************
|
||||
' * (1) XpayClient의 사용을 위한 xpay 객체 생성
|
||||
' * (2) XPayClient 초기화(환경설정 파일 로드)
|
||||
' CST_PLATFORM: - test, service 값에 따라 lgdacom.conf의 test_url(test) 또는 url(srvice) 사용
|
||||
' - test, service 값에 따라 테스트용 또는 서비스용 아이디 생성
|
||||
' * (3) Init_TX: 메모리에 mall.conf, lgdacom.conf 할당 및 트랜잭션의 고유한 키 TXID 생성
|
||||
' * MD5 해쉬데이터 암호화 검증을 위해
|
||||
' * LG유플러스에서 발급한 상점키(MertKey)를 환경설정 파일(lgdacom/conf/mall.conf)에 반드시 입력하여 주시기 바랍니다.
|
||||
' */
|
||||
//* LGD_HASHDATA2 추출 /////////////////////
|
||||
x.configPath = GetConfig("lgdacomConfigPath");
|
||||
|
||||
// (1) XpayClient의 사용을 위한 xpay 객체 생성
|
||||
XPayClient xpay = new XPayClient();
|
||||
|
||||
// (2) Init: XPayClient 초기화(환경설정 파일 로드)
|
||||
// configPath: 설정파일
|
||||
// CST_PLATFORM: - test, service 값에 따라 lgdacom.conf의 test_url(test) 또는 url(srvice) 사용
|
||||
// - test, service 값에 따라 테스트용 또는 서비스용 아이디 생성
|
||||
xpay.Init(x.configPath, x.CST_PLATFORM);
|
||||
|
||||
try
|
||||
{
|
||||
// (3) Init_TX: 메모리에 mall.conf, lgdacom.conf 할당 및 트랜잭션의 고유한 키 TXID 생성
|
||||
xpay.Init_TX(x.LGD_MID);
|
||||
x.LGD_HASHDATA2 = xpay.GetHashDataCas(x.LGD_MID, x.LGD_OID, x.LGD_AMOUNT, x.LGD_RESPCODE, x.LGD_TIMESTAMP);
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
SetError("가상계좌입금오류(LGD_HASHDATA2 추출 오류): " + err.StackTrace);
|
||||
return "FAIL";
|
||||
}
|
||||
|
||||
/*
|
||||
* 상점 처리결과 리턴메세지
|
||||
*
|
||||
* OK : 상점 처리결과 성공
|
||||
* 그외 : 상점 처리결과 실패
|
||||
*
|
||||
* ※ 주의사항 : 성공시 'OK' 문자이외의 다른문자열이 포함되면 실패처리 되오니 주의하시기 바랍니다.
|
||||
*/
|
||||
String resultMSG = "결제결과 상점 DB처리(LGD_CASNOTEURL) 결과값을 입력해 주시기 바랍니다.";
|
||||
if (x.LGD_HASHDATA2.Equals(x.LGD_HASHDATA))
|
||||
{ //해쉬값 검증이 성공이면
|
||||
if (("0000".Equals(x.LGD_RESPCODE)))
|
||||
{ //결제가 성공이면
|
||||
if ("R".Equals(x.LGD_CASFLAG))
|
||||
{
|
||||
return "OK";
|
||||
}
|
||||
else if ("I".Equals(x.LGD_CASFLAG))
|
||||
{
|
||||
/*
|
||||
* 무통장 입금 성공 결과 상점 처리(DB) 부분
|
||||
* 상점 결과 처리가 정상이면 "OK"
|
||||
*/
|
||||
//if( 무통장 입금 성공 상점처리결과 성공 )
|
||||
var payvbankin = new PayVBankIn()
|
||||
{
|
||||
payno = GetLong(x.LGD_OID.Substring(2)),
|
||||
uno = 1,
|
||||
uip = GetUserIP(),
|
||||
pgkey = x.LGD_TID,
|
||||
inbankcode = x.LGD_FINANCECODE,
|
||||
vacct = x.LGD_ACCOUNTNUM,
|
||||
inamt = GetInt(x.LGD_CASTAMOUNT),
|
||||
fromname = x.LGD_PAYER,
|
||||
fromymd = x.LGD_PAYDATE
|
||||
};
|
||||
if (Dao.Save("pay.paylect.vbankin", payvbankin) < 3)
|
||||
{
|
||||
//상품구매완료 처리 (최소 3건 업데이트 (payvbankin, pay)
|
||||
return "FAIL";
|
||||
}
|
||||
return "OK";
|
||||
}
|
||||
else if ("C".Equals(x.LGD_CASFLAG))
|
||||
{
|
||||
/*
|
||||
* 무통장 입금취소 성공 결과 상점 처리(DB) 부분
|
||||
* 상점 결과 처리가 정상이면 "OK"
|
||||
*/
|
||||
//if( 무통장 입금취소 성공 상점처리결과 성공 )
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
else
|
||||
{ //결제가 실패이면
|
||||
/*
|
||||
* 거래실패 결과 상점 처리(DB) 부분
|
||||
* 상점결과 처리가 정상이면 "OK"
|
||||
*/
|
||||
//if( 결제실패 상점처리결과 성공 )
|
||||
return "FAIL";
|
||||
}
|
||||
}
|
||||
else
|
||||
{ //해쉬값이 검증이 실패이면
|
||||
/*
|
||||
* hashdata검증 실패 로그를 처리하시기 바랍니다.
|
||||
*/
|
||||
SetError("가상계좌입금오류(결제결과 상점 DB처리(LGD_CASNOTEURL) 해쉬값 검증이 실패): " + x.LGD_OID);
|
||||
}
|
||||
return "FAIL";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -843,7 +843,7 @@ namespace NP.FO.Controllers
|
|||
{
|
||||
return Redirect("/");
|
||||
}
|
||||
if (vm.PPLog.payno > 0)
|
||||
if (vm.PPLog.payno > 0 && vm.PPLog.pstatus > 0)
|
||||
{
|
||||
//새로고침?
|
||||
return RedirectPermanent("/Course/ApplyComplete?payno=" + vm.PPLog.payno);
|
||||
|
|
@ -855,12 +855,16 @@ namespace NP.FO.Controllers
|
|||
var uip = GetUserIP();
|
||||
payitems.Add(new PayItem()
|
||||
{
|
||||
itemno = vm.cmno,
|
||||
itemno = vm.PPLog.cmno,
|
||||
userno = SUserInfo.UserNo,
|
||||
status = 6,
|
||||
pstatus = 55,
|
||||
pcnt = 1,
|
||||
payamt = 0,
|
||||
isrebate = vm.PPLog.isrebate ?? 0,
|
||||
rbank = vm.PPLog.rbankname,
|
||||
rbankaccnum = vm.PPLog.rbankacc,
|
||||
tbankuser = vm.PPLog.rbankowner,
|
||||
isready = 1,
|
||||
cmisno = vm.PPLog.cmisno,
|
||||
uno = SUserInfo.UserNo,
|
||||
|
|
@ -868,12 +872,16 @@ namespace NP.FO.Controllers
|
|||
});
|
||||
//정가확인
|
||||
var cms = Dao.Get<CM>("cm.cms.forpay", new Hashtable() { { "userno", SUserInfo.UserNo }, { "cmno", vm.PPLog.cmno } });
|
||||
if (cms.First().lectnocheck > 0)
|
||||
{
|
||||
return RedirectPermanent("/?isalreadyreq=1");
|
||||
}
|
||||
var pi = payitems.First();
|
||||
pi.orgamt = cms.Where(w => w.cmno == pi.itemno).First().fee;
|
||||
var pay = new Pay()
|
||||
{
|
||||
pplno = vm.pplno,
|
||||
ptype = 7,
|
||||
ptype = 0,
|
||||
userno = SUserInfo.UserNo,
|
||||
pstatus = 55,
|
||||
rstatus = 0,
|
||||
|
|
@ -895,10 +903,11 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
vm.CM = Dao.Get<CM>("cm.cms", new System.Collections.Hashtable() { { "cmno", vm.PPLog.cmno } }).First();
|
||||
vm.User = Dao.Get<Users>("users.users", new System.Collections.Hashtable() { { "userno", SUserInfo.UserNo } }).First();
|
||||
vm.viewname4 = "/Course/OnPayReturn";
|
||||
return View(vm);
|
||||
}
|
||||
|
||||
public ActionResult ApplyComplete(VMCourse vm)
|
||||
public ActionResult ApplyComplete(VMPay vm)
|
||||
{
|
||||
if (vm.payno < 1)
|
||||
{
|
||||
|
|
@ -906,7 +915,12 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
vm.PayItem = Dao.Get<PayItem>("pay.payresult", new Hashtable() { { "payno", vm.payno }, { "userno", SUserInfo.UserNo } }).First();
|
||||
vm.CM = Dao.Get<CM>("cm.cms", new System.Collections.Hashtable() { { "cmno", vm.PayItem.itemno } }).FirstOrDefault();
|
||||
|
||||
vm.Pay = Dao.Get<Pay>("pay.pay", new System.Collections.Hashtable() { { "payno", vm.payno }, { "userno", SUserInfo.UserNo } }).FirstOrDefault();
|
||||
if (vm.Pay.isready == 1)
|
||||
{
|
||||
vm.Pay.ccount = Dao.Get<int?>("pay.lectready", vm.CM.cmno).FirstOrDefault() ?? 1;
|
||||
}
|
||||
vm.Pay.payresult = "1:결제완료";
|
||||
return View(vm);
|
||||
}
|
||||
public ActionResult XpayREQ(VMPay vm)
|
||||
|
|
@ -937,11 +951,21 @@ namespace NP.FO.Controllers
|
|||
vm.payParams.Add("LGD_CASNOTEURL", GetConfig("LGD_CASNOTEURL"));
|
||||
vm.payParams.Add("LGD_AUTOFILLYN_BUYER", GetConfig("LGD_AUTOFILLYN_BUYER"));
|
||||
vm.payParams.Add("LGD_ESCROW_USEYN", GetConfig("LGD_ESCROW_USEYN"));
|
||||
vm.payParams.Add("LGD_CASHRECEIPTYN", GetConfig("LGD_CASHRECEIPTYN"));
|
||||
|
||||
vm.payParams.Add("LGD_DOMAIN_URL", "xpayvvip");
|
||||
vm.payParams.Add("LGD_CUSTOM_PROCESSTYPE", "TWOTR");
|
||||
//vm.payParams.Add("LGD_CASHRECEIPTYN", GetConfig("LGD_CASHRECEIPTYN"));
|
||||
vm.payParams.Add("LGD_CASHRECEIPTYN", "N");
|
||||
if (Request["ptype"] == "3")
|
||||
{
|
||||
if (Request["iscashrct"] == "1")
|
||||
{
|
||||
vm.payParams["LGD_CASHRECEIPTYN"] = "Y";
|
||||
vm.payParams.Add("LGD_DEFAULTCASHRECEIPTUSE", "1");
|
||||
vm.payParams.Add("LGD_CASHRECEIPTUSE", "1");
|
||||
vm.payParams.Add("LGD_CASHRECEIPTNUM", "1");
|
||||
vm.payParams.Add("LGD_CASHCARDNUM", Request["cashrcthp"]);
|
||||
}
|
||||
vm.payParams.Add("LGD_CLOSEDATE", Request["LGD_CLOSEDATE"]);
|
||||
}
|
||||
String OSTYPE = Request["LGD_OSTYPE_CHECK"];
|
||||
|
|
@ -1049,6 +1073,7 @@ namespace NP.FO.Controllers
|
|||
|
||||
//nptech 추가 파라미터
|
||||
vm.payParams.Add("items", Request["items"]);
|
||||
vm.payParams.Add("pplno", Request["pplno"]);
|
||||
vm.payParams.Add("rsMsg", "");
|
||||
|
||||
Session.Add("PAYREQ_MAP", vm.payParams);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ using System.Web.Mvc;
|
|||
|
||||
using NP.Model;
|
||||
using NP.Base.Auth;
|
||||
|
||||
using XPayClientNet;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
namespace NP.FO.Controllers
|
||||
{
|
||||
public class FOBaseController : NP.Base.BaseController
|
||||
|
|
@ -43,6 +47,10 @@ namespace NP.FO.Controllers
|
|||
}
|
||||
//여기서 로그 남겨?
|
||||
base.OnActionExecuting(filterContext);
|
||||
if (Request.Cookies["yicte"] != null && !string.IsNullOrEmpty(Request.Cookies["yicte"].Value))
|
||||
{
|
||||
Response.Cookies["yicte"].Value = Request.Cookies["yicte"].Value + ";SameSite=None; Secure";
|
||||
}
|
||||
var cm = new Model.MenuPage() { };
|
||||
//if (Request.Url.AbsolutePath.ToUpper().StartsWith("/DIVISION/A"))
|
||||
//{
|
||||
|
|
@ -451,581 +459,251 @@ namespace NP.FO.Controllers
|
|||
//}
|
||||
protected ActionResult PayReturn(VMPay vm)
|
||||
{
|
||||
if (vm.payno > 0 && vm.absptype == 6)
|
||||
if (vm.payno > 0 && (vm.absptype == 6 || vm.absptype == 7))
|
||||
{
|
||||
//0원강좌 결제
|
||||
vm.Pay = new Pay() { payno = vm.payno, ptype = vm.absptype, oid2 = "free" + vm.payno };
|
||||
vm.Pay = new Pay() { payno = vm.payno, ptype = vm.absptype, oid2 = (vm.absptype == 6 ? "free" : string.Empty) + vm.payno };
|
||||
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(Request["P_NOTI"]))
|
||||
vm.Pay = new Pay();
|
||||
/* ※ 중요
|
||||
* 환경설정 파일의 경우 반드시 외부에서 접근이 가능한 경로에 두시면 안됩니다.
|
||||
* 해당 환경파일이 외부에 노출이 되는 경우 해킹의 위험이 존재하므로 반드시 외부에서 접근이 불가능한 경로에 두시기 바랍니다.
|
||||
* 예) [Window 계열] C:\inetpub\wwwroot\lgdacom ==> 절대불가(웹 디렉토리)
|
||||
*/
|
||||
String configPath = GetConfig("lgdacomConfigPath"); //토스페이먼츠에서 제공한 환경파일 위치를 지정해 주세요.
|
||||
|
||||
/*
|
||||
* [최종결제요청 페이지(STEP2-2)]
|
||||
*
|
||||
* 매뉴얼 "5.1. XPay 결제 요청 페이지 개발"의 "단계 5. 최종 결제 요청 및 요청 결과 처리" 참조
|
||||
*
|
||||
* 토스페이먼츠으로 부터 내려받은 LGD_PAYKEY(인증Key)를 가지고 최종 결제요청.(파라미터 전달시 POST를 사용하세요)
|
||||
*/
|
||||
|
||||
/*
|
||||
*************************************************
|
||||
* 1.최종결제 요청(수정하지 마세요) - BEGIN
|
||||
* (단, 최종 금액체크를 원하시는 경우 금액체크 부분 주석을 제거 하시면 됩니다.)
|
||||
*************************************************
|
||||
*/
|
||||
String CST_PLATFORM = Request.Params.Get("CST_PLATFORM");
|
||||
String CST_MID = Request.Params.Get("CST_MID");
|
||||
String LGD_MID = (("test".Equals(CST_PLATFORM.Trim())) ? "t" : "") + CST_MID;
|
||||
String LGD_PAYKEY = Request.Params.Get("LGD_PAYKEY");
|
||||
String LGD_CLOSEDATE = Request.Params.Get("LGD_CLOSEDATE");
|
||||
//String DB_AMOUNT = ""; //반드시 위변조가 불가능한 곳(DB나 세션)에서 금액을 가져오십시요.
|
||||
|
||||
// (1) XpayClient의 사용을 위한 xpay 객체 생성
|
||||
XPayClient xpay = new XPayClient();
|
||||
|
||||
// (2) Init: XPayClient 초기화(환경설정 파일 로드)
|
||||
// configPath: 설정파일
|
||||
// CST_PLATFORM: - test, service 값에 따라 lgdacom.conf의 test_url(test) 또는 url(srvice) 사용
|
||||
// - test, service 값에 따라 테스트용 또는 서비스용 아이디 생성
|
||||
xpay.Init(configPath, CST_PLATFORM);
|
||||
|
||||
try
|
||||
{
|
||||
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())
|
||||
// (3) Init_TX: 메모리에 mall.conf, lgdacom.conf 할당 및 트랜잭션의 고유한 키 TXID 생성
|
||||
xpay.Init_TX(LGD_MID);
|
||||
xpay.Set("LGD_TXNAME", "PaymentByKey");
|
||||
xpay.Set("LGD_PAYKEY", LGD_PAYKEY);
|
||||
|
||||
//금액을 체크하시기 원하는 경우 아래 주석을 풀어서 이용하십시요.
|
||||
//xpay.Set("LGD_AMOUNTCHECKYN", "Y");
|
||||
//xpay.Set("LGD_AMOUNT", DB_AMOUNT);
|
||||
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
SetError("환경파일의 경로가 잘못 되었습니다. configPath의 경로를 확인해 주시기 바랍니다." + "|" + err.StackTrace);
|
||||
vm.Pay.payresult = "0:호출실패";
|
||||
vm.Pay.cancelresult = "환경파일의 경로가 잘못 되었습니다. configPath의 경로를 확인해 주시기 바랍니다.";
|
||||
}
|
||||
/*
|
||||
*************************************************
|
||||
* 1.최종결제 요청(수정하지 마세요) - END
|
||||
*************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
* 2. 최종결제 요청 결과 처리
|
||||
*
|
||||
* 최종 결제요청 결과 리턴 파라미터는 연동메뉴얼을 참고하시기 바랍니다.
|
||||
*/
|
||||
// (4) TX: lgdacom.conf에 설정된 URL로 소켓 통신하여 최종 인증요청, 결과값으로 true, false 리턴
|
||||
if (xpay.TX())
|
||||
{
|
||||
Int64 payno = GetLong(xpay.Response("LGD_OID", 0).Substring(2));
|
||||
//1)결제결과 화면처리(성공,실패 결과 처리를 하시기 바랍니다.
|
||||
vm.Pay = new Pay() { payno = payno, uno = SUserInfo.UserNo, uip = GetUserIP() };
|
||||
String cancelMsg = "결제오류|" + payno;
|
||||
|
||||
// (5) DB에 인증요청 결과 처리
|
||||
if ("0000".Equals(xpay.m_szResCode))
|
||||
{
|
||||
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 + "×tamp=" + 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")
|
||||
//통신상의 문제가 없을시
|
||||
//최종결제요청 결과 성공 DB처리(LGD_RESPCODE 값에 따라 결제가 성공인지, 실패인지 DB처리)
|
||||
vm.Pay = Dao.Get<Pay>("pay.pay", new System.Collections.Hashtable() { { "payno", payno }, { "userno", SUserInfo.UserNo }, { "pstatus21", 0 } }).FirstOrDefault();
|
||||
if (vm.Pay == null)
|
||||
{
|
||||
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
|
||||
vm.Pay = new Pay() { payno = payno, uno = SUserInfo.UserNo, uip = GetUserIP() };
|
||||
vm.Pay.payresult = "0:결제상품 오류(E1)";
|
||||
cancelMsg += "|결제상품 오류(E1)";
|
||||
vm.Pay = new Pay() { payno = payno, uno = SUserInfo.UserNo, uip = GetUserIP() };
|
||||
throw new Exception("결제상품 오류(E1)");
|
||||
}
|
||||
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")))
|
||||
vm.Pay.uno = SUserInfo.UserNo;
|
||||
vm.Pay.uip = GetUserIP();
|
||||
if (vm.Pay.payamt != GetInt((xpay.Response("LGD_AMOUNT", 0) ?? "").Replace(",", "")))
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
vm.Pay.payresult = "0:결제금액 오류(E3)";
|
||||
cancelMsg += "|결제금액 오류(E3)";
|
||||
throw new Exception("결제금액 오류(E3)");
|
||||
}
|
||||
else
|
||||
{
|
||||
vm.Pay.payresult = "0:결제오류(기타)(E44)";
|
||||
if (vm.Pay.ptype == 3)
|
||||
{ //가상계좌
|
||||
vm.Pay.vactnum = xpay.Response("LGD_ACCOUNTNUM", 0);
|
||||
vm.Pay.vactbankcode = xpay.Response("LGD_FINANCECODE", 0);
|
||||
vm.Pay.vactbankname = xpay.Response("LGD_FINANCENAME", 0);
|
||||
vm.Pay.vactname = xpay.Response("LGD_SAOWNER", 0);
|
||||
vm.Pay.vactinname = xpay.Response("LGD_PAYER", 0);
|
||||
//vm.Pay.paylimit = Convert.ToDateTime(xpay.Response("LGD_CLOSEDATE", 0));
|
||||
}
|
||||
else if (vm.Pay.ptype == 2)
|
||||
{ //실시간계좌이체
|
||||
vm.Pay.vactbankcode = xpay.Response("LGD_FINANCECODE", 0);
|
||||
vm.Pay.cshrtype = xpay.Response("LGD_CASHRECEIPTKIND", 0);
|
||||
vm.Pay.cshrauthno = xpay.Response("LGD_CASHRECEIPTNUM", 0);
|
||||
}
|
||||
else
|
||||
{//카드
|
||||
vm.Pay.cardquota = xpay.Response("LGD_CARDINSTALLMONTH", 0);
|
||||
if (!"00".Equals(xpay.Response("LGD_CARDINSTALLMONTH", 0)) && "1".Equals(xpay.Response("LGD_CARDNOINTYN", 0)))
|
||||
{
|
||||
vm.Pay.cardquotatype = 1;
|
||||
}
|
||||
vm.Pay.cardnum = xpay.Response("LGD_CARDNUM", 0);
|
||||
vm.Pay.iscardpoint = vm.Pay.cardquota.Count() == 4 ? 1 : 0; // 포인트 사용 시 할부개월 + 포인트별로 숫자 두개가 붙음, 즉 4개면 포인트 사용했다는 뜻
|
||||
vm.Pay.cardcode = xpay.Response("LGD_FINANCECODE", 0);
|
||||
vm.Pay.cardbankcode = xpay.Response("LGD_CARDACQUIRER", 0);
|
||||
vm.Pay.cardprtccode = xpay.Response("LGD_PCANCELFLAG", 0);
|
||||
vm.Pay.checkflag = xpay.Response("LGD_CARDGUBUN2", 0);
|
||||
}
|
||||
vm.Pay.payresult = xpay.Response("LGD_RESPCODE", 0);
|
||||
vm.Pay.payresultmsg = xpay.Response("LGD_RESPMSG", 0);
|
||||
vm.Pay.pgkey = xpay.Response("LGD_TID", 0);
|
||||
vm.Pay.mid = LGD_MID;
|
||||
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:결제완료";
|
||||
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() } });
|
||||
vm.Pay.oid2 = GetConfig("PAYMENT_CLASSIFICATION") + vm.Pay.payno;
|
||||
vm.PayItemResults = Dao.Get<PayItemResult>("pay.payitems", vm.Pay.payno);
|
||||
vm.PayItem = Dao.Get<PayItem>("pay.payresult", new System.Collections.Hashtable() { { "payno", vm.Pay.payno }, { "userno", SUserInfo.UserNo } }).First();
|
||||
vm.Pay.pstatus = vm.Pay.ptype == 1 ? 1 : 22;
|
||||
vm.CM = Dao.Get<CM>("cm.cms", new System.Collections.Hashtable() { { "cmno", vm.PayItemResults.First().itemno } }).FirstOrDefault();
|
||||
}
|
||||
catch (Exception ex2)
|
||||
catch (Exception exresult)
|
||||
{
|
||||
SetError(cancelMsg += "|" + (cancelMsg ?? "") + "|" + ex2.StackTrace);
|
||||
SetError(exresult.StackTrace);
|
||||
}
|
||||
#region 영수증 출력 관련
|
||||
String authdata = vm.Pay.mid + vm.Pay.pgkey + GetConfig("LGD_MERTKEY");
|
||||
HashAlgorithm hash;
|
||||
byte[] authdataTextBytes = Encoding.UTF8.GetBytes(authdata);
|
||||
hash = new MD5CryptoServiceProvider();
|
||||
byte[] hashed = hash.ComputeHash(authdataTextBytes);
|
||||
for (int i = 0; i < hashed.Length; i++)
|
||||
{
|
||||
vm.Pay.authdata += string.Format("{0:x2}", hashed[i]);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
// 수신결과를 파싱후 resultCode가 "0000"이면 승인성공 이외 실패
|
||||
// 가맹점에서 스스로 파싱후 내부 DB 처리 후 화면에 결과 표시
|
||||
// payViewType을 popup으로 해서 결제를 하셨을 경우
|
||||
// 내부처리후 스크립트를 이용해 opener의 화면 전환처리를 하세요
|
||||
//throw new Exception("강제 Exception");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//####################################
|
||||
// 실패시 처리(***가맹점 개발수정***)
|
||||
//####################################
|
||||
//---- db 저장 실패시 등 예외처리----//
|
||||
//망취소
|
||||
xpay.Rollback("상점 DB처리 실패로 인하여 Rollback 처리 [TID:" + xpay.Response("LGD_TID", 0) + ",MID:" + xpay.Response("LGD_MID", 0) + ",OID:" + xpay.Response("LGD_OID", 0) + "]");
|
||||
|
||||
//#####################
|
||||
// 망취소 API
|
||||
//#####################
|
||||
String netcancelResultString = processHTTP(authMap, netCancel); // 망취소 요청 API url(고정, 임의 세팅 금지)
|
||||
// 취소 결과 확인
|
||||
//Response.Write("<p>" + netcancelResultString.Replace("<", "<").Replace(">", ">") + "</p>");
|
||||
//망취소기록
|
||||
try
|
||||
if ("0000".Equals(xpay.m_szResCode))
|
||||
{
|
||||
vm.Pay.cancelresult = (vm.Pay.cancelresult ?? "") + "|" + netcancelResultString;
|
||||
try
|
||||
{
|
||||
// 자동취소가 정상적으로 완료 되었을때
|
||||
vm.Pay.cancelresult = (vm.Pay.cancelresult ?? "") + "|" + xpay.Response("LGD_RESPMSG", 0);
|
||||
vm.Pay.pstatus = 66;
|
||||
Dao.Save("pay.pay.fail", vm.Pay);
|
||||
SetError(cancelMsg += "|" + xpay.Response("LGD_RESPMSG", 0) + "|" + ex.StackTrace);
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
SetError(cancelMsg += "|" + xpay.Response("LGD_RESPMSG", 0) + "|" + ex2.StackTrace);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 자동취소가 정상적으로 처리되지 않았을때
|
||||
vm.Pay.cancelresult = (vm.Pay.cancelresult ?? "") + "|" + xpay.Response("LGD_RESPMSG", 0);
|
||||
vm.Pay.pstatus = 66;
|
||||
Dao.Save("pay.pay.fail", vm.Pay);
|
||||
SetError(cancelMsg += "|" + (netcancelResultString ?? "") + "|" + ex.StackTrace);
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
SetError(cancelMsg += "|" + (netcancelResultString ?? "") + "|" + ex2.StackTrace);
|
||||
SetError(cancelMsg += "|" + xpay.Response("LGD_RESPCODE", 0) + "|" + xpay.Response("LGD_RESPMSG", 0));
|
||||
}
|
||||
|
||||
vm.Pay.payresult = "0:결제중 오류(E101)";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//#############
|
||||
// 인증 실패시
|
||||
//#############
|
||||
vm.Pay.payresult = "0:인증실패";
|
||||
vm.Pay.cancelresult = HttpUtility.UrlDecode(sb.ToString());
|
||||
//통신상의 문제 발생(최종결제요청 결과 실패 DB처리)
|
||||
vm.Pay.payresult = "0:통신상의 문제 발생(" + xpay.Response("LGD_RESPCODE", 0) + ")";
|
||||
vm.Pay.cancelresult = xpay.Response("LGD_RESPMSG", 0);
|
||||
if ("S007".Equals(xpay.m_szResCode))
|
||||
{
|
||||
vm.Pay.cancelresult = "이미 거래시도된 내역입니다.";
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
Dao.Save("pay.pay.fail", new System.Collections.Hashtable() { {"payno", payno },{"pstatus", 66 },
|
||||
{ "payresult", xpay.Response("LGD_RESPCODE", 0)},
|
||||
{ "payresultmsg", xpay.Response("LGD_RESPMSG", 0) },
|
||||
{ "uno", SUserInfo.UserNo},{"uip", GetUserIP() } });
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
SetError(cancelMsg += "|" + (cancelMsg ?? "") + "|" + ex2.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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 />결제완료화면에서 이전화면으로 돌아가면서 이동하면 발생하는 경우일 수 있습니다." };
|
||||
}
|
||||
//2)API 요청실패 화면처리
|
||||
vm.Pay.payresult = "0:결제요청실패(" + xpay.m_szResCode + ")";
|
||||
vm.Pay.cancelresult = xpay.m_szResMsg;
|
||||
}
|
||||
}
|
||||
return View("PayReturn", vm);
|
||||
return View("ApplyComplete", vm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,86 +1,103 @@
|
|||
<input type="hidden" name="cmno" id="cmno" value="@Model.cmno" /> @*강좌번호*@
|
||||
<div id="pageTitle">
|
||||
<h3>신청완료</h3>
|
||||
</div>
|
||||
|
||||
<h4 class="clsTitle">신청강좌</h4>
|
||||
<ul class="smtList mt0">
|
||||
<li>
|
||||
<ul class="smtlChk">
|
||||
<li>
|
||||
@if (Model.CM.cshape == 0)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='gry'>@(Model.CM.rsrename) (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname<span class='red'> | @(Model.CM.infee)원</span></label></p>
|
||||
}
|
||||
else if (Model.CM.cshape == 1)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='blu'>[@(Model.CM.studyplacename) 교육장] </span><span class='gry'>@Model.CM.rsrename (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname<span class='red'> | @(Model.CM.infee)원</span></label></p>
|
||||
}
|
||||
else if (Model.CM.cshape == 2)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='gry'>@(Model.CM.rsrename) (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname<span class='red'> | @(Model.CM.infee)원 ※ 집체교육 선택 필수</span></label></p>
|
||||
}
|
||||
|
||||
@if (Model.CM.applicableCM == "정상접수")
|
||||
{
|
||||
<span class="smtlChkBtn smtlChk01">정상접수</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="smtlChkBtn smtlChk02">대기접수</span>
|
||||
}
|
||||
</li>
|
||||
</ul>
|
||||
<div class="apyCost">
|
||||
결제금액 : <span class="red">@Model.CM.infee</span> 원
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
@if (Model.CM.applicableCM == "정상접수")
|
||||
@model NP.Model.VMPay
|
||||
@*<div id="pageTitle">
|
||||
<h3>신청@(Model.Pay.payresult.Substring(0, 1) == "1" ? "완료" : "실패")</h3>
|
||||
</div>*@
|
||||
@if (Model.Pay.payresult.Substring(0, 1) != "1")
|
||||
{
|
||||
<h4 class="clsTitle">결제정보</h4>
|
||||
<table class="clsTable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구매금액</th>
|
||||
<td>원</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>지불방법</th>
|
||||
<td>카드결제</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>입금계좌</th>
|
||||
<td>국민은행 | 계좌번호 | (주)이니시스</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문접수일</th>
|
||||
<td>2017-10-16 12ㅣ00 (만료일: 2018-10-16 12:00)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문상태</th>
|
||||
<td>결제완료</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h4 class="clsTitle">결제실패</h4>
|
||||
<div>
|
||||
@(!string.IsNullOrEmpty(Model.Pay.cancelresult) ? Model.Pay.cancelresult : Model.Pay.payresult.Substring(1))
|
||||
</div>
|
||||
<ul class="clsBtn society">
|
||||
<li><a href="#">결제현황 이동</a></li>
|
||||
<li><a href="#">마이페이지</a></li>
|
||||
<li><a href="/Home/index">계속 신청하기</a></li>
|
||||
<li><a href="/My/Index">마이페이지</a></li>
|
||||
<li><a href="/">다시 신청하기</a></li>
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="apyScs">
|
||||
<h5>위 강좌의 대기접수가 완료되었습니다. </h5>
|
||||
<h6>(대기인원 : <span>@Model.CM.standbyPerson</span>명)</h6>
|
||||
<p>※ 결원 발생 시 대기신청 차례에 따라 교육생 연락처로 연락드릴 예정입니다.</p>
|
||||
<p>※ 교육비 결제는 마이페이지 학습현황의 학습대기에서 가능하며 교육비결제 완료 후 학습을 시작할 수 있습니다.</p>
|
||||
</div>
|
||||
<ul class="clsBtn society">
|
||||
<li><a href="#">마이페이지</a></li>
|
||||
<li><a href="/Home/index">계속 신청하기</a></li>
|
||||
<h4 class="clsTitle">신청강좌</h4>
|
||||
<ul class="smtList mt0">
|
||||
<li>
|
||||
<ul class="smtlChk">
|
||||
<li>
|
||||
@if (Model.CM.cshape == 0)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='gry'>@(Model.CM.rsrename) (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname</label></p>
|
||||
}
|
||||
else if (Model.CM.cshape == 1)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='blu'>[@(Model.CM.studyplacename) 교육장] </span><span class='gry'>@Model.CM.rsrename (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname<span class='red'> | @(Model.CM.infee)원</span></label></p>
|
||||
}
|
||||
else if (Model.CM.cshape == 2)
|
||||
{
|
||||
<p><label>@(Model.CM.tseq)기 <span class='gry'>@(Model.CM.rsrename) (@(Model.CM.rsretimeToDay)일) </span> @Model.CM.cname<span class='red'> | @(Model.CM.infee)원 ※ 집체교육 선택 필수</span></label></p>
|
||||
}
|
||||
|
||||
@*@if (Model.CM.applicableCM == "정상접수")
|
||||
{
|
||||
<span class="smtlChkBtn smtlChk01">정상접수</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="smtlChkBtn smtlChk02">대기접수</span>
|
||||
}*@
|
||||
</li>
|
||||
</ul>
|
||||
<div class="apyCost">
|
||||
총 결제@(Model.Pay.isready==1?"예상":"")금액 : <span class="red">@Model.CM.infee.ToString("#,0")</span> 원
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
if (Model.Pay.isready == 0)
|
||||
{
|
||||
<h4 class="clsTitle">결제정보</h4>
|
||||
<table class="clsTable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>구매금액</th>
|
||||
<td>@Model.Pay.payamt.ToString("#,0") 원</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>지불방법</th>
|
||||
<td>@Model.Pay.ptypename</td>
|
||||
</tr>
|
||||
@if (Model.Pay.ptype == 3)
|
||||
{
|
||||
<tr>
|
||||
<th>입금계좌</th>
|
||||
<td>
|
||||
@Model.Pay.vactbankname | @Model.Pay.vactnum | @Model.Pay.vactname
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>주문접수일</th>
|
||||
<td>@DateTime.Now.ToString("yyyy-MM-dd HH:mm") (만료일: @Model.Pay.paylimit.Value.ToString("yyyy-MM-dd HH:mm"))</td>
|
||||
</tr>
|
||||
}
|
||||
<tr>
|
||||
<th>주문상태</th>
|
||||
<td>@Model.Pay.pstatusname</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<ul class="clsBtn society">
|
||||
<li><a href="/My/Paies">결제현황 이동</a></li>
|
||||
<li><a href="/My/Index">마이페이지</a></li>
|
||||
<li><a href="/">계속 신청하기</a></li>
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="apyScs">
|
||||
<h5>위 강좌의 대기접수가 완료되었습니다. </h5>
|
||||
<h6>(대기인원 : <span>@Model.Pay.ccount.ToString("#,0")</span>명)</h6>
|
||||
<p>※ 결원 발생 시 대기신청 차례에 따라 교육생 연락처로 연락드릴 예정입니다.</p>
|
||||
<p>※ 교육비 결제는 마이페이지 학습현황의 학습대기에서 가능하며 교육비결제 완료 후 학습을 시작할 수 있습니다.</p>
|
||||
</div>
|
||||
<ul class="clsBtn society">
|
||||
<li><a href="/My/Index">마이페이지</a></li>
|
||||
<li><a href="/">계속 신청하기</a></li>
|
||||
</ul>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -136,7 +136,8 @@
|
|||
if (capResult.obj == 0) {
|
||||
var resultmsg = capResult.msg;
|
||||
if (resultmsg.indexOf("buyertel")) {
|
||||
msg("개인정보에 휴대폰 번호를 입력해주세요.");
|
||||
//msg("개인정보에 휴대폰 번호를 입력해주세요.");
|
||||
msg(capResult.msg || "이미 신청한 강좌인지 확인해주세요.");
|
||||
} else {
|
||||
msg(capResult.msg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ else
|
|||
function payment_return() {
|
||||
var fDoc;
|
||||
fDoc = lgdwin.contentWindow || lgdwin.contentDocument;
|
||||
alert(1);
|
||||
document.getElementById("LGD_PAYINFO").target = "_self";
|
||||
if (fDoc.document.getElementById('LGD_RESPCODE').value == "0000") {
|
||||
document.getElementById("LGD_PAYKEY").value = fDoc.document.getElementById('LGD_PAYKEY').value;
|
||||
|
|
@ -52,7 +51,7 @@ else
|
|||
}
|
||||
else {
|
||||
document.getElementById("rsMsg").value = fDoc.document.getElementById('rsMsg').value;
|
||||
document.getElementById("LGD_PAYINFO").action = "/Course/PayOn";
|
||||
document.getElementById("LGD_PAYINFO").action = "/Course/ApplyPay";
|
||||
closeIframe();
|
||||
document.getElementById("LGD_PAYINFO").submit();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -283,6 +283,9 @@
|
|||
}
|
||||
}
|
||||
});
|
||||
if (@Model.isalreadyreq == 1) {
|
||||
msg("이미 신청된 강좌입니다. 메인화면으로 이동되었습니다.");
|
||||
}
|
||||
});
|
||||
function schIpt(num, code, name) {
|
||||
$('#sch' + num).val(code);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,11 @@
|
|||
<ul>
|
||||
<li>결제완료 이전의 신청과정은 즉시 취소하실 수 있습니다.</li>
|
||||
<li>결제완료 이후의 과정들은 결제현황 페이지에서 신청취소 및 환불요청을 해주셔야 합니다.</li>
|
||||
<li>결제대기중인 과정들은 결제를 완료하셔야 최종 신청이 완료됩니다.</li>
|
||||
<li>무통장입금(가상계좌)는 신청기간 내에 입금 완료 되어야 신청이 완료됩니다. (신청 기간이 지나면 자동 취소되고 결제대기 처리됩니다.)</li>
|
||||
<li>
|
||||
교육일정 변경은 및 교육취소는 교육시작일 기준 5일전 까지만 가능 합니다.<br />
|
||||
입교가 확정된 과정에 대하여 미 참석 하실 경우 다음 번 교육신청 시 제한이 될 수 있으니 교육취소 및 변경 기한이 지난 경우에는 교육원으로 연락하여 주시기 바랍니다(1544-77660)
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -31,17 +35,23 @@
|
|||
<span class="nav">@d.cshapename</span>
|
||||
@Html.Raw(d.isrebate == 1 ? "<span class=\"grn\">환급</span>" : "")
|
||||
<b class="payno@(d.payno)-@(d.itemno)"> @d.cname</b>
|
||||
@Html.Raw(d.pstatus == 21 ? string.Format("<b><a href=\"#\" class=\"paybtn\" onclick=\"gopay({0})\">교육비납부</a></b>", d.payno) : "")
|
||||
</h5>
|
||||
<dl class="ltaDl">
|
||||
<dt class="@(d.pstatus == 1 && d.rfdstatus < 1 ? "ltaDlbk":"ltaDlred")">@(d.pstatus == 51 ? "심사중" : d.pstatus == 21 ? "결제대기" : d.pstatus == 22 ? "입금대기" : d.pstatus == 1 && d.rfdstatus > 0 ? "환불요청" : d.pstatus == 1 ? "결제완료" : d.rstatus == 1 ? "부분환불" : d.rstatus == 2 ? "전액환불" : "-")</dt>
|
||||
@Html.Raw(d.pstatus == 21 ? string.Format("<dt class=\"ltaDlppl\"><a href=\"#\"></a><a href=\"#\" onclick=\"gopay({0})\">결제하기</a></dt>", d.payno):"")
|
||||
<dd>신청(교육)기간 : @d.rstime.Value.ToString("yy/MM/dd") ~ @d.retime.Value.ToString("yy/MM/dd") (@d.sstime.ToString("yy/MM/dd") ~ @d.setime.ToString("yy/MM/dd"))</dd>
|
||||
<dt class="@(d.pstatus == 1 && d.rfdstatus < 1 ? "ltaDlbk":"ltaDlred")">@(d.pstatus == 55 ? "대기신청" : d.pstatus == 51 ? "심사중" : d.pstatus == 21 ? "결제대기" : d.pstatus == 22 ? "입금대기" : d.pstatus == 1 && d.rfdstatus > 0 ? "환불요청" : d.pstatus == 1 ? "결제완료" : d.rstatus == 1 ? "부분환불" : d.rstatus == 2 ? "전액환불" : "-")</dt>
|
||||
<dd>
|
||||
신청(교육)기간 : @d.rstime.Value.ToString("yy'/'MM'/'dd") ~ @d.retime.Value.ToString("yy'/'MM'/'dd") (@d.sstime.ToString("yy'/'MM'/'dd") ~ @d.setime.ToString("yy'/'MM'/'dd"))
|
||||
@if (d.cshape == 2)
|
||||
{
|
||||
@:| 집체교육기간 : @(d.cmisno == null ? "미정" : ("[" + d.studyplacename + "]" + string.Format("{0}~{1}", d.cmiestart.ToString("yy'/'MM'/'dd"), d.cmieend.ToString("yy'/'MM'/'dd"))))
|
||||
}
|
||||
</dd>
|
||||
</dl>
|
||||
</a>
|
||||
</div>
|
||||
</th>
|
||||
<td class="ltaBtn" data-th="교육생 : "><span class="ltaOpen@(d.isgroup == 1 ? "" : "x")" ltaOpen="@(a)" >@(d.isgroup == 0 ? 1 : Model.PIs.Where(w=>w.payno == d.payno && w.itemno == d.itemno).Count())명</span></td>
|
||||
<td class="ltaBtn" data-th="관리 : "><a href="#" onclick="gowork(@(d.pstatus==51||d.pstatus == 21 || d.pstatus == 22?1:0), @string.Format("{0},{1}",d.payno, d.pino), this)">@(d.pstatus==51||d.pstatus == 21 || d.pstatus == 22?"취소":"결제상세")</a></td>
|
||||
<td class="ltaBtn" data-th="관리 : "><a href="#" onclick="gowork(@(d.pstatus == 55 || d.pstatus==51||d.pstatus == 21 || d.pstatus == 22?1:0), @string.Format("{0},{1}",d.payno, d.pino), this)">@(d.pstatus == 55 || d.pstatus==51||d.pstatus == 21 || d.pstatus == 22?"취소":"결제상세")</a></td>
|
||||
</tr>
|
||||
if (d.isgroup == 1)
|
||||
{
|
||||
|
|
@ -65,6 +75,20 @@
|
|||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@section styles{
|
||||
<style type="text/css">
|
||||
#confirmbox .confirmbtnbox a.btn,#confirmbox .confirmbtnbox a.btn:focus{color: #fff;}
|
||||
a.paybtn {
|
||||
border: 1px solid #999;
|
||||
background-color: #ecf4fb;
|
||||
padding: 0px 10px;
|
||||
font-weight: normal;
|
||||
color: #555;
|
||||
margin-left: 4px;
|
||||
font-size: 10pt;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
@section scriptsHeader{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
<!--test, service-->
|
||||
<add key="LGD_ENCODING" value="UTF-8" />
|
||||
<add key="LGD_BACKBTN_YN" value="N" />
|
||||
<add key="LGD_CASNOTEURL" value="https://kdh.nptc.kr:8082/Account/XPayVBankMoney" />
|
||||
<add key="LGD_CASNOTEURL" value="http://kdh.nptc.kr:8084/Account/XPayVBankMoney" />
|
||||
<!--가상계좌 입금통보 URL-->
|
||||
<add key="LGD_AUTOFILLYN_BUYER" value="Y" />
|
||||
<add key="LGD_CASHRECEIPTYN" value="Y" />
|
||||
|
|
|
|||
|
|
@ -438,6 +438,7 @@ namespace NP.Model
|
|||
/// </summary>
|
||||
public int finalcut { get; set; }
|
||||
public String username { get; set; }
|
||||
public Int64 lectnocheck { get; set; }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
<Compile Include="VMMM.cs" />
|
||||
<Compile Include="VMSystem.cs" />
|
||||
<Compile Include="VMUser.cs" />
|
||||
<Compile Include="Xpay.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
|
@ -52,6 +52,6 @@ namespace NP.Model
|
|||
public int? slevel { get; set; }
|
||||
|
||||
public Int64 payno { get; set; }
|
||||
|
||||
public int pstatus { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
22
Model/Pay.cs
22
Model/Pay.cs
|
|
@ -21,6 +21,10 @@ namespace NP.Model
|
|||
/// 결제방식 1:신용카드,2:계좌이체,3:가상계좌,4:현금,5:현금+카드,6:무료,7:대기신청,9:위탁계약
|
||||
/// </summary>
|
||||
public int ptype { get; set; }
|
||||
/// <summary>
|
||||
/// 0:정상, 1:대기신청
|
||||
/// </summary>
|
||||
public int isready { get; set; }
|
||||
public String ptypecode
|
||||
{
|
||||
get
|
||||
|
|
@ -92,7 +96,7 @@ namespace NP.Model
|
|||
/// </summary>
|
||||
public int refunding { get; set; }
|
||||
/// <summary>
|
||||
/// 가상계좌입금만료일 수강신청 또는 가상계좌유효기간 중 빠른시간 가상계좌는 발급일로부터 7일
|
||||
/// 가상계좌입금만료일 수강신청 또는 가상계좌유효기간 중 빠른시간 가상계좌는 발급일로부터 ?일
|
||||
/// </summary>
|
||||
public DateTime? paylimit { get; set; }
|
||||
public String paylimitymd { get {
|
||||
|
|
@ -211,7 +215,17 @@ namespace NP.Model
|
|||
public int iscanceled { get; set; }
|
||||
public int iscashrct { get; set; }
|
||||
public String cashrcthp { get; set; }
|
||||
|
||||
|
||||
//public Xpay xpay { get; set; }
|
||||
public String mid { get; set; }
|
||||
/// <summary>
|
||||
/// 무결성 검증 필드
|
||||
/// LGD_MID, LGD_TID, MertKey의 조합으로 생성된 인증문자열을 md5로 암호화한 값
|
||||
/// 인증문자열 생성: LGD_MID + LGD_TID + MertKey
|
||||
/// md5로 인증문자열 암호화(authdata): md5(인증문자열)
|
||||
/// </summary>
|
||||
public String authdata { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class PayItem : BaseModel
|
||||
|
|
@ -466,6 +480,9 @@ namespace NP.Model
|
|||
public int? infee { get; set; }
|
||||
public int? outfee { get; set; }
|
||||
public int ispg { get; set; }
|
||||
public String studyplacename { get; set; }
|
||||
public DateTime cmiestart { get; set; }
|
||||
public DateTime cmieend { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -724,6 +741,7 @@ namespace NP.Model
|
|||
public class PayItemResult : BaseModel
|
||||
{
|
||||
public Int64 payno {get;set;}
|
||||
public Int64 itemno { get; set; }
|
||||
public int isgroup {get;set;}
|
||||
public int isexam { get; set; }
|
||||
public int isdvr {get;set;}
|
||||
|
|
|
|||
|
|
@ -16,5 +16,6 @@ namespace NP.Model
|
|||
public IList<CM> CMsEtc { get; set; }
|
||||
public IList<Data> Datas { get; set; }
|
||||
public IList<CMInning> CMInnings { get; set; }
|
||||
public int isalreadyreq { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,5 +59,6 @@ namespace NP.Model
|
|||
public int iscashrct { get; set; }
|
||||
public String cashrcthp { get; set; }
|
||||
public System.Collections.Hashtable payParams { get; set; }
|
||||
public CM CM { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,301 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
namespace NP.Model
|
||||
{
|
||||
/// <summary>
|
||||
/// 구LG 현 토스페이먼츠
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class Xpay
|
||||
{
|
||||
/// <summary>
|
||||
/// 토스페이먼츠 결제 서비스 선택(test:테스트, service:서비스)
|
||||
/// </summary>
|
||||
public String CST_PLATFORM { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상점아이디(토스페이먼츠으로 부터 발급받으신 상점아이디를 입력하세요)
|
||||
/// </summary>
|
||||
public String CST_MID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상점아이디(자동생성)
|
||||
/// 테스트 아이디는 't'를 반드시 제외하고 입력하세요.
|
||||
/// </summary>
|
||||
public String LGD_MID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 주문번호(상점정의 유니크한 주문번호를 입력하세요)
|
||||
/// </summary>
|
||||
public String LGD_OID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제금액("," 를 제외한 결제금액을 입력하세요)
|
||||
/// </summary>
|
||||
public String LGD_AMOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자명
|
||||
/// </summary>
|
||||
public String LGD_BUYER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상품명
|
||||
/// </summary>
|
||||
public String LGD_PRODUCTINFO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자 이메일
|
||||
/// </summary>
|
||||
public String LGD_BUYEREMAIL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 타임스탬프
|
||||
/// </summary>
|
||||
public String LGD_TIMESTAMP { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상점정의 결제수단
|
||||
/// </summary>
|
||||
public String LGD_CUSTOM_USABLEPAY { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상점정의 결제창 스킨 (red, blue, cyan, green, yellow)
|
||||
/// </summary>
|
||||
public String LGD_CUSTOM_SKIN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 가상계좌 상점결과전송 NOTE_URL
|
||||
/// </summary>
|
||||
public String LGD_CASNOTEURL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 해쉬암호데이터
|
||||
/// </summary>
|
||||
public String LGD_HASHDATA { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제창 2.0 타입
|
||||
/// </summary>
|
||||
public String LGD_CUSTOM_PROCESSTYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 응답수신페이지
|
||||
/// </summary>
|
||||
public String LGD_RETURNURL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 사용타입 정보(수정 및 삭제 금지): 이 정보를 근거로 어떤 서비스를 사용하는지 판단할 수 있습니다.
|
||||
/// </summary>
|
||||
public String LGD_VERSION { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제창 호출 방식 (수정불가)
|
||||
/// </summary>
|
||||
public String LGD_WINDOW_TYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 카드사 호출 방식 (수정불가)
|
||||
/// </summary>
|
||||
public String LGD_CUSTOM_SWITCHINGTYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제창 버전정보
|
||||
/// </summary>
|
||||
public String LGD_WINDOW_VER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 응답코드: 0000(성공) 그외 실패
|
||||
/// 인증후 자동채움 (수정불가)
|
||||
/// </summary>
|
||||
public String LGD_RESPCODE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 응답메세지
|
||||
/// 인증후 자동채움 (수정불가)
|
||||
/// </summary>
|
||||
public String LGD_RESPMSG { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 값 P: XPay 실행(PC 결제 모듈): PC용과 모바일용 모듈은 파라미터 및 프로세스가 다르므로 PC용은 PC 웹브라우저에서 실행 필요. "P", "M" 외의 문자(Null, "" 포함)는 모바일 또는 PC 여부를 체크하지 않음
|
||||
/// </summary>
|
||||
public String LGD_OSTYPE_CHECK { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 계좌이체 결제시 사용, ActiveX 사용 여부로 "N" 이외의 값: ActiveX 환경에서 계좌이체 결제 진행(IE)
|
||||
/// </summary>
|
||||
public String LGD_ACTIVEXYN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 환경파일 위치
|
||||
/// </summary>
|
||||
public String configPath;
|
||||
|
||||
public String LGD_DOMAIN_URL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제창 호출 문자 인코딩방식
|
||||
/// Form submit 방식으로 결제창 호출시 EUC-KR이외의 인코딩을 하는 경우만 사용
|
||||
/// </summary>
|
||||
public String LGD_ENCODING { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결과수신페이지 호출 문자 인코딩방식
|
||||
/// UTF-8로 넘기면 UTF-8로 인코딩된 값을 LGD_NOTEURL, LGD_CASNOTEURL 에 전달
|
||||
/// </summary>
|
||||
public String LGD_ENCODING_NOTEURL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결과수신페이지 호출 문자 인코딩방식
|
||||
/// UTF-8로 넘기면 UTF-8로 인코딩된 값을 LGD_RETURNURL 에 전달
|
||||
/// </summary>
|
||||
public String LGD_ENCODING_RETURNURL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제창 내 신용카드/계좌이체/가상계좌 결제수단을 다시 선택하기 위한 “뒤로가기” 버튼
|
||||
/// 'Y: 뒤로가기 버튼 사용
|
||||
/// N: 뒤로가기 버튼 사용하지 않음
|
||||
/// </summary>
|
||||
public String LGD_BACKBTN_YN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자명 자동채움
|
||||
/// 결제요청시 구매자명을 결제창에 자동으로 채움 (Y:사용함, 'N':사용안함)
|
||||
/// </summary>
|
||||
public String LGD_AUTOFILLYN_BUYER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 현금영수증발급사용여부
|
||||
/// Y:사용함, 'N':사용안함
|
||||
/// </summary>
|
||||
public String LGD_CASHRECEIPTYN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// LG유플러스에서 부여한 거래번호
|
||||
/// </summary>
|
||||
public String LGD_TID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제수단코드
|
||||
/// </summary>
|
||||
public String LGD_PAYTYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 거래일시(승인일시/이체일시)
|
||||
/// </summary>
|
||||
public String LGD_PAYDATE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제기관코드(은행코드)
|
||||
/// </summary>
|
||||
public String LGD_FINANCECODE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 결제기관이름(은행이름)
|
||||
/// </summary>
|
||||
public String LGD_FINANCENAME { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 에스크로 적용여부
|
||||
/// </summary>
|
||||
public String LGD_ESCROWYN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 계좌번호(무통장입금)
|
||||
/// </summary>
|
||||
public String LGD_ACCOUNTNUM { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 입금총액(무통장입금)
|
||||
/// </summary>
|
||||
public String LGD_CASTAMOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 현입금액(무통장입금)
|
||||
/// </summary>
|
||||
public String LGD_CASCAMOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 무통장입금 플래그(무통장입금) - 'R':계좌할당, 'I':입금, 'C':입금취소
|
||||
/// </summary>
|
||||
public String LGD_CASFLAG { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 입금순서(무통장입금)
|
||||
/// </summary>
|
||||
public String LGD_CASSEQNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 현금영수증 승인번호
|
||||
/// </summary>
|
||||
public String LGD_CASHRECEIPTNUM { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 현금영수증자진발급제유무 Y: 자진발급제 적용, 그외 : 미적용
|
||||
/// </summary>
|
||||
public String LGD_CASHRECEIPTSELFYN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 현금영수증 종류 0: 소득공제용 , 1: 지출증빙용
|
||||
/// </summary>
|
||||
public String LGD_CASHRECEIPTKIND { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 입금자명
|
||||
/// </summary>
|
||||
public String LGD_PAYER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자 ID
|
||||
/// </summary>
|
||||
public String LGD_BUYERID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자 주소
|
||||
/// </summary>
|
||||
public String LGD_BUYERADDRESS { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자 전화번호
|
||||
/// </summary>
|
||||
public String LGD_BUYERPHONE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 구매자 주민번호
|
||||
/// </summary>
|
||||
public String LGD_BUYERSSN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 상품코드
|
||||
/// </summary>
|
||||
public String LGD_PRODUCTCODE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 수취인
|
||||
/// </summary>
|
||||
public String LGD_RECEIVER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 수취인 전화번호
|
||||
/// </summary>
|
||||
public String LGD_RECEIVERPHONE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 배송지
|
||||
/// </summary>
|
||||
public String LGD_DELIVERYINFO { get; set; }
|
||||
|
||||
public String LGD_HASHDATA2 { get; set; }
|
||||
|
||||
public String LGD_CLOSEDATE { get; set; }
|
||||
|
||||
public String CST_WINDOW_TYPE { get; set; }
|
||||
public String LGD_PCVIEWYN { get; set; }
|
||||
public String LGD_CUSTOM_FIRSTPAY { get; set; }
|
||||
public String LGD_KVPMISPAUTOAPPYN { get; set; }
|
||||
public String LGD_MTRANSFERAUTOAPPYN { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue