Webhook이란?
HTTP POST
로 알리는 개념을 말합니다. Webhook을 구현한 웹 애플리케이션은, 특정 작업이 수행될 때 URL
에 대해 POST
방식으로 요청을 생성합니다. 이 때, url(콜백 url)은 웹 애플리케이션을 사용하는 유저가 자신의 URL
을 지정할 수 있습니다.
유저의 입장에서는 지속적으로 데이터를 폴링(polling)하여 대부분의 경우 불필요한 정보를 받는 대신, webhook을 활용하여 중요한 이벤트가 발생했을 때에만 정보를 수신할 수 있습니다. 이를 활용하여 유저의 커스텀 기능이나 다른 애플리케이션과 통합하거나 기능을 확장할 수 있습니다.
paid
)ready
)paid
)paid
or failed
)cancelled
)POST
요청을 생성합니다. curl -H "Content-Type: application/json" -X POST -d '{ "imp_uid": "imp_1234567890", "merchant_uid": "order_id_8237352", "status": "paid" }' { NotificationURL }
POST
요청의 body에는 imp_uid
, merchant_uid
, status
속성이 포함되어있습니다. imp_uid
는 아임포트 주문번호, merchant_uid
는 가맹점 주문번호, 그리고 status
는 결제 결과를 나타냅니다.
콜백 url 에서 수신한 imp_uid
와 merchant_uid
를 통해 아임포트 REST API를 활용하여 결제 정보를 조회한 후, 해당 데이터를 가맹점 서버에 동기화할 수 있습니다.콜백 url 설정하기
url
을 입력하고 Content-Type
을 application/json
또는 application/x-www-form-urlencoded
으로 지정할 수 있습니다.localhost로 호출테스트는 못하나요?
localhost
의 경우 작업중인 머신(데스크탑, 랩탑) 혹은 같은 망을 공유하고 있는 경우만 접근 가능한 alias이기 때문에,
아임포트에서 localhost
로 호출 테스트를 위한 HTTP 요청을 보낼 방법이 없습니다.하지만 ngrok 이라는 서비스를 통해 localhost
를 외부망에서 접근 가능한 도메인으로 포워딩 시키면 로컬머신에서 개발중인 localhost
도 웹훅 호출 테스트가 가능합니다.
localhost:3000
으로 띄운 개발환경을 ngrok 을 이용해서 외부접근가능한 도메인으로 포워딩하는 예시입니다.
예시를 통해 생성된 도메인을 시스템 설정 > PG연동 설정 하단의 결제 직후 Notification URL에 입력하시면 정상적으로 테스트가 가능합니다.m_redirect_url
)을 생성합니다. 그러면 고객의 브라우저의 callback이 실행되거나 m_redirect_url
로 redirection될 때 결제 정보를 가맹점 서버에 전달합니다. 두가지 경로를 통해 결제 정보를 전달받은 가맹점 서버는 전달받은 정보를 활용하여 거래 정보를 가맹점 데이터베이스에 저장합니다.m_redirect_url
)을 수신했으나, 고객 결제 기기의 네트워크 불안정성, 브라우저의 갑작스러운 종료 등으로 인해 해당 url에 대한 GET
요청의 생성에 실패하는 경우가 발생할 수 있습니다. 따라서 webhook을 활용하여 아임포트 서버로부터 수신되는 결제 정보를 통해 데이터동기화 누락을 막을 수 있습니다./subscribe/payments/schedule
를 활용하여 미래 시점의 결제를 예약할 수 있습니다. 이때, 예약된 결제가 시도되면 webhook이 호출되어 결제 정보를 콜백 url에 대해 전달합니다. 이때 가맹점은 수신된 결제 정보를 통해 결제 성공여부를 확인하고 결제가 성공했으면 다음 결제를 예약하여 정기적인 결제를 구현할 수 있습니다.Webhook 구현 방법
52.78.100.19
- 52.78.48.223
따라서 Webhook호출로 인해 생성된 요청을 처리하는 엔드포인트에서는, 전달받은 요청 클라이언트의 IP가 위의 두 IP에 해당하는지 확인하여, 해당 요청을 아임포트가 생성한 것인지 판단할 수 있습니다. 요청의 IP가 위 두 IP가 아니라면, 무시하면 됩니다.IP가 추가될 수 있나요?