Search

REST API 비인증결제 방식(정기결제 또는 수기결제) 이용 방법 안내

Tags
속성
고객 카드정보를 미리 등록 해 두고 원하시는 시점에 결제를 요청하는 형태의 연동 방식
포트원에서 지원하는 비인증결제 방식(정기결제(또는 빌링결제)) 으로 이용가능합니다.
(예 : 정기구독/예약결제/종량제서비스(카쉐어링/킥보드대여 등 사용한 량에 따른 과금형태서비스)등에서 사용하는 방식)
비인증방식이다보니 PG입점 기준이 까다로울 수 있으며, PG가입신청하시어 입점상담 후 이용 부탁 드립니다.
[REST API를 이용한 방식(신용카드)]
- 지원PG사 : NHN KCP , 토스페이먼츠, 나이스페이먼츠, 핵토파이낸셜(세틀뱅크), 다우데이타(키움페이) , KSNET, 웰컴페이먼츠
※ 토스페이먼츠의 정기결제서비스는 “0.03%” 카드 수수료가 추가 적용되오니 이용에 참고 부탁 드립니다.
- PG사에서 제공하는 결제창 없이, API 통신으로 결제가 이루어지기 때문에 결제창을 직접 만드셔야하고, 직접 개발하시기 때문에 결제창 커스터마이징이 가능합니다.
결제 과정에서의 암호화를 필수로 하여 보안에 신경써주셔야한다는 차이가 있습니다.
<비인증결제 보안 적용 기준>
- PG사에서 보안관련해서 규정하고 있는 내용은 별도로 없습니다만,
브라우저 - 운영하시는 서버 - 아임포트 - PG사 의 순으로 데이터가 전달될텐데요,
브라우저 - 운영하시는 서버로 전송되는 구간에 SSL적용을 해주셔야 합니다.
카드데이터가 전송되는 구간은 https를 적용해 암호화된 통신을 제공하시는 것을 권장드립니다.
[참고]
- 사용자 동의 : 가맹점에서 직접 결제창 개발을 진행하는 방식이어서 결제시 해당 부분도 포함하여 개발 진행 부탁 드립니다.
- 나이스 비인증결제 서비스 적용중인 가맹점 예시 : 자비스(https://jobis.co/) , 눔코리아(http://noom.co.kr) , 렌고(http://rengo.co.kr/), 펫프렌즈(https://www.pet-friends.co.kr/ )
- 제이티넷 비인증결제 서비스 적용중인 가맹점 예시 : (주)리드젠 https://leadgen.kr/
[결제 연동관련]
- PG가입이전 테스트모드로 연동이 가능합니다.
1.
PG설정
<관리자콘솔 1.0>
포트원 관리자콘솔 https://classic-admin.portone.io/users/login 로그인 > 시스템설정 > PG설정(정기결제 및 키인결제)에서 PG사 선택 후 [카드사 심사개발용 계정설정] 클릭
- 참고 : PG사 계약완료후 실상점정보로 세팅 후 [저장] 바랍니다.
<나이스페이먼츠 설정화면예시>
<관리자콘솔 2.0>
포트원 관리자콘솔 https://admin.portone.io/ 로그인 > 결제연동 > 테스트연동관리 > 신용카드 선택 > 나이스페이먼츠 API 테스트상점값 자동설정
<나이스페이먼츠 설정화면예시>
2.
결제 연동
- 기술적인 동작 원리는, 카드번호 + 유효기간 + 생년월일 + 비밀번호 앞2자리정보를 등록해 카드사로부터 빌링키를 발급받고
원하시는 때에 해당 빌링키로 언제든지 재결제할 수 있는 방식입니다.
포트원 REST API를 통해 이 모든 과정을 진행하실 수 있으며, 빌링키는 포트원내 안전하게 보관하기 위해 직접 응답해드리지는 않으며
빌링키 발급 당시에 임의로 "카드당 고유한 Unique ID"인 customer_uid를 보내주시면 포트원 내부적으로 1:1로 매칭해놓고 처리하게 됩니다.
- API 테스트 페이지 : https://api.iamport.kr/
비인증방식의 결제는 크게 2가지가 있습니다.
1.
1회성 결제( ex. 키인결제)
2.
등록된 카드로 재결제(ex. 종량제서비스, 예약결제, 정기구독형 결제)
1번방식의 결제를 요청하는 API는 /subscribe/payments/onetime 입니다.
- customer_uid를 전달해주시면 결제 후 다음 번 결제를 위해 성공된 결제에 사용된 빌링키를 저장해두게되고, customer_uid가 없는 경우 저장되지 않습니다.
2번 방식의 빌링결제 의 경우 포트원에서는 두가지 방식이 지원 됩니다.
1) 결제가 필요한 시점에 요청하시는 방식(again api)
- POST /subscribe/customers/{customer_uid} 으로 빌링키 발급 후
- POST /subscribe/payments/again 로 결제 요청
2) 포트원에서 재결제(스케쥴러)를 요청하는 방식(schedule api)
schedule방식은 이미 최초에 사용자로부터 카드정보를 받아 빌링키를 발급해놓고(이것을 customer_uid에 매칭시켜놓고)  결제가 필요할 때 마다 customer_uid만 활용하는 방식으로,     
최초에 /subscribe/customers/{customer_uid} POST로 한 번 등록해두시면 schedule unschedule을 사용자 액션없이 자유롭게 처리하실 수 있습니다.       
- 최초 카드정보 등록으로 빌링키 발급 및 발급된 빌링키에 customer_uid로 1:1대응 후 아임포트 내 저장       
- 결제일자가 확정되는 시점에 schedule API로 일정 / 금액 / 결제할 customer_uid 등 지정       
- 해당 시각에 처리가 완료되면 성공/실패 여부를  webhook(Notification URL로 보내드립니다.) 으로 POST요청       
- 결제 성공이면 webhook에서 크레딧 증가 후 다음 schedule등록 API추가(실패면 다음날로 다시 등록) 날짜는 서비스 특성에 따라 다소 달라질 것 같기는 합니다만 날짜 문제를 없애기 위해 +N day 식으로 처리를 하고 있습니다.
<참고 - again api와 schedule api 장단점>
schedule api는 again api를 가맹점 대신에 포트원이 대신 수행해주고 결제 결과를 가맹점측에 웹훅으로 알려주는 API 입니다.
결제 결과는 [관리자페이지] → [시스템설정] → 웹훅(Notification) 설정에 작성하신 Notification URL을 통해 웹훅을 보내 드리기 때문에 정기결제를 구현함에 있어 그 로직이나 과정이 복잡하지 않고, 정해진 일자에 단순하게 결제가 이루어지기만 하면 될 경우 schedule API를 쓰셔서 웹훅으로 받은 결제 결과의 실패/성공에 따른 처리만 하시면 됩니다.
반면, 가맹점의 정기결제 서비스 로직 전/후에 수행해야하는 특별한 로직이 있거나 정기결제가 이루어지는 과정을 자유롭게 커스터마이징 하고 싶으시다면 구현하신것 처럼 cronjob을 직접 수행하여 again api 를 사용하셔도 무방합니다.
즉, 가맹점의 정기결제 로직이 복잡하지 않다면 schdule api를 사용하시길 권장드립니다.
<REST API 호출 시 권장되는 timeout>
Connection timeout / Read timeout : 50초