본문으로 건너뛰기

사용자 인증 - Use Cases

이 문서는 인증 방식별 사용자 흐름을 OCPP 버전별로 분리하여 설명합니다.

OCPP v1.6

인증 흐름 공통 규칙

EVSE는 사용자로부터 인증과 관련된 입력을 받으면 적절한 형식으로 Authorize.req 또는 DataTransfer:com.skelectlink:Authorize를 CSMS로 발송하여야 합니다.

사용자 인증에서 Accepted 응답을 받지 못해 충전중으로 넘어가지 못한 경우(2단계 인증/연계 화면 제외), 반드시 StatusNotification.reqstatusAvailable로 전환하여야 합니다. 그러지 아니할 경우 서버는 점유상태가 풀리지 않은 것으로 간주하여, 인증 중 진행했던 중간 과정의 정보를 계속해서 지니게됩니다.

카드 태깅

SK일렉링크 회원과 로밍사 회원을 위한 인증 방식입니다.

Authorize.req 방식

  1. User: User가 멤버십 카드를 RFID Reader에 태깅합니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. Authorize.req에 카드 번호를 입력하여 CSMS로 전송합니다.
  4. Authorize.confidTagInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.

DataTransfer:com.skelectlink:Authorize 방식

  1. User: User가 멤버십 카드를 RFID Reader에 태깅합니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "1010010187549971",
"type": "ISO14443"
}
}
}

idToken에는 카드 번호를 입력합니다.

  1. DataTransfer 응답의 status=Accepted이고, data.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.

카드번호 직접 입력

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 HMI에서 [카드번호 직접 입력]를 누릅니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. User: User가 HMI에서 카드 번호와 비밀번호를 입력합니다.
  4. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "1800100000201245",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "0020",
"type": "ManualCardNumber"
}
]
}
}
}

idToken에는 카드 번호를, additionalIdToken에는 사용자가 입력한 비밀번호를 입력합니다.

  1. DataTransfer 응답의 status=Accepted이고, data.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.

맥인증

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 EVSE Connector를 EV에 연결합니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. HLC(High-Level Communication) 후 PLC(Power Line Communication)를 통해 SLAC(Signal Level Attenuation Characterization) 프로세스 수행이 가능한지 확인합니다. 이 과정에서는 사용자 인증 중 화면이 표시되어야합니다.
  4. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "00-1A-2B-3C-4D-5E",
"type": "MacAddress"
}
}
}

idToken에는 MAC 주소를 16진수 문자 그대로 하이픈으로 분리하여 입력합니다.

  • 성공: DataTransfer 응답의 data.idTokenInfo.status=Accepted로 응답받습니다.
    1. 충전 준비 화면
  • 실패: data.idTokenInfo.status=Blocked로 응답받습니다.
    1. 화면에 data.idTokenInfo.personalMessage.content 내용을 사용자에게 표시합니다.
    2. 일정 시간 노출 후 화면 초기화
  • 실패: data.idTokenInfo.status=NotAtThisTime으로 응답받습니다.
    1. 맥인증 등록 시퀸스 진행

맥인증 등록

SK일렉링크 회원과 로밍사 회원을 위한 인증 방식입니다.

  1. 화면에 오토차지(AutoCharge) 차량으로 등록할 것이냐고 물어봅니다. 취소시 화면 초기화
  2. User가 동의시, 카드 태깅 입력을 받습니다:
    • 카드 태깅
      1. User: User가 멤버십 카드를 RFID Reader에 태깅합니다.
      2. MAC 주소와 카드 정보를 함께 등록 요청:
예시
{
"vendorId": "com.skelectlink",
"messageId": "MacRegister",
"data": {
"macAddress": "00-1A-2B-3C-4D-5E",
"cardNumber": "04D2A91234567890"
}
}
  1. status=Accepted이고 data.success=true인 경우 등록 성공
  2. EVSE는 즉시 충전 준비 화면을 표시합니다.

CarPay 인증

현대/기아/제네시스 고객을 위한 비회원 인증 방식입니다.

CarPay는 사용자가 EVSE HMI에서 [CarPay]를 선택한 뒤 커넥터를 연결하고, EVSE와 EV가 PLC 통신을 통해 EVSE-ID 기반 연계를 수행할 수 있으면 자동 경로로 진행됩니다.

EVSE-ID 기반 자동 연계를 진행할 수 없는 EVSE 또는 EV인 경우에만 수동 fallback 절차를 사용합니다. 수동 fallback에서는 사용자가 차량번호 뒷 4자리를 입력하고, EVSE는 CSMS가 반환한 전체 차량번호를 사용자에게 확인받은 뒤 원격 충전 시작 명령을 기다립니다.

정보

CarPay 선택 후 커넥터 잠금 해제나 커넥터함 개방이 필요한 EVSE는 [CarPay] 선택 시점에 커넥터 연결 가능 상태로 전환해야 합니다. 이 동작은 EVSE 하드웨어 구현에 따라 다를 수 있으므로, OCPP 메시지로 별도 보고하지 않아도 됩니다.

  1. User: User가 EVSE HMI에서 [CarPay]를 선택합니다.
  2. 즉시 StatusNotification.req의 status를 Preparing으로 전환하여야 합니다.
  3. User: User가 커넥터를 EV에 연결합니다.
  4. EVSE는 EV와 PLC 통신을 수행하고 EVSE-ID 기반 연계를 시도합니다.

CarPay 자동 인증 (EVSE-ID 지원)

  1. EVSE-ID 기반 연계가 가능한 경우, EVSE는 별도의 차량번호 입력 화면을 표시하지 않습니다.
  2. RemoteStartTransaction.req 를 최대 60초간 대기합니다.
CarPay 원격 시작 구분

CarPay 자동 인증 이후 서버에서 내려오는 원격 시작 명령에는 별도의 CarPay 전용 구분자가 포함되지 않습니다. EVSE는 해당 명령을 일반 원격 시작 명령과 동일하게 처리해야 하며, OCPP 프레임만으로 CarPay 여부를 별도 판별하지 않아도 됩니다.

EVSE-ID 자동 연계를 지원하지 않는 EVSE 또는 EV이거나, 커넥터 연결 후 EVSE-ID 기반 식별을 완료할 수 없는 경우에는 CarPay 수동 인증 절차로 전환합니다.

CarPay 수동 인증

1단계: 차량번호 뒷 4자리 조회
  1. EVSE-ID 기반 자동 연계를 진행할 수 없는 경우, EVSE는 차량번호 뒷 4자리 입력 화면을 표시합니다.
  2. User: User가 차량번호 뒷 4자리를 입력합니다.
  3. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "8042",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "CarPayManualLookup",
"type": "CarPayAction"
}
]
}
}
}

응답 예제는 다음과 같습니다. idTokenInfo.personalMessage.content 내의 형식은 CarPayManualLookupResponseType을 따릅니다.

예시
{
"status": "Accepted",
"data": {
"idTokenInfo": {
"status": "NotAtThisTime",
"personalMessage": {
"format": "UTF8",
"language": "ko",
"content": "{\"type\":\"carPayManualLookup\",\"vehicles\":[\"05호8042\"],\"tempAuthKey\":\"abc123def456...\"}"
}
}
}
}

tempAuthKey는 1분간만 유효합니다. 유효 시간이 만료되면 EVSE는 1단계 조회를 다시 진행해야 합니다.

2단계: 전체 차량번호 확인
  1. EVSE는 1단계 응답의 vehicles 목록을 사용자에게 표시합니다.
  2. User: User가 본인의 전체 차량번호를 선택 또는 확인합니다.
  3. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "05호8042",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "CarPayManualConfirm",
"type": "CarPayAction"
},
{
"additionalIdToken": "abc123def456...",
"type": "TempAuthKey"
}
]
}
}
}

확인 성공 시 응답 예제는 다음과 같습니다.

예시
{
"status": "Accepted",
"data": {
"idTokenInfo": {
"status": "Accepted"
}
}
}

Accepted 응답은 CSMS가 CarPay 수동 확인을 접수했다는 의미입니다. EVSE는 이 응답만으로 충전을 시작하지 말고, 이후 CSMS에서 내려오는 RemoteStartTransaction.req를 대기하여야합니다.

CarPay 인증 이후 수신되는 원격 시작 명령에는 별도의 CarPay 전용 구분자가 포함되지 않습니다. EVSE는 해당 명령을 일반 원격 시작 명령과 동일하게 처리합니다. OCPP v1.6 원격 시작 명령에 additionalInfo가 포함된 경우, 회원/비회원 구분, 단가, 요구 금액/전력량 등은 RemoteStartTransactionAdditionalInfoType을 따릅니다.

수동 확인이 Accepted 되었더라도 일정 시간 내 원격 시작 명령을 수신하지 못하면, EVSE는 사용자에게 충전 시작 실패를 안내하고 인증 화면을 종료해야 합니다. 이 경우 커넥터 점유 상태 해제 또는 재시도 화면 전환은 현장 운영 정책을 따릅니다.

실패 처리
  • idTokenInfo.status=Invalid인 경우 EVSE는 personalMessage.content가 있으면 해당 문구를 사용자에게 표시합니다.
  • vehicles 배열이 비어있는 경우 EVSE는 일치하는 차량이 없다는 안내를 표시하고 차량번호 뒷 4자리 조회부터 다시 진행해야 합니다.
  • tempAuthKey 만료 또는 불일치로 실패한 경우, EVSE는 차량번호 뒷 4자리 조회부터 다시 진행해야 합니다.
  • 인증을 이어서 완료하지 않고 화면을 이탈하는 경우, EVSE는 StatusNotification.req의 status를 Available로 전환하여 점유 상태를 해제해야 합니다.

현장 비회원 (신용카드 결제)

현지 사용자를 위한 인증 방식입니다.

비회원 결제는 인증과 결제를 분리하여 처리합니다:

  1. User: User가 HMI에서 [신용카드 결제]를 누릅니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. User: 결제 방식을 선택합니다:
    • 전력량 단위 (kWh): 사용자가 50kWh 등 전력량을 지정
    • 금액 단위 (Money): 사용자가 20,000원 등 금액을 지정
  4. HMI는 M2M 단말기와 통신하여 선결제를 성공적으로 끝냅니다.
  5. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "APPROVAL123456789",
"type": "DirectPayment"
}
}
}

idToken에는 결제 승인 번호를 입력합니다.

  1. DataTransfer 응답의 data.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.
  2. 결제 정보 전송 type=Prepaid 전송
반드시 거래를 시작한 이후 DataTransfer:com.skelectlink:PaymentInfo를 보내야 합니다!

충전 제어 및 종료

  • 전력량 단위 결제의 경우: 충전기는 demandValue(Wh)에 도달하면 자동으로 충전을 종료해야 합니다.
  • 금액 단위 결제의 경우: 충전기는 실시간 단가를 기반으로 계산한 비용이 demandValue(원)에 도달하면 자동으로 충전을 종료해야 합니다.
  • 충전이 완료되면, 필요한 경우 실결제, 부분 취소, 전체 취소를 진행하고 반드시 최종 확정(type=Finalize)을 보내야합니다.

비회원 원격 인증

현지 사용자를 위한 인증 방식입니다.

  1. User: User가 HMI에 표시된 QR을 SK일렉링크 어플리케이션을 이용해 관련 FLOW를 진행합니다.
  2. CSMS는 EVSE로 RemoteStartTransaction.req를 전송합니다.
예시
[
2,
"uuid-example",
"RemoteStartTransaction",
{
"connectorId": 1,
"idTag": "1010010100008471",
"additionalInfo": {
"currency": "KRW",
"unitPrice": "380.45",
"memberType": "NON_MEMBER",
"paymentMethod": "kWh",
"demandValue": 35.55
}
}
]
  1. EVSE는 additionalInfo 데이터 내에 포함된 paymentMethod와 demandValue를 보고, 적절하게 충전을 중단 시켜야합니다.
정보

additionalInfo 필드를 지원하지 않는 충전기를 위해, CSMS는 MeterValues.req를 수신할 때 마다 충전량을 검사하고, RemoteStopTransaction.req을 발송하는 로직이 포함되어 있습니다.

차량번호 인증

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 HMI에서 [차량번호 인증]을 누릅니다.
  2. 즉시 StatusNotification.req의 status를 "Preparing"으로 전환하여야 합니다.
  3. User: User로부터 차량번호 앞자리와 뒷자리를 입력받습니다.
  4. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "52/9803",
"type": "KeyCode"
}
}
}

idToken에는 차량번호 앞자리/뒷자리를 슬래시(/)로 구분하여 입력합니다.

  1. 응답 예제는 다음과 같습니다. idTokenInfo.personalMessage.content내의 형식은 VehicleListResponseType을 따릅니다.
예시
{
"status": "Accepted",
"data": {
"idTokenInfo": {
"status": "NotAtThisTime",
"personalMessage": {
"format": "UTF8",
"language": "ko",
"content": "{\"type\":\"vehicleList\",\"vehicles\":[\"52가9803\",\"52나9803\",\"52다9803\"],\"tempAuthKey\":\"abc123def456...\"}"
}
}
}
}
  1. User: HMI에서 제공받은 차량번호 목록 중 하나를 선택합니다.
  2. User: 선택한 차량번호에 대한 비밀번호를 입력합니다.
  3. DataTransfer:com.skelectlink:Authorize 전송:
예시
{
"vendorId": "com.skelectlink",
"messageId": "Authorize",
"data": {
"idToken": {
"idToken": "52가9803",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "userPassword",
"type": "VehiclePassword"
},
{
"additionalIdToken": "abc123def456...",
"type": "TempAuthKey"
}
]
}
}
}

idToken에는 사용자가 선택한 완전한 차량번호를 입력합니다. VehiclePassword에는 사용자 입력 비밀번호를, TempAuthKey에는 1단계에서 받은 임시 인증키를 입력합니다.

  1. DataTransfer 응답의 status=Accepted이고, data.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.

OCPP v2.1

EVSE는 사용자로부터 인증과 관련된 입력을 받으면 적절한 형식으로 CSMS로 요청하여야 합니다.

사용자 인증에서 Accepted 응답을 받지 못해 충전중으로 넘어가지 못한 경우(2단계 인증/연계 화면 제외), 반드시 StatusNotificationRequest 또는 TransactionEventRequest 등 현재 상태에 맞는 v2.1 상태 보고 메시지로 점유 상태를 해제해야 합니다. 그러지 아니할 경우 서버는 점유상태가 풀리지 않은 것으로 간주하여, 인증 중 진행했던 중간 과정의 정보를 계속해서 지니게됩니다.

인증 방식idToken.typeidToken 값additionalInfo
카드 태깅ISO14443카드 번호-
카드번호 직접 입력KeyCode카드 번호ManualCardNumber (비밀번호)
맥인증MacAddressMAC 주소 (하이픈 구분)-
비회원 결제DirectPayment승인 번호-
CarPay 수동 조회KeyCode차량번호 뒷 4자리CarPayAction (CarPayManualLookup)
CarPay 수동 확정KeyCode완전한 차량번호CarPayAction (CarPayManualConfirm), TempAuthKey
차량번호 1단계KeyCode차량번호 앞자리/뒷자리-
차량번호 2단계KeyCode완전한 차량번호VehiclePassword, TempAuthKey

카드 태깅

SK일렉링크 회원과 로밍사 회원을 위한 인증 방식입니다.

  1. User: User가 멤버십 카드를 RFID Reader에 태깅합니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. AuthorizeRequest에 카드 번호를 입력하여 CSMS로 전송합니다.
  4. AuthorizeResponse.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.
예시

요청

[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "1010010187549971",
"type": "ISO14443"
}
}
]

응답

[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"idTokenInfo": {
"status": "Accepted"
}
}
]

카드번호 직접 입력

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 HMI에서 [카드번호 직접 입력]를 누릅니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. User: User가 HMI에서 카드 번호와 비밀번호를 입력합니다.
  4. AuthorizeRequest에 카드 번호와 비밀번호를 입력하여 CSMS로 전송합니다.
  5. AuthorizeResponse.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.

요청

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "1800100000201245",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "0020",
"type": "ManualCardNumber"
}
]
}
}
]

idToken에는 카드 번호를, additionalIdToken에는 사용자가 입력한 비밀번호를 입력합니다.

맥인증

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 EVSE Connector를 EV에 연결합니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. HLC(High-Level Communication) 후 PLC(Power Line Communication)를 통해 SLAC(Signal Level Attenuation Characterization) 프로세스 수행이 가능한지 확인합니다. 이 과정에서는 사용자 인증 중 화면이 표시되어야합니다.
  4. AuthorizeRequest에 MAC 주소를 입력하여 CSMS로 전송합니다.

요청

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "00-1A-2B-3C-4D-5E",
"type": "MacAddress"
}
}
]

idToken에는 MAC 주소를 16진수 문자 그대로 하이픈으로 분리하여 입력합니다.

  • 성공: AuthorizeResponse.idTokenInfo.status=Accepted로 응답받습니다.
    1. 충전 준비 화면
  • 실패: AuthorizeResponse.idTokenInfo.status=Blocked로 응답받습니다.
    1. 화면에 idTokenInfo.personalMessage.content 내용을 사용자에게 표시합니다.
    2. 일정 시간 노출 후 화면 초기화
  • 실패: AuthorizeResponse.idTokenInfo.status=NotAtThisTime으로 응답받습니다.
    1. 맥인증 등록 시퀸스 진행

맥인증 등록

SK일렉링크 회원과 로밍사 회원을 위한 인증 방식입니다.

OCPP v2.1 표준 AuthorizeRequest에는 맥인증 등록을 위한 SK일렉링크 전용 등록 메시지가 없으므로, 등록 요청은 DataTransfer:com.skelectlink:MacRegister를 사용합니다.

  1. 화면에 오토차지(AutoCharge) 차량으로 등록할 것이냐고 물어봅니다. 취소시 화면 초기화
  2. User가 동의시, 카드 태깅 입력을 받습니다:
    • 카드 태깅
      1. User: User가 멤버십 카드를 RFID Reader에 태깅합니다.
      2. MAC 주소와 카드 정보를 함께 등록 요청:
예시
{
"vendorId": "com.skelectlink",
"messageId": "MacRegister",
"data": {
"macAddress": "00-1A-2B-3C-4D-5E",
"cardNumber": "04D2A91234567890"
}
}
  1. status=Accepted이고 data.success=true인 경우 등록 성공
  2. EVSE는 즉시 충전 준비 화면을 표시합니다.

CarPay 인증

현대/기아/제네시스 고객을 위한 비회원 인증 방식입니다.

CarPay는 사용자가 EVSE HMI에서 [CarPay]를 선택한 뒤 커넥터를 연결하고, EVSE와 EV가 PLC 통신을 통해 EVSE-ID 기반 연계를 수행할 수 있으면 자동 경로로 진행됩니다.

EVSE-ID 기반 자동 연계를 진행할 수 없는 EVSE 또는 EV인 경우에만 수동 fallback 절차를 사용합니다. 수동 fallback에서는 사용자가 차량번호 뒷 4자리를 입력하고, EVSE는 CSMS가 반환한 전체 차량번호를 사용자에게 확인받은 뒤 원격 충전 시작 명령을 기다립니다.

정보

CarPay 선택 후 커넥터 잠금 해제나 커넥터함 개방이 필요한 EVSE는 [CarPay] 선택 시점에 커넥터 연결 가능 상태로 전환해야 합니다. 이 동작은 EVSE 하드웨어 구현에 따라 다를 수 있으므로, OCPP 메시지로 별도 보고하지 않아도 됩니다.

  1. User: User가 EVSE HMI에서 [CarPay]를 선택합니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. User: User가 커넥터를 EV에 연결합니다.
  4. EVSE는 EV와 PLC 통신을 수행하고 EVSE-ID 기반 연계를 시도합니다.

CarPay 자동 인증 (EVSE-ID 지원)

  1. EVSE-ID 기반 연계가 가능한 경우, EVSE는 별도의 차량번호 입력 화면을 표시하지 않습니다.
  2. CSMS의 RequestStartTransactionRequest를 최대 60초간 대기합니다.
CarPay 원격 시작 구분

CarPay 자동 인증 이후 서버에서 내려오는 원격 시작 명령에는 별도의 CarPay 전용 구분자가 포함되지 않습니다. EVSE는 해당 명령을 일반 원격 시작 명령과 동일하게 처리해야 하며, OCPP 프레임만으로 CarPay 여부를 별도 판별하지 않아도 됩니다.

EVSE-ID 자동 연계를 지원하지 않는 EVSE 또는 EV이거나, 커넥터 연결 후 EVSE-ID 기반 식별을 완료할 수 없는 경우에는 CarPay 수동 인증 절차로 전환합니다.

CarPay 수동 인증

1단계: 차량번호 뒷 4자리 조회
  1. EVSE-ID 기반 자동 연계를 진행할 수 없는 경우, EVSE는 차량번호 뒷 4자리 입력 화면을 표시합니다.
  2. User: User가 차량번호 뒷 4자리를 입력합니다.
  3. AuthorizeRequest에 차량번호 뒷 4자리와 CarPayManualLookup 동작 구분자를 입력하여 CSMS로 전송합니다.
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "8042",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "CarPayManualLookup",
"type": "CarPayAction"
}
]
}
}
]

응답 예제는 다음과 같습니다. idTokenInfo.personalMessage.content 내의 형식은 CarPayManualLookupResponseType을 따릅니다.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"idTokenInfo": {
"status": "NotAtThisTime",
"personalMessage": {
"format": "UTF8",
"language": "ko",
"content": "{\"type\":\"carPayManualLookup\",\"vehicles\":[\"05호8042\"],\"tempAuthKey\":\"abc123def456...\"}"
}
}
}
]

tempAuthKey는 1분간만 유효합니다. 유효 시간이 만료되면 EVSE는 1단계 조회를 다시 진행해야 합니다.

2단계: 전체 차량번호 확인
  1. EVSE는 1단계 응답의 vehicles 목록을 사용자에게 표시합니다.
  2. User: User가 본인의 전체 차량번호를 선택 또는 확인합니다.
  3. AuthorizeRequest에 전체 차량번호, CarPayManualConfirm 동작 구분자, 임시 인증키를 입력하여 CSMS로 전송합니다.
예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "05호8042",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "CarPayManualConfirm",
"type": "CarPayAction"
},
{
"additionalIdToken": "abc123def456...",
"type": "TempAuthKey"
}
]
}
}
]

확인 성공 시 응답 예제는 다음과 같습니다.

예시
[
3,
"b914adcc-d113-46de-ad4b-edb168b96045",
{
"idTokenInfo": {
"status": "Accepted"
}
}
]

AuthorizeResponse.idTokenInfo.status=Accepted는 CSMS가 CarPay 수동 확인을 접수했다는 의미입니다.

EVSE는 이 응답만으로 충전을 시작하지 말고, 이후 CSMS에서 내려오는 RequestStartTransactionRequest를 대기하여야합니다.

CarPay 인증 이후 수신되는 원격 시작 명령에는 별도의 CarPay 전용 구분자가 포함되지 않습니다. EVSE는 해당 명령을 일반 원격 시작 명령과 동일하게 처리합니다.

수동 확인이 Accepted 되었더라도 일정 시간 내 원격 시작 명령을 수신하지 못하면, EVSE는 사용자에게 충전 시작 실패를 안내하고 인증 화면을 종료해야 합니다. 이 경우 커넥터 점유 상태 해제 또는 재시도 화면 전환은 현장 운영 정책을 따릅니다.

실패 처리
  • idTokenInfo.status=Invalid인 경우 EVSE는 personalMessage.content가 있으면 해당 문구를 사용자에게 표시합니다.
  • vehicles 배열이 비어있는 경우 EVSE는 일치하는 차량이 없다는 안내를 표시하고 차량번호 뒷 4자리 조회부터 다시 진행해야 합니다.
  • tempAuthKey 만료 또는 불일치로 실패한 경우, EVSE는 차량번호 뒷 4자리 조회부터 다시 진행해야 합니다.
  • 인증을 이어서 완료하지 않고 화면을 이탈하는 경우, EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 점유 상태를 해제해야 합니다.

현장 비회원 (신용카드 결제)

현지 사용자를 위한 인증 방식입니다.

비회원 결제는 인증과 결제를 분리하여 처리합니다. OCPP v2.1 충전기는 비회원 신용카드 결제 흐름에서 DataTransfer:com.skelectlink:PaymentInfo를 기본 경로로 사용하지 말고, OCPP v2.1 표준 인증/거래/정산 메시지를 우선 적용해야 합니다.

  1. User: User가 HMI에서 [신용카드 결제]를 누릅니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. User: 결제 방식을 선택합니다:
    • 전력량 단위 (kWh): 사용자가 50kWh 등 전력량을 지정
    • 금액 단위 (Money): 사용자가 20,000원 등 금액을 지정
  4. HMI는 M2M 단말기와 통신하여 선결제를 성공적으로 끝냅니다.
  5. 결제 승인 번호 또는 결제 식별자를 AuthorizeRequestidToken.type=DirectPayment로 전달합니다.

요청

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "APPROVAL123456789",
"type": "DirectPayment"
}
}
]
  1. AuthorizeResponse.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.
  2. 거래 시작, 진행, 종료와 비용/제한 정보는 TransactionEventRequest 계열 메시지와 v2.1 거래 비용/제한 필드를 사용해 보고합니다.
  3. 정산 결과를 별도로 보고해야 하는 충전기는 NotifySettlementRequest를 우선 사용합니다.
  4. PG 승인번호, 결제 고유번호, 결제단말 응답 코드, 카드사 응답 코드처럼 OCPP v2.1 표준 필드만으로 표현하기 어려운 국내 결제단말 상세값은 customData 또는 별도 안내된 DataTransfer:com.skelectlink:PaymentInfo로 보완 전송합니다.
목적OCPP v2.1 우선 적용 방식비고
결제 식별자로 인증AuthorizeRequest (idToken.type=DirectPayment)결제 승인 번호 또는 결제 식별자를 인증 식별자로 전달합니다.
요구 전력량/요구 금액 제한거래 비용/제한 필드 및 TransactionEventRequestEVSE는 요구값에 도달하면 충전을 종료해야 합니다.
충전 중 비용 표시TransactionEventResponse.totalCost 이용 (필요 시 CostUpdatedRequest)CSMS 중앙 계산 비용을 화면에 표시합니다.
거래 종료 비용 보고TransactionEventRequest의 거래 종료/비용 정보최종 거래 비용을 표준 거래 흐름에 포함합니다.
정산 결과 보고NotifySettlementRequest결제/정산 결과를 표준 정산 메시지로 보고합니다.
국내 결제단말 상세값customData 또는 PaymentInfo fallback표준 필드로 표현하기 어려운 값만 보완합니다.
PaymentInfo 사용 기준

OCPP v2.1 신규 연동에서는 PaymentInfo DataTransfer를 결제 흐름의 필수 메시지로 구현하지 말고, AuthorizeRequest, TransactionEventRequest, NotifySettlementRequest 등 표준 메시지로 처리한 뒤 필요한 확장 데이터만 보완하십시오.

정산 결과 보고

충전 종료 후 결제 정산이 완료되면, 충전기는 NotifySettlementRequest로 정산 결과를 CSMS에 보고합니다.

예시
[
2,
"f47ac10b-58cc-4372-a567-0e02b2c3d479",
"NotifySettlement",
{
"transactionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"pspRef": "APPROVAL123456789",
"status": "Settled",
"statusInfo": "정상승인",
"settlementAmount": 15230.0,
"settlementTime": "2025-05-21T01:30:00Z",
"customData": {
"vendorId": "com.skelectlink",
"tradeUniqueId": "TXN20250521-0012345678",
"deviceResponseCode": "00",
"deviceCardResponseCode": "00"
}
}
]

응답:

[3, "f47ac10b-58cc-4372-a567-0e02b2c3d479", {}]
필드PaymentInfo 대응 필드설명
transactionIdtransactionId해당 충전 거래의 트랜잭션 ID
pspReftradeApprovalId결제 승인 번호 또는 PSP 정산 참조 번호. 현장 비회원 흐름에서는 AuthorizeRequestidToken에 사용한 값과 동일하게 전송합니다.
status정산 상태: Settled, Canceled, Rejected, Failed
statusInfodeviceResponseMessage결제 단말 응답 메시지 (예: 정상승인, 한도초과)
settlementAmountdemandValue정산 금액 (원 단위)
settlementTime정산 완료 시각 (UTC, ISO 8601)
customData 활용

표준 필드로 매핑되지 않는 국내 결제단말 상세값은 customData에 포함합니다.

customData 필드PaymentInfo 대응 필드설명
tradeUniqueIdtradeUniqueId거래 고유 번호 (PG사)
deviceResponseCodedeviceResponseCode결제 단말 응답 코드
deviceCardResponseCodedeviceCardResponseCode카드사 응답 코드

충전 제어 및 종료

  • 전력량 단위 결제의 경우: 충전기는 v2.1 거래 비용/제한 정보와 설정된 요구 전력량에 따라 자동으로 충전을 종료해야 합니다.
  • 금액 단위 결제의 경우: 충전기는 실시간 단가를 기반으로 계산한 비용이 요구 금액에 도달하면 자동으로 충전을 종료해야 합니다.
  • 충전이 완료되면, 필요한 경우 실결제, 부분 취소, 전체 취소를 진행하고 v2.1 표준 정산/거래 종료 메시지를 우선 사용합니다.

비회원 원격 인증

현지 사용자를 위한 인증 방식입니다.

  1. User: User가 HMI에 표시된 QR을 SK일렉링크 어플리케이션을 이용해 관련 FLOW를 진행합니다.
  2. CSMS는 EVSE로 RequestStartTransactionRequest를 전송합니다.
  3. EVSE는 요청에 포함된 결제 방식, 단가, 요구 금액/전력량 등의 정보를 보고, 적절하게 충전을 중단 시켜야합니다. 초기 표시 단가는 CSMS가 EVSE로 전송한 SetDisplayMessageRequest, 충전 중 비용은 TransactionEventResponse.totalCost를 기본으로 사용하고, 로컬 비용 계산이 필요한 경우에만 Tariff 메시지를 사용합니다.
  4. EVSE는 v2.1 원격 시작 요청을 수락한 뒤 TransactionEventRequest(eventType=Started)로 거래 시작을 보고해야 합니다.
정보

OCPP v2.1 신규 연동에서는 비회원 원격 인증에 필요한 결제/단가/요구값 정보를 표준 RequestStartTransactionRequest, TransactionEventRequest, NotifySettlementRequest 조합으로 우선 처리합니다. 충전 중 비용 표시는 TransactionEventResponse.totalCost를 기본으로 사용하고, CostUpdatedRequest는 별도 Push 갱신이 필요한 경우에만 보조로 사용합니다. 대기 화면 단가 안내는 CSMS가 BootNotificationResponse(Accepted) 직후 전송하는 SetDisplayMessageRequest를 사용하고, SetDefaultTariffRequest/ChangeTransactionTariffRequest는 EVSE 로컬 비용 계산이나 idleTime 요금 처리가 필요한 경우에만 사용하십시오. 표준 필드만으로 표현하기 어려운 국내 결제단말 상세값만 customData 또는 별도 안내된 DataTransfer 메시지로 보완하십시오.

차량번호 인증

SK일렉링크 회원을 위한 인증 방식입니다.

  1. User: User가 HMI에서 [차량번호 인증]을 누릅니다.
  2. EVSE는 현재 상태에 맞는 v2.1 상태 보고 메시지로 인증 진행 상태를 보고합니다.
  3. User: User로부터 차량번호 앞자리와 뒷자리를 입력받습니다.
  4. AuthorizeRequest에 차량번호 앞자리/뒷자리를 슬래시(/)로 구분하여 입력합니다.

1단계 요청

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "52/9803",
"type": "KeyCode"
}
}
]
  1. 응답의 idTokenInfo.personalMessage.content 내의 형식은 VehicleListResponseType을 따릅니다.
  2. User: HMI에서 제공받은 차량번호 목록 중 하나를 선택합니다.
  3. User: 선택한 차량번호에 대한 비밀번호를 입력합니다.
  4. AuthorizeRequest에 완전한 차량번호, 비밀번호, 임시 인증키를 입력하여 CSMS로 전송합니다.

2단계 요청

예시
[
2,
"b914adcc-d113-46de-ad4b-edb168b96045",
"Authorize",
{
"idToken": {
"idToken": "52가9803",
"type": "KeyCode",
"additionalInfo": [
{
"additionalIdToken": "userPassword",
"type": "VehiclePassword"
},
{
"additionalIdToken": "abc123def456...",
"type": "TempAuthKey"
}
]
}
}
]
  1. AuthorizeResponse.idTokenInfo.status=Accepted일 경우 충전 준비 화면을 표시합니다.