모바일 카드결제에 오류가 있다더군요.

확인결과 이니시스 모듈.

 

결제 테스트를 해보니 결제완료! 라고 뜨지만 어째선지 결제카드 정보를 못가져오더군요.

왱??????

 

결제정보가 저장되는 db를 확인하니 isp 결제는 카드번호 등등 정보를 잘 가져오는데,

그 이외엔 그냥 P_STATUS = "00" 과 tid 만 날라오는 상황.

뭐지?뭐지?

 

이니시스에서 제공하는 샘플 파일로 테스트 해봤더니 결제 ok와 결제카드 정보는 물론 결제완료 문자까지 잘 오는 상황...

대체 왜냐! 수십번의 결제 테스트 끝에 그리고 설치 메뉴얼 정독 끝에 또 그리고 검색 끝에 알아낸건

ISP 이외에 안전클릭 결제시엔 승인코드를 2번 주고받아야 한다는 것..........

 

근데 문제 사이트엔 한번밖에 주고받지 않았다...... 그러니 오류가 나지ㅠ

왜 코드를 빼먹은 거야ㅠ 작업자 누구냐ㅠㅠ

 

 

 

 

결제 모듈 로드시

P_NEXT_URL 는 ISP, 계좌이체,삼성월렛 제외한 VISA등 기타지불 수단시 진행되는 페이지고

P_RETURN_URL과 P_NOTI_URL는 ISP 결제시 진행되는 페이지.

 

그래서 P_NEXT_URL 에 넣어지는 경로에 아래와 같은 코드를 추가 삽입 했습니다.

 

Function BinaryToText(BinaryData, CharSet) 
 Const adTypeText = 2
 Const adTypeBinary = 1
 
 Dim BinaryStream
 Set BinaryStream = CreateObject("ADODB.Stream")
 
 '원본 데이터 타입
 BinaryStream.Type = adTypeBinary
 BinaryStream.Open
 BinaryStream.Write BinaryData
 
   ' binary -> text
 BinaryStream.Position = 0
 BinaryStream.Type = adTypeText
 
 ' 변환할 데이터 캐릭터셋
 BinaryStream.CharSet = CharSet
 
 '변환한 데이터 반환
 BinaryToText = BinaryStream.ReadText
End Function

 

 

post_data_temp = "P_MID="& request("P_MID") & "&P_TID="& request("P_TID")
 P_REQ_URL = request("P_REQ_URL")  
   'On Error Resume Next
   
   Set xmlHttp = Server.CreateObject("MSXML2.XMLHTTP")
   
    xmlHttp.open "post",P_REQ_URL, False
    xmlHttp.setRequestHeader "Connection", "close"
    xmlHttp.setRequestHeader "Content-Length", Len(post_data_temp)
    xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded;charset=euc_kr"
    xmlHttp.Send post_data_temp   
    statusText = xmlHttp.responseBody      

strData = BinaryToText(statusText, "euc-kr")       
    Set xmlHttp = nothing
   
    Dim obj_key,obj_name,obj_value_len,obj_value
    For Each obj_key In Split(strData,"&")
     obj_name    = LEFT(obj_key, instr(obj_key, "=")-1)
     obj_value_len = LEN(obj_key) - LEN(obj_name) -1
     obj_value   = RIGHT(obj_key, obj_value_len)
     
     execute(""&obj_name&"="""& obj_value &"""")
    Next

 

 

결제모듈을 띄워 카드결제를 완료하면 P_NEXT_URL 에 넣어졌던 경로로 이동되어

결제사에서 P_MID, P_TID, P_REQ_URL, P_STATUS, P_RMESG1 의 값이 넘어옵니다.

여기서 P_STATUS값을 찍어보면 "00"이 나옵니다.

이걸보고 결제성공^^ 하면 큰~일.

제가 접수받은 문제사이트처럼 결제는 성공했다고 뜨는데 실제결제는 안되는 문제가 발생합니다.

 

P_MID, P_TID 값을 MSXML2.XMLHTTP 이용하여 P_REQ_URL로 받은 경로로 다시 보내줍니다.

그럼 바이너리값으로 받아지는데 해당 정보를 찍어보면

 

P_STATUS=00&P_AUTH_DT=20141000000000&P_AUTH_NO=123456789&P_RMESG1=성공적으로 처리 하였습니다.&P_RMESG2=00&P_TID=INIMX_CARDINIpayTest20141020100000000&P_FN_CD1=03&P_AMT=1000&P_TYPE=CARD&P_UNAME=홍길동&P_MID=INIpayTest&P_OID=123456&P_NOTI=&P_NEXT_URL=http://www.test.co.kr/test.asp?idx=123456&P_MNAME=테스트회사&P_NOTEURL=&P_CARD_MEMBER_NUM=&P_CARD_NUM=123456*********0&P_CARD_ISSUER_CODE=00&P_....

 

라는 식으로 나온다. 너무 기니까 적당히 생략;

그 바이너리 값을 텍스트로 변경해준뒤, 다 잘라서 따로따로 변수로 만들어 줍니다.

(asp에서 execute 가 없었다면 난 어떻게 살았을까...ㅠㅠ)

 

이제 다시 P_STATUS 를 찍어보면 "00" 이 나옵니다. 이제서야 진짜 결제 성공!! ^0^

 

 

 

자 여기까지 도움을 주신 분들

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=56&MAEULNO=22&no=138736&ref=138736&page=3

 

http://thisgun.hosting.paran.com/thisgun/811

 

 

 

<비하인드 스토리..>

저렇게 코드를 다 넣구. 이제 완벽하다^^ 하구 실행해봤지만 오류.

????????왱????

알구봤더니 IF문에 == 이라고 집어넣음ㅋㅋㅋㅋㅋㅋㅋㅋ

php, asp, jsp 가리지않고 일하다보니 이런 사소한 문제로 오래도록 삽질하는 경우가 많아지네요.

어느 날은 보니 asp에 주석달아 놓는다는게 // 으로 달아놓음ㅋㅋㅋㅋ 미쳤어ㅠㅠㅠㅠ

아.... 하나의 언어만 쓰고싶다ㅠㅠㅠㅠㅠ

 

 

 

 

  1. Commented by 질문 at 2015.05.26 18:14 신고

    안녕하세요 검색하다가 문의드려요 ㅠㅠ
    저는 왜 p_return_url 로 넘어가기는 하는데 포스트 값이 하나도 없을가요 ㅠㅠ

    • Commented by Dazzling. at 2016.06.29 04:40 신고

      안녕하세요:) 늦은 답변입니다만.. 뭐라 말씀드리기 힘드네요; 넘어가는 값을 하나하나 잘 체크해보시라는 말 밖에는...;

  2. Commented by at 2016.05.13 09:42

    비밀댓글입니다

    • Commented by Dazzling. at 2016.06.29 04:44 신고

      안녕하세요:) 늦은 답변입니다;
      저는 jsp쪽은 주로 공기관쪽만 작업을해서 결제모듈을 달아본 경험이 없습니다. 저의 주작업 언어는 php. 서브가 asp,jsp 인지라..ㅜ

      게다가 제가 개인적인 사정으로 개발일을 꽤 오랫동안 쉬고 있는 중인지라 더 이상 도움을 드리기가 힘드네요.
      그 동안 해결방법을 찾으셨길..ㅠ