티스토리 뷰

728x90
반응형

국내에는 수많은 PG업체들이 있고 페이게이트도 그중 하나입니다.


굴지의 몇몇 PG업체들과 비교하면 국내에서는 규모가 작은 편이죠.


그런데 페이게이트가 나름(?) 유명(?)한건 액티브엑스에 맞서는 다윗이랄까 그런 존재감이 있습니다.


그래서 저한테 있어서 페이게이트는 근래에 인식이 나아진감이 있지만


솔직히 제 블로그에서도 몇년전에 페이게이트 기술적이나 비즈니스적으로 너무 구리다고 완전 험담을 썼었고


썩 좋은 기억이 있지는 않습니다.



특히 페이게이트 관리자모드가 굉장히 오류가 많았고, API문서의 허술함은 정말 혀를 내두르고 싶습니다.



페이게이트 결제 모듈 적용하는 분들이 페이게이트의 API문서만으로 부족하실 내용을 경험에 비추어 적어봅니다.


누군가에게 도움되면 좋겠네요.





거의 대부분의 온라인거래는 클라이언트측(사용자)에서 PG모듈을 통해 결제가 되고,


PG모듈이 결제결과를 해당 상점의 서버로 전송해주는데요,


이렇게 전송된 결제 정보를 그냥 그대로 믿으면 안되고


해당 결제 정보가 실제 결제정보가 맞는지, 금액도 일치하는지 검증하는 과정을 서버측에서 실시해야합니다.



검증과정을 건너뛰면 해커가 결제성공시 값을 반복적으로 보낼수 있기 때문에


해킹 위험에 노출되어 허위 결제를 마구 발생시킬수 있어요.


모바일 게임중에서 인앱해킹툴이 먹히는 게임들도 모두 서버측 검증 절차가 빠져서 그렇죠.




페이게이트도 결제 결과 검증을 위한 hash를 비교를 해야 하는데요.

이 과정에서 허술한 API에게 큰코를 다치게됩니다.




sha256 옵션을 켜자


멤버관리 → 서비스옵션 설정에서 Transaction result hash(SHA-256) 항목을 활성화 해야합니다.


활성화하면 sha256으로 암호화된 hash결과를 받을수 있답니다.



salt를 설정하자


hash 결과를 위한 salt를 설정해야합니다.


멤버관리 → 자기정보관리 에서 API인증 HASH 항목을 입력하세요.


이값이 sha256 hash결과를 만들때 salt값이 됩니다.


이 값은 절대 노출시키면 안됩니다.



결제 결과를 받을 URL을 설정하자



멤버관리 → 서비스옵션 설정에 Redirect the transaction result 라는 항목이 있는데


결제 후 이동할 URL을 지정할수 있습니다.


BackGround Redirect 사용
DisplayRedirect 사용
고정주문서용 Redirect 사용


항목들이 있는데 "BackGround Redirect 사용"과 "DisplayRedirect 사용"의 차이는 전혀 모르겠습니다.


그냥 고정주문서용 Redirect 사용을 활성화하면(옵션값은 빈값으로 둠)


페이게이트 결제 모듈이 실행되는 form의 action값으로 결과 값을 받을 url이 설정되는 것이니 이렇게 하셔도 됩니다.



TID는 뭐지?



result =  replycode + tid + mb_serial_no + org_amt + currency


API문서에서는 분명 TID를 전달해준다고 하는데 이 TID가 어디서 나오는 파라메터인지 알길이 없습니다.


예제소스에서도 TID에 대한 항목을 찾을수가 없고요.


이 TID정보를 받기 위해서는 페이게이트의 form 태그 안에 tid라는 name을 가진 input hidden 엘리먼트가 있어야 됩니다.


<input type="hidden" name="tid" id="tid" value="" />



mb_serial_no 는 뭐지?


result =  replycode + tid + mb_serial_no + org_amt + currency


mb_serial_no 라는 파라메터가 또 뜬금없이 등장하는데 이 파라메터는 상점이 가지고 있는 주문번호를 넣으라는 입력값입니다.


마찬가지로 해당 속성값을 가지고 있는 input 엘리먼트를 결제 form 안에 넣어두면 됩니다.


<input type="hidden" name="mb_serial_no" id="mb_serial_no" value="" />



상점의 주문번호를 결제전에 만들지 않고 결제후에 insert된 레코드에 따라 auto increment된 값을 사용하는 곳이라면


딱히 쓰지 않아도 됩니다.


이 값을 사용하지 않되 나중에 hash를 만들때 해당 값을 빼고 해쉬를 만들면 됩니다.



자 이제 결제 검증을 위해 해쉬코드가 요청하는 파라메터들이 다 모였습니다.




모든 결제과정은 반드시 서버측에서 검증해야한다는거. 다시한번 강조강조.



해쉬는 어떻게 만들죠?



이것도 API에 설명이 부족해요.


마치 SALT값을 마지막에 붙이라는 식으로 설명이 되어있어요



해쉬는 이렇게 문자열이 합쳐진 결과를 sha256으로 암호화한 값입니다.


result =  salt + replycode + tid + mb_serial_no(없어도됨) + org_amt + currency



php의 경우


$check_hashresult = hash('sha256', $salt.$replycode.$tid.$mb_serial_no.$unitprice.$goodcurrency);


hash함수를 써서 만들면 됩니다.



이렇게 해서 만든 해쉬를



페이게이트가 보내준 결과 파라메터중 hashresult와 비교해서 값이 일치한다면 결제가 유효한것이고


일치하지 않는다면 결제가 유효하지 않은 것입니다.





팁1. 트랜잭션을 서버측에서 종료시키기


페이게이트의 결제가 발생하고 실제로 상점에서 해당 결제에 대한 결과를 자체 DB에 insert한후에 해당 주문거래에 대한 트랜잭션이 완전히 종료했다고 표시하는것이 유용합니다.


뭐 굳이 적용하지 않아도 실제 페이게이트의 거래내역과 우리 상점에 기록된 거래내역을 비교해서 보면 되긴합니다만


서버측 오류나 이러한 사유로 결제는 발생하였으나 실제 상점의 DB에 결제 결과가 입력되지 않았을때를 이르 빠르고 쉽게 확인하여 대비해야하기 때문에 해두는게 좋습니다.


트랜잭션종료도 클라이언트에서 페이게이트의 javascript함수호출을 통해 할수 있지만 굳이 클라이언트에서 해야할 이유가 없다면 서버측에서 DB insert가 끝나고 하시면 됩니다.


친절한 PHP 예제 소스코드입니다.


페이게이트의 트랜잭션 종료 url이 tid파라메터와 함께 호출되면 해당 tid의 트랜잭션이 종료됩니다.


httpcode응답이 200이 오면 성공입니다.



$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://service.paygate.net/admin/settle/verifyReceived.jsp?tid='.$tid.'&verifyNum=100');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);



팁2. 결제후 고객에게 메일보내기


결제 후 결제한 고객에게 메일 또는 문자메시지를 보내기 위해서는


아래의 input 엘리먼트를 값을 담아 페이게이트 결제 form에 위치해두면 됩니다.


<input type="hidden" name="receipttoname" value="이름" />
<input type="hidden" name="receipttotel" value="연락처" />
<input type="hidden" name="receipttoemail" value="이메일" />


이 값이 있으면 상대방에게 결제 결과가 자동으로 전송이 됩니다.


문자메시지는 유료결제를 해야될거예요.



팁3. 해쉬결과가 계속 일치하지 않을때


페이게이트의 해쉬가 계속 일치하지 않는 고생을 했었는데요.


관리자도구에서 입력한 salt값이 페이게이트에 제대로 적용이 되지 않아서 고생을 했었네요.


여러분도 혹시 해쉬가 계속 일치하지 않는다면 여러분이 입력한 salt값이 제대로 저장이 안된것일수도 있으니 페이게이트측에 문의해보세요.







이상 깨알같은 팁까지 페이게이트 모듈 적용의 경험담을 적어보았습니다.


아무쪼록 여러분이 운영하시는 온라인상점도 대박나시길 기원합니다.


페이게이트 너 이자식 내가 블로그도 썼다. 엑티브액스 맞서서 힘내라 짜식.


728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함