EBP API Docs v0.5.12
KR

Webhook - 결제 캡처 완료 #

1. Webhook Overview #

Purpose #

승인(Authorization)된 결제 건에 대해 실제 매입(Capture) 처리가 성공적으로 완료되었을 때 EBP 시스템에서 상점으로 전송하는 Webhook 이벤트입니다.
이 이벤트를 통해 상점은 결제 대금이 최종적으로 확보되었음을 확인하고 후속 처리를 진행할 수 있습니다.

참고: Webhook 수신을 위해 URL 등록이 필요합니다. (문의: ebp-server@lge.com)

Details #

항목
Webhook Name결제 캡처 완료
Event TypePAYMENT_CAPTURED
HTTP MethodPOST
RegionGlobal

2. Authentication #

EBP 시스템에서 전송하는 모든 Webhook 요청은 무결성 검증을 위해 다음 헤더를 포함합니다. 상점은 해당 값을 확인하여 요청의 유효성을 반드시 검증해야 합니다.

헤더명설명
x-webhook-signatureWebhook 메시지의 무결성을 검증하기 위한 HMAC-SHA256 시그니처
x-webhook-signature-timestampWebhook 이벤트가 전송된 시점의 타임스탬프 (Unix Epoch, seconds)

Signature 생성 및 검증 규칙 #

상점은 수신한 Webhook의 바디(Body) 데이터와 타임스탬프 헤더 값을 조합하여 직접 시그니처를 생성한 뒤, 전송받은 x-webhook-signature 값과 일치하는지 비교해야 합니다.

  1. Input Message 구성: x-webhook-signature-timestamp 헤더 값 + "." + 원본 Request Body (JSON String)
  2. 해싱 (Hashing): 구성된 메시지를 HMAC-SHA256 알고리즘과 EBP에서 발급받은 Webhook Secret Key를 사용하여 해싱합니다.
  3. 인코딩 (Encoding): 해싱 결과를 **Hex 문자열(Hexadecimal)**로 변환합니다.
  4. 검증: 생성한 Hex 문자열과 x-webhook-signature 헤더 값이 동일한지 확인합니다.

검증 예제 (Java) #

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HexFormat;

public class WebhookVerifier {
    private static final String HMAC_SHA256 = "HmacSHA256";

    /**
     * Webhook 시그니처 검증 메서드
     *
     * @param secretKey     EBP에서 발급받은 Webhook Secret Key
     * @param timestamp     x-webhook-signature-timestamp 헤더 값
     * @param requestBody   수신한 HTTP Request Body (JSON 문자열)
     * @param receivedSig   x-webhook-signature 헤더 값
     * @return 검증 성공 여부
     */
    public boolean verifySignature(String secretKey, String timestamp, String requestBody, String receivedSig) {
        if (timestamp == null || receivedSig == null || secretKey == null || secretKey.isEmpty()) {
            return false;
        }

        try {
            String inputMessage = timestamp + "." + requestBody;
            
            Mac mac = Mac.getInstance(HMAC_SHA256);
            SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), HMAC_SHA256);
            mac.init(secretKeySpec);
            
            byte[] hashBytes = mac.doFinal(inputMessage.getBytes(StandardCharsets.UTF_8));
            String generatedSig = HexFormat.of().formatHex(hashBytes);
            
            return generatedSig.equalsIgnoreCase(receivedSig);
        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
            // log.error("Failed to verify EBP webhook signature", e);
            return false;
        }
    }
}

[!IMPORTANT]
Webhook Secret Key는 EBP를 통해 발급받아야 하며, 관련 문의는 ebp-server@lge.com으로 연락 주시기 바랍니다. 시그니처 검증이 실패할 경우 해당 요청은 신뢰할 수 없는 요청으로 간주하고 무시해야 합니다.

3. Data Schema #

3.1. Payload Data Schema #

depthFieldDetails & Description
-1eventType

string

🔴 Required

이벤트 유형

e.g., PAYMENT_CAPTURED
-1eventTime

string

🔴 Required

이벤트 발생 시각

e.g., 2025-12-30T07:19:28Z
-1data

object

🔴 Required

캡처 상세 데이터

0orderNo

string

🔴 Required

EBP 주문 번호

e.g., ORD_7202603277730794
0paymentStatus

string

🔴 Required

결제 상태 코드

e.g., CAPTURED, FAIL
0capturedAmount

string

🔴 Required

최종 캡처(매입) 금액

e.g., 1250000
0currencyCode

string

🔴 Required

통화 코드. ISO 4217

e.g., KRW
0exponent

number

🔴 Required

통화 소수점 자리수

e.g., 0
0resultCode

string

🔴 Required

EBP 결과 코드 ('0': 성공)

e.g., 0
0resultMessage

string

Optional

결과 메시지

e.g., SUCCESS
0capturedAt

string

🔴 Required

EBP 캡처 완료 일시

e.g., 2025-12-30T07:19:28Z
0pgProvider

string

🔴 Required

결제 PG사 코드

e.g., WORLDPAY, CHECKOUT

3.2. Payload 예시 #

HTTP Request #

POST /your-webhook-endpoint HTTP/1.1
Content-Type: application/json
x-webhook-signature: 25f0e... (HMAC-SHA256 Hex String)
x-webhook-signature-timestamp: 1735543168 (Unix Epoch Seconds)

{
  "eventType": "PAYMENT_CAPTURED",
  "eventTime": "2025-12-30T07:19:28Z",
  "data": {
    "orderNo": "ORD_7202603277730794",
    "paymentStatus": "CAPTURED",
    "capturedAmount": "1250000",
    "currencyCode": "KRW",
    "resultCode": "0",
    "resultMessage": "SUCCESS",
    "capturedAt": "2025-12-30T07:19:28Z",
    "pgProvider": "WORLDPAY"
  }
}
Last updated: 2026-04-24 07:45:12 © 2026 LG Electronics Inc. All rights reserved.