모듈 연동

스마트로페이 결제모듈 연동을 위한 가이드입니다
- 해당 메뉴얼의 Parameter 들은 가맹점에 통보 없이 응답값이 추가 될 수 있습니다. 응답값 추가도 고려하여 개발 진행하시길 권장합니다 .

재통보

고객이 결제결과를 정상적으로 통보받지 못했을 경우, 회원사의 웹 페이지를 호출하여 결제결과를 재통보하는 서비스입니다.
가맹점 서버의 환경이나 고객의 브라우저 조작 형태에 따라 결제결과가 정상적으로 통보되지 않을 수 있으니,
가맹점에서는 재통보 URL을 설정하시는 것을 권장드립니다.
스마트로페이 SERVER IP
스마트로페이 서비스 IP 정보입니다.
구분 IP 비고
테스트 211.193.35.11 STG
운영 - 결제 211.193.35.20
운영 - 재통보 211.193.35.215 재통보 서비스 사용시

재통보 URL 설정 가이드
① 스마트로페이 Real 가맹점관리자 사이트(https://www.smilebiz.co.kr) 접속 후 로그인
스마트로페이 Staging 가맹점관리자 사이트(https://newbiz.smilebiz.co.kr) 접속 후 로그인
(관리자 사이트 계정은 영업담당자를 통해 Mid를 등록한 후 제공됩니다.)

② 좌측 메뉴의 가맹점 > 가맹점정보 > 기본정보 하단의 '결제 데이터 통보' 에서 지불수단별로 재전송 URL과 재전송간격, 재전송횟수 설정
기존 PG모듈을 이용하는 경우(smilepay.co.kr) -> 구통보 선택
신규 PG모듈을 이용하는 경우(smartropay.co.kr) -> 신통보 선택 (파라미터 명명규칙이 다릅니다.)


GID 결제데이터 통보 정보 일괄변경
GID 권한이 부여된 가맹점관리자 계정으로 로그인하면 GID 일괄변경 버튼을 통해 GID에 매핑 된 MID의 결제데이터 통보 관련 정보를 일괄수정 가능합니다.
① GID 권한 계정으로 가맹점관리자 로그인시 아래의 버튼이 노출됩니다.
② 일괄변경 대상 결제수단을 선택하면 해당 결제수단을 이용하는 MID 리스트가 노출되며, 수정 대상 MID체크 후 관련 정보를 모두 입력합니다.




③ 정보 입력 후 Save 버튼 클릭시 일괄 저장되며, 실시간 반영되어 보여집니다.


④ MID 체크 후 삭제 버튼 클릭시, 실시간 반영되어 보여집니다.


파라미터 항목명 길이(char) 필수여부 설명
PayMethod 지불수단 10 필수 CARD(신용카드), BANK(계좌이체), VBANK(가상계좌 채번 및 입금통보), CASHRCPT(현금영수증)
Mid 상점 ID 20 필수
Amt 금액 12 필수
BuyerName 구매자명 30 필수
BuyerEmail 구매자 Email 60 필수
BuyerTel 구매자 연락처 40 필수
GoodsName 상품명 40 필수
Tid 거래번호 30 필수
Otid 원거래 거래번호 30 필수 부분취소의 경우 원거래의 TID값을 셋팅
Moid 상품주문번호 40 필수
AuthDate 승인 및 취소일시 12 필수 승인거래: 승인일자 전달, 취소거래: 취소일자 전달
AuthCode 승인번호 30 필수
ResultCode 결과코드 4 필수
ResultMsg 결과메시지 100 필수
StateCd 승인취소구분 1 필수 0: 승인, 1: 전취소, 2: 후취소, 3: 가상계좌채번
FnCd 결제카드사코드 3 필수 신용카드: 결제카드사코드, 가상계좌: 가상계좌은행코드
FnName 결제카드사명 10 필수 신용카드: 결제카드사명, 가상계좌: 가상계좌은행명
SignValue 위·변조 사인값 가변 필수
MallUserId 회원사고객 ID 20 선택
MallReserved 상점예비정보 500 선택
신용카드
AppCardCode 발급사코드 2 선택 신용카드 결제시 전송
AppCardName 발급사명 20 선택 신용카드 결제시 전송
AcquCardCode 매입사코드 2 선택 신용카드 결제시 전송
AcquCardName 매입사명 20 선택 신용카드 결제시 전송
CardMerchantNo 카드사가맹점번호 15 선택 신용카드 결제시 전송
CardNum 카드번호 16 선택 신용카드 결제시 전송(마스킹 처리되어 전달함)
CardQuota 할부개월 2 선택 신용카드 결제시 전송
CardInterest 무이자 여부 2 선택 신용카드 결제시 전송, 0:일반, 1:카드사 무이자, 2:상점 무이자
CardUsePoint 할인(포인트)금액 9 선택 할인금액 전송대상일 경우 전송
BalancePoint 할인(포인트)잔여금액 9 선택 할인잔여 금액 전송대상일 경우 전송
계좌이체
BankCode 은행코드 2 선택 계좌이체 결제시 전송
BankName 은행명 20 선택 계좌이체 결제시 전송
가상계좌
VbankCode 가상계좌 은행코드 2 선택 가상계좌 결제시 전송
VbankName 가상계좌은행명 20 필수 가상계좌 결제시 전송
VbankNum 가상계좌번호 20 필수 가상계좌 결제시 전송
VbankInputName 가상계좌 입금자명 선택 가상계좌 결제시 전송
현금영수증
ReceiptType 현금영수증유형 1 선택 0: 미발행, 1: 소득공제, 2: 지출증빙
RcptAppNo 현금영수증 승인번호 20 선택
RcptCcNo 현금영수증 취소번호 20 선택
파라미터 항목명 길이(char) 필수여부 설명
PayMethod 지불수단 10 필수 VBANK:가상계좌 입금통보
MID 상점 ID 20 필수
Amt 금액 12 필수
Name 구매자명 30 필수
GoodsName 상품명 40 필수
TID 거래번호 30 필수
OTID 원거래 거래번호 30 필수 부분취소의 경우 원거래의 TID값을 셋팅
OID 상품주문번호 40 필수
AuthDate 승인 및 취소일시 12 필수 승인거래: 승인일자 전달, 취소거래: 취소일자 전달
AuthCode 승인번호 30 필수
ResultCode 결과코드 4 필수
ResultMsg 결과메시지 100 필수
StateCd 승인취소구분 1 필수 0: 승인, 1: 전취소, 2: 후취소, 3: 가상계좌채번
FnCd 결제카드사코드 3 필수 신용카드: 결제카드사코드, 가상계좌: 가상계좌은행코드
FnName 결제카드사명 10 필수 신용카드: 결제카드사명, 가상계좌: 가상계좌은행명
pinNo 카드번호 16 선택 카드번호 일부 마스킹 처리
CardQuota 할부개월수 2 선택 00: 일시불
BuyerEmail 구매자이메일주소 100 필수
BuyerTel 구매자전화번호 40 필수
BuyerAuthNum 구매자주민번호 13 선택 주민번호 일부 자리만 전달
VbankNum 가상계좌번호 20 필수 가상계좌 거래 시 설정
VbankName 가상계좌은행명 20 필수 가상계좌 거래 시 설정
SignValue 위·변조 사인값 가변 필수
MallUserID 회원사고객 ID 20 선택
ReceiptType 현금영수증유형 1 선택 0: 미발행, 1: 소득공제, 2: 지출증빙
RcptAppNo 현금영수증 승인번호 20 선택
RcptCcNo 현금영수증 취소번호 20 선택
CardUsePoint 할인금액 10 선택

ResultCode에 따른 결제통보 처리 프로세스


                    
//구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
//아래의 파라미터명은 구통보 파라미터입니다.
boolean result = false;
String PayMethod        = request.getParameter("PayMethod");
String Mid              = request.getParameter("MID");
String MallUserID		= request.getParameter("MallUserID");
String Amt				= request.getParameter("Amt");
String Name				= request.getParameter("Name");
String GoodsName		= request.getParameter("GoodsName");
String TID				= request.getParameter("TID");
String OTID				= request.getParameter("OTID");
String OID				= request.getParameter("OID");
String AuthDate			= request.getParameter("AuthDate");
String AuthCode			= request.getParameter("AuthCode");
String ResultCode		= request.getParameter("ResultCode");
String ResultMsg		= request.getParameter("ResultMsg");
String StateCd			= request.getParameter("StateCd");
String FnCd				= request.getParameter("FnCd");
String FnName			= request.getParameter("FnName");
String pinNo			= request.getParameter("pinNo");
String CardQuota		= request.getParameter("CardQuota");
String BuyerEmail		= request.getParameter("BuyerEmail");
String BuyerTel			= request.getParameter("BuyerTel");
String BuyerAuthNum		= request.getParameter("BuyerAuthNum");
String VbankNum			= request.getParameter("VbankNum");
String VbankName		= request.getParameter("VbankName");
String ReceiptType		= request.getParameter("ReceiptType");
String RcptAppNo		= request.getParameter("RcptAppNo");
String RcptCcNo			= request.getParameter("RcptCcNo");
String CardUsePoint		= request.getParameter("CardUsePoint");
String SignValue		= request.getParameter("SignValue");

String merchantKey = ""; // 발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
String VerifySignValue = encodeSHA256Base64(TID.substring(0, 10) + ResultCode +TID.substring(10, 15) + merchantKey + TID.substring(15, TID.length()));

//검증에 성공했을 경우
if(SignValue.equals(VerifySignValue)) {

  	  if("3001".equals(ResultCode)){ //CARD
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }

 	  if("4000".equals(ResultCode)){ //BANK
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("4100".equals(ResultCode)){ //VBANK 채번완료
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("4110".equals(ResultCode)){ //VBANK 입금완료
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("A000".equals(ResultCode)){ //CELLPHONE
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("7001".equals(ResultCode)){ //현금영수증
 	     // 결제 성공시 DB처리
 	     // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("2001".equals(ResultCode)){ //결제 취소
 	     // 취소 성공시 DB처리
 	     //TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
 	     //if(DB 처리 및 내부처리 로직 성공시) {
 	        result = true;
 	     //}
 	  }
 	  if("2211".equals(ResultCode)){ //환불

 	  }
 	  if("2013".equals(ResultCode)){ //기취소 거래

  	  }
}

// SHA256 암호화 함수
public static final synchronized String encodeSHA256Base64(String strPW) {
    String passACL = null;
    MessageDigest md = null;

	try {
	    md = MessageDigest.getInstance("SHA-256");
    } catch (Exception e) {
		e.printStackTrace();
	}

	md.update(strPW.getBytes());
	byte[] raw = md.digest();
	byte[] encodedBytes = Base64.encodeBase64(raw);
	passACL = new String(encodedBytes);

	return passACL;
}
                
                    
//구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
//아래의 파라미터명은 구통보 파라미터입니다.
$result			= false;
$PayMethod		= $_REQUEST['PayMethod']; 	//지불수단
$MID			= $_REQUEST['MID'];			//상점 ID
$MallUserID     = $_REQUEST['MallUserID'];	//고객ID
$Amt			= $_REQUEST['Amt'];			//금액
$Name			= $_REQUEST['Name'];		//구매자명
$GoodsName		= $_REQUEST['GoodsName'];	//상품명
$TID            = $_REQUEST['TID'];			//거래번호
$OTID           = $_REQUEST['OTID'];		//원거래거래번호
$OID			= $_REQUEST['OID'];			//주문번호
$AuthDate       = $_REQUEST['AuthDate'];	//승인 및 취소일시
$AuthCode		= $_REQUEST['AuthCode'];	//승인번호
$ResultCode		= $_REQUEST['ResultCode'];	//결과코드
$ResultMsg		= $_REQUEST['ResultMsg'];	//결과메시지
$StateCd		= $_REQUEST['StateCd'];		//승인취소구분
$FnCd			= $_REQUEST['FnCd'];		//결제카드사코드
$FnName			= $_REQUEST['FnName'];		//결제카드사명
$pinNo			= $_REQUEST['pinNo'];		//카드번호
$CardQuota		= $_REQUEST['CardQuota'];	//할부개월수
$BuyerEmail		= $_REQUEST['BuyerEmail'];	//구매자이메일
$BuyerTel		= $_REQUEST['BuyerTel'];	//구매자전화번호
$BuyerAuthNum	= $_REQUEST['BuyerAuthNum'];//구매자주민번호
$VbankNum		= $_REQUEST['VbankNum'];	//가상계좌번호
$VbankName		= $_REQUEST['VbankName'];	//가상계좌은행명
$ReceiptType	= $_REQUEST['ReceiptType'];	//현금영수증유형
$RcptAppNo		= $_REQUEST['RcptAppNo'];	//현금영수증승인번호
$RcptCcNo		= $_REQUEST['RcptCcNo'];	//현금영수증취소번호
$CardUsePoint	= $_REQUEST['CardUsePoint'];//사용포인트(국민카드전용)
$SignValue		= $_REQUEST['SignValue'];	//위변조 사인값

$MerchantKey = ""; // 발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
$VerifySignValue = base64_encode(hash('sha256', substr($TID,0,10).$ResultCode.substr($TID,10,5).$MerchantKey.substr($TID,15,15),true));

//위변조 검증
if($SignValue == $VerifySignValue){

    if("3001" == $ResultCode){ //CARD
	    // 결제 성공시 DB처리 하세요.
	    // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
	    //if(DB 처리 및 내부처리 로직 성공시) {
		    $result = true;
	    //}
 	}

    if("4000" == $ResultCode){ //BANK
 	    // 결제 성공시 DB처리 하세요.
 	    // TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
    }
 	if("4100" == $ResultCode){ //VBANK 체번완료
 	    // 결제 성공시 DB처리 하세요.
		// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
 	}
 	if("4110" == $ResultCode){ //VBANK 입금완료
 	    // 결제 성공시 DB처리 하세요.
		// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
 	}
 	if("A000" == $ResultCode){ //cellphone
 	    // 결제 성공시 DB처리 하세요.
		// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
 	}
 	if("7001" == $ResultCode){ //현금영수증
 	    // 결제 성공시 DB처리 하세요.
		// TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
 	}
 	// 결제 취소
 	if("2001" == $ResultCode){
 	    // 취소 성공시 DB처리 하세요.
		//TID 결제 취소한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		//if(DB 처리 및 내부처리 로직 성공시) {
			$result = true;
		//}
 	}
 	if("2211" == $ResultCode){
 	     // 환불
 	}
 	if("2013" == $ResultCode){
  	     // 이미(기) 취소 거래임
  	}
}
                
                    
'구통보와 신통보의 파라미터 명명규칙이 다르므로 확인이 필요합니다.
'아래의 파라미터명은 구통보 파라미터입니다.
result			= ""						'가맹점 DB 처리 및 내부처리 로직 성공 여부
PayMethod		= request("PayMethod")		'지불수단
merchantID		= request("MID")			'상점 ID
MallUserID      = request("MallUserID")		'회원사고객 ID
Amt				= request("Amt")			'금액
Name			= request("Name")			'구매자명
GoodsName		= request("GoodsName")		'상품명
TID             = request("TID")			'거래번호
OTID            = request("OTID")			'원거래 거래번호
OID				= request("OID")			'주문번호
AuthDate        = request("AuthDate")		'승인 및 취소 일시
AuthCode		= request("AuthCode")		'승인번호
ResultCode		= request("ResultCode")		'결과코드
ResultMsg		= request("ResultMsg")		'결과메시지
StateCd			= request("StateCd")		'승인취소구분
FnCd			= request("FnCd")			'결제카드사코드
FnName			= request("FnName")			'결제카드사명
pinNo			= request("pinNo")			'카드번호
CardQuota		= request("CardQuota")		'할부개월수
BuyerEmail		= request("BuyerEmail")		'구매자이메일주소
BuyerTel		= request("BuyerTel")		'구매자전화번호
BuyerAuthNum	= request("BuyerAuthNum")	'구매자주민번호
VbankNum		= request("VbankNum")		'가상계좌번호
VbankName		= request("VbankName")		'가상계좌은행명
ReceiptType		= request("ReceiptType")	'현금영수증유형
RcptAppNo		= request("RcptAppNo")		'현금영수증승인번호
RcptCcNo		= request("RcptCcNo")		'현금영수증취소번호
CardUsePoint	= request("CardUsePoint")	'할인금액
SignValue		= request("SignValue")		'위변조 사인값

merchantKey = ""	'발급받은 테스트 상점키 설정(Real 전환 시 운영 상점키 설정)
VerifySignValue = CryptoUtil.Sha256Encrypt(Mid(TID,1,10) & ResultCode&Mid(TID,11,5) & merchantKey & Mid(TID,16,15))

'위변조 검증
 IF SignValue = VerifySignValue Then

    IF ResultCode = "3001" Then	'CARD
        '승인 성공 시 DB 처리 하세요.
        'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
        response.write "결제성공"
        //IF(DB 처리 및 내부처리 로직 성공시)
            result = "OK"
	    //end if
	Elseif ResultCode = "4000" Then	'BANK
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "결제성공"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
	    //end if
	Elseif ResultCode = "4100" Then	'VBANK 체번완료
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "가상계좌발급완료"
		//IF(DB 처리 및 내부처리 로직 성공시)
		    result = "OK"
		//end if
	Elseif ResultCode = "4110" Then	'VBANK 입금완료
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "가상계좌입금완료"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
		//end if
	Elseif ResultCode = "A000" Then	'cellphone
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "결제성공"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
		//end if
	Elseif ResultCode = "7001" Then	'현금영수증
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "현금영수증처리완료"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
		//end if
 	Elseif ResultCode = "2001" Then	'결제 취소
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "결제취소성공"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
		//end if
 	Elseif ResultCode = "2211" Then '계좌이체 결제환불
 	    '승인 성공 시 DB 처리 하세요.
		'TID 결제 성공한 데이터 존재시 UPDATE, 존재하지 않을 경우 INSERT
		response.write "결제환불성공"
		//IF(DB 처리 및 내부처리 로직 성공시)
			result = "OK"
		//end if
 	Elseif ResultCode = "2013" Then
		'이미(기) 취소 거래임
	end if

	'IF DB 처리 및 내부처리 로직 성공시 Then
		result = "OK"
	'end if
end if
                


DB 처리 및 내부처리 로직 성공시 OK 출력


								
									
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"/>
</head>
	<body>
		OK
	</body>
</html>
									
								
							


INDEX

FAQ
기술 지원 문의
1:1 문의는 아래 이메일로 보내주세요.
필요정보 Mid
Moid or Tid
거래 일시
: