KG 이니시스 관련 기록

2026.04.28

이니시스(INIpay) + 알림 시스템 설정 가이드

망보드(MangBoard) 쇼핑몰에 이니시스 PG 결제를 연동하고,
카카오 알림톡(Popbill) + 텔레그램 관리자 알림을 구축하는 실전 가이드입니다.


1. PG 설정 개요

1.1 이니시스 연동 필수 항목

항목 발급처 용도
MID (가맹점 ID) 이니시스 가맹계약 시 발급 결제 API 식별자
API Key 이니시스 관리자 hashData 서명
API IV 이니시스 관리자 hashData 서명
비밀번호 이니시스 관리자 키파일 복호화
키파일 이니시스 관리자에서 다운로드 결제 암복호화

1.2 TID prefix별 결제수단

flowchart LR
    A["이니시스 결제"] --> B["StdpayCARD신용카드"]
    A --> C["ININPGRPAY네이버페이"]
    A --> D["StdpayVBANK무통장입금"]
    A --> E["StdpayHPP휴대폰"]

    C -.->|"실제 카드결제"| B


    style C fill:#03C75A,color:#fff
TID prefix 결제수단 비고
StdpayCARD 일반 신용카드 가장 일반적
ININPGRPAY 네이버페이 (카드결제) 네이버페이가 결제 대행
StdpayVBANK 무통장입금 (가상계좌) 입금 확인 필요
StdpayHPP 휴대폰결제 -

1.3 테스트 모드

망보드 관리자에서 결제 플랫폼을 테스트 서버로 설정하면 INIpayTest MID로 테스트 결제 가능합니다.
운영 전환 시 실 MID로 자동 변경됩니다.


2. 알림 시스템 아키텍처

2.1 전체 구조

flowchart TB
    subgraph 고객알림["고객 알림"]
        K1["카카오 알림톡(Popbill API)"]
        K2["SMS/LMS(미가입자 대체)"]
    end
    subgraph 관리자알림["관리자 알림"]
        T1["텔레그램 Bot(무료)"]
    end
    subgraph PG["이니시스 PG"]
        P1["결제 API"]
        P2["취소 API/api/v1/refund"]
    end


    subgraph 망보드["망보드 코어"]
        C1["kakao_api.php알림 발송 중앙"]
        C2["mb-commerce.php주문 API"]
        C3["inicis/functions.phpPG 연동"]
    end


    K1 --> C1
    K2 --> C1
    T1 --> C1
    P2 --> C3
    C2 --> C1
    C2 --> C3


    style 고객알림 fill:#FFF3E0
    style 관리자알림 fill:#E8F5E9
    style PG fill:#E3F2FD

2.2 알림 채널 비교

채널 대상 비용 비고
카카오 알림톡 (Popbill) 고객 ~11원/건 미가입자는 SMS 자동 전환 (17~36원)
텔레그램 Bot 관리자 무료 설정만 하면 즉시 사용

3. 관리자 결제취소 — 올바른 방법

3.1 취소 방법 비교

flowchart TD
    A["관리자가 취소 처리"] --> B{"어떤 버튼 사용?"}
    B -->|"주문 상세[결제 취소] 버튼"| C["✅ 올바른 방법"]
    B -->|"주문 목록드롭박스 [수정]"| D["❌ 잘못된 방법"]

    C --> E["이니시스 API 호출"]
    E --> F["DB 업데이트"]
    F --> G["고객 알림톡 발송"]
    G --> H["관리자 텔레그램 발송"]

    D --> I["DB만 변경"]
    I --> J["이니시스 실제 취소 안 됨"]
    J --> K["알림 발송 안 됨"]
    K --> L["⚠️ 카드사 환불 안 됨"]


    style C fill:#C8E6C9
    style D fill:#FFCDD2

반드시 주문 상세 페이지의 [결제 취소] 버튼을 사용하세요.
드롭박스 [수정]은 DB만 변경하고 실제 PG 취소를 수행하지 않습니다.

3.2 [결제 취소] 버튼 동작 순서

sequenceDiagram
    participant Admin as 관리자
    participant UI as 주문 상세 페이지
    participant MB as mb-commerce.php
    participant PG as 이니시스 API
    participant DB as 데이터베이스
    participant Notify as 알림 시스템


    Admin->>UI: [결제 취소] 클릭
    UI->>Admin: confirm 확인
    Admin->>MB: sendOrderViewData(modify_pay_cancel)
    MB->>PG: POST /api/v1/refundtype=Refund or PartialRefund
    PG-->>MB: resultCode=00 (성공)
    MB->>DB: pay_state=cancelorder_state=cancelled_payment
    MB->>Notify: do_action(mbw_commerce_modify_pay_cancel)
    Notify->>Notify: 고객 카카오 알림톡
    Notify->>Notify: 관리자 텔레그램

3.3 [결제 취소] 버튼 표시 조건

관리자가 주문 상세 페이지에서 [결제 취소] 버튼을 보려면 다음 모든 조건 충족:

조건 설명
pay_state == "complete" 또는 order_state == "refund_request" 아직 취소되지 않은 주문
결제수단이 카드/간편결제 무통장입금은 DB만 취소
결제일 30일 이내 예약상품은 60일
pay_tidorder_id 존재 PG 거래 ID 필수

4. 전액 취소 vs 부분 환불

4.1 API 타입 분기

flowchart TD
    A["관리자 취소 요청"] --> B{"cancel_type == partial_refund?"}
    B -->|"NO"| C["type=Refund 전액 취소"]
    B -->|"YES"| D{"0보다 크고 pay_price보다 작은가?"}
    D -->|"YES"| E["type=PartialRefund 부분 환불"]
    D -->|"NO"| C


    style C fill:#C8E6C9
    style E fill:#FFF9C4
조건 API type 설명
amt >= pay_price Refund 전액 취소
cancel_type != partial_refund Refund 전액 취소
cancel_type == partial_refund AND 0 < amt < pay_price PartialRefund 부분 환불

주의: API 키가 설정되어 있으면 항상 부분환불 블록이 표시될 수 있습니다.
amt == pay_price일 때 Refund를 사용하도록 명시적으로 분기해야 합니다.

4.2 이니시스 API 호출 형식

전액 취소 (Refund):

POST https://iniapi.inicis.com/api/v1/refund
Content-Type: application/x-www-form-urlencoded


type=Refund
paymethod=Card
timestamp=YYYYMMDDHHmmss (UTC)
clientIp=서버_IP
mid=가맹점ID
tid=결제TID
msg=취소사유
price=결제금액 (전액)
confirmPrice=0
hashData=sha512(apiKey + type + paymethod + timestamp + clientIp + mid + tid)

부분 환불 (PartialRefund):

POST https://iniapi.inicis.com/api/v1/refund


type=PartialRefund
paymethod=Card
timestamp=YYYYMMDDHHmmss (UTC)
clientIp=서버_IP
mid=가맹점ID
tid=결제TID
msg=취소사유
price=환불금액
confirmPrice=남은금액 (결제금액 - 환불금액)
hashData=sha512(apiKey + type + paymethod + timestamp + clientIp + mid + tid + price + confirmPrice)

hashData에 포함되는 파라미터 순서가 두 타입에서 다릅니다.
Refundtid까지, PartialRefundconfirmPrice까지 포함.

4.3 응답 코드

resultCode 의미 조치
00 정상 처리 완료
01 실패 사유 확인 후 재시도
01 + 500626 기 취소 거래 이미 취소됨, 이니시스 관리자에서 원복 필요

5. 고객 환불/취소 플로우

5.1 고객이 볼 수 있는 버튼

flowchart TD
    A["고객 주문"] --> B{"결제수단?"}
    B -->|"무통장입금"| C["배송전[주문취소]"]
    B -->|"카드/PG"| D["배송전[환불신청]"]
    D --> E["관리자가[결제 취소] 처리"]

    F["7일 초과"] --> G["버튼 없음관리자 문의"]
    H["환불신청 상태"] --> I["[환불취소]"]
    J["반품/교환 신청"] --> K["[반품/교환 취소]"]


    style C fill:#FFF3E0
    style D fill:#FFF3E0
    style G fill:#FFCDD2
주문 상태 결제수단 고객 버튼 동작
주문완료 (무통장) 무통장 [주문취소] DB 즉시 취소 (PG 호출 불필요)
결제완료 (배송전) 카드/PG [환불신청] DB를 refund_request로 변경
결제완료 (7일 초과) 카드/PG 버튼 없음 관리자에게 문의
환불신청 상태 - [환불취소] completed_payment로 원복
반품/교환 신청 - [반품/교환 취소] completed_shipping로 원복

5.2 중요: 환불요청 ≠ 자동 취소

고객의 [환불신청]은 DB 상태만 변경합니다. 실제 이니시스 결제 취소는 관리자가 [결제 취소] 버튼으로 처리해야 합니다.

flowchart LR
    A["고객 [환불신청]"] -->|"DB만 변경refund_request"| B["관리자 확인"]
    B --> C["관리자 [결제 취소]"]
    C -->|"이니시스 API 호출"| D["카드사 환불"]
    C --> E["고객 알림톡 발송"]
    C --> F["관리자 텔레그램 발송"]

6. 알림 발송 매핑

6.1 상황별 알림

상황 고객 카카오 관리자 텔레그램 비고
주문 접수 (PG/무통장) ✅ 주문완료 ✅ 주문완료 양쪽 모두
고객 환불요청 ❌ 없음 ✅ 전용 메시지 관리자에게만
관리자 결제취소 ✅ 주문취소 ✅ 주문취소 양쪽 모두
고객 주문취소 (무통장) ✅ 주문취소 ✅ 주문취소 양쪽 모두
고객 반품/교환 신청 ✅ 주문취소 ✅ 주문취소 양쪽 모두

6.2 알림 발송 흐름

flowchart TD
    A["주문 상태 변경"] --> B{"어떤 상태?"}
    B -->|"주문접수"| C["고객: 주문완료 템플릿"]
    C --> D["관리자: 주문완료 템플릿"]
    B -->|"환불요청refund_request"| E["관리자만: 전용 메시지"]
    E -.->|"고객에게는 없음"| F
    B -->|"결제취소"| F["고객: 취소 템플릿"]
    F --> G["관리자: 취소 템플릿"]
    B -->|"고객 취소/반품"| F


    style E fill:#FFF9C4

refund_request 상태에서는 고객에게 알림을 보내지 않습니다.
"취소 완료" 알림은 관리자가 실제 PG 취소를 완료한 후에 발송됩니다.


7. 매입전취소 vs 매입후취소

7.1 타이밍에 따른 차이

timeline
    title 취소 타이밍에 따른 차이
    매입전취소 : 결제 당일 23시 30분 이전
               : 즉시 카드사 환불
    매입후취소 : 결제 익일 이후
               : 3~5 영업일 카드사 환불
구분 타이밍 환불 소요
매입전취소 결제 당일 23:30 이전 즉시 카드 청구 취소
매입후취소 결제 익일 이후 3~5 영업일 카드사 환불

네이버페이(ININPGRPAY)는 이니시스에서 실시간 매입 처리하므로,
즉시 취소해도 매입후취소가 될 수 있습니다.


8. Popbill 알림톡 설정

8.1 필요 정보

항목 설명
Popbill 회원가입 https://www.popbill.com
사업자등록번호 카카오톡 발신자 번호 인증에 사용
발신번호 사전 등록된 전화번호
카카오톡 발신자 번호 10~11자리 숫자 (하이픈 제거)

8.2 템플릿

알림톡을 보내려면 카카오톡에 템플릿을 사전 등록해야 합니다.
등록 시 발급받은 템플릿 코드를 망보드 관리자에 입력합니다.

템플릿 용도 대상
주문완료 안내 주문 접수 시 고객 + 관리자
입금확인 안내 무통장 입금 시 고객
배송안내 배송 시작 시 고객
주문취소 안내 결제 취소 완료 시 고객 + 관리자

8.3 템플릿 변수

변수 의미 사용 템플릿
#{NAME} 고객명 전체
#{ORDER_NUM} 주문번호 전체
#{ORDER_DATE} 주문일자 전체
#{ORDER_PRICE} 주문금액 주문완료
#{CANCEL_PRICE} 취소금액 주문취소
#{PRODUCT_LIST} 주문상품 목록 전체
#{BANK_ACCOUNT} 입금계좌 주문완료 (무통장)
#{DEPOSIT_DEADLINE} 입금기한 주문완료 (무통장)

9. 텔레그램 관리자 알림

9.1 설정

항목 설명
Bot 생성 Telegram에서 @BotFather와 대화 → /newbot
Bot Token BotFather가 발급
Chat ID 관리자 텔레그램에서 @userinfobot에게 메시지 전송

9.2 관리자 텔레그램 전송 원리

flowchart LR
    A["주문 상태 변경"] --> B["kakao_api.php"]
    B --> C{"고객 vs 관리자?"}
    C -->|"고객"| D["Popbill API카카오 알림톡"]
    C -->|"관리자"| E["wmbt_send_telegram()텔레그램 Bot API"]

    D --> F["비용 발생~11원/건"]
    E --> G["무료"]

9.3 두 가지 전송 방식

템플릿 기반 전송 (주문접수, 결제취소 등):

mbw_send_admin_telegram(템플릿코드, 데이터배열)
→ 템플릿 렌더링 → HTML 태그 제거 → 텔레그램 전송

직접 텍스트 전송 (환불요청 등 템플릿 없는 알림):

wmbt_send_telegram(문자열)
→ 텔레그램으로 직접 전송

10. 망보드 수정 파일 개요

10.1 핵심 파일

flowchart TD
    subgraph 주문API["mb-commerce.php"]
        A["modify_pay_cancel관리자 결제취소"]
        B["modify_order_state고객 상태변경"]
        C["multi_modify_order배치 상태변경"]
    end
    subgraph 알림["kakao_api.php"]
        D["mbw_send_admin_telegram관리자 텔레그램"]
        E["mbw_send_pay_cancel_message결제취소 알림"]
        F["mbw_send_order_state_message상태변경 알림"]
    end
    subgraph PG["inicis/functions.php"]
        G["mbw_commerce_pay_cancel_apiREST API 취소"]
        H["mbw_commerce_pay_partial_refund부분환불"]
    end
    subgraph UI["tpl.commerce.php"]
        I["관리자 [결제 취소] 버튼"]
        J["고객 [환불신청] 버튼"]
    end


    A --> G
    A --> E
    B --> F
    I --> A
    J --> B


    style 주문API fill:#E3F2FD
    style 알림 fill:#E8F5E9
    style PG fill:#FFF3E0
    style UI fill:#F3E5F5

10.2 망보드 업데이트 주의

망보드 플러그인 업데이트 시 위 파일들이 덮어씌워질 수 있습니다.
업데이트 전 반드시 백업하고, 업데이트 후 diff를 확인하여 수정 사항을 재적용하세요.


11. 체크리스트

초기 설정

  • [ ] 이니시스 가맹계약 완료 → MID, API Key, API IV, 비밀번호 발급
  • [ ] 키파일 다운로드 → 서버에 배치
  • [ ] 망보드 관리자에 PG 설정값 입력
  • [ ] 테스트 모드로 결제/취소 정상 동작 확인
  • [ ] 운영 모드 전환

알림 설정

  • [ ] Popbill 가입 + 카카오톡 발신자 번호 등록
  • [ ] 알림톡 템플릿 4종 승인 (주문완료, 입금확인, 배송안내, 주문취소)
  • [ ] 망보드 관리자에 템플릿 코드 입력
  • [ ] Telegram Bot 생성 → Token, Chat ID 발급
  • [ ] 망보드 관리자에 Bot Token, Chat ID 입력
  • [ ] 테스트 주문으로 알림 정상 수신 확인

관리자 운영

  • [ ] 결제취소는 반드시 주문 상세 [결제 취소] 버튼 사용
  • [ ] 드롭박스 [수정]은 DB만 변경한다는 점 숙지
  • [ ] 매입전취소는 결제일 23:30 이전에 처리하면 즉시 환불
  • [ ] 망보드 업데이트 전 백업 필수

12. 운영 시 자주 발생하는 실수

1. 드롭박스로 취소한 경우

flowchart TD
    A["드롭박스 [수정]상태를 취소로 변경"] --> B{"이니시스 실제 취소?"}
    B -->|"안 됨"| C["이니시스 관리자에서 수동 취소"]
    B -->|"이미 됨"| D["DB refund_price 확인 후이니시스에서 원복"]


    style A fill:#FFCDD2

복구 절차:

  1. 이니시스 관리자에서 실제 취소 여부 확인
  2. 취소 안 된 경우: 이니시스 관리자에서 직접 취소 또는 API 수동 호출
  3. 취소된 경우: 이니시스 관리자에서 원복 처리

2. PartialRefund 전액 취소 불가

API 키가 설정되면 부분환불 UI가 항상 표시될 수 있으며, amt == pay_price일 때도 PartialRefund로 요청되면 실패합니다.
amt == pay_price 조건을 명시적으로 체크하여 Refund 타입을 사용하도록 분기해야 합니다.

3. 알림톡 비용 누적

채널 비용/건
카카오톡 알림톡 ~11원
SMS (미가입자 대체) ~17원
LMS (미가입자 대체) ~36원
텔레그램 무료

관리자 알림을 카카오채널에서 텔레그램으로 전환하면 비용을 크게 절감할 수 있습니다.


13. 참고 링크

자료 URL
이니시스 관리자 https://iniweb.inicis.com
Popbill 관리 https://www.popbill.com/
망보드 알림톡 가이드 https://www.mangboard.com/tip/?vid=46
▣ 마크 다운(Markdown) 문서(Mermaid 포함) 지원합니다.
글보기
제목KG 이니시스 관련 기록2026-04-28 03:39
카테고리기술노트
작성자 Level 10

# 이니시스(INIpay) + 알림 시스템 설정 가이드


> 망보드(MangBoard) 쇼핑몰에 이니시스 PG 결제를 연동하고,  

> 카카오 알림톡(Popbill) + 텔레그램 관리자 알림을 구축하는 실전 가이드입니다.


---


## 1. PG 설정 개요


### 1.1 이니시스 연동 필수 항목


| 항목 | 발급처 | 용도 |

|------|--------|------|

| MID (가맹점 ID) | 이니시스 가맹계약 시 발급 | 결제 API 식별자 |

| API Key | 이니시스 관리자 | hashData 서명 |

| API IV | 이니시스 관리자 | hashData 서명 |

| 비밀번호 | 이니시스 관리자 | 키파일 복호화 |

| 키파일 | 이니시스 관리자에서 다운로드 | 결제 암복호화 |


### 1.2 TID prefix별 결제수단


```mermaid

flowchart LR

    A["이니시스 결제"] --> B["StdpayCARD신용카드"]

    A --> C["ININPGRPAY네이버페이"]

    A --> D["StdpayVBANK무통장입금"]

    A --> E["StdpayHPP휴대폰"]

    

    C -.->|"실제 카드결제"| B


    style C fill:#03C75A,color:#fff

```


| TID prefix | 결제수단 | 비고 |

|------------|---------|------|

| `StdpayCARD` | 일반 신용카드 | 가장 일반적 |

| `ININPGRPAY` | 네이버페이 (카드결제) | 네이버페이가 결제 대행 |

| `StdpayVBANK` | 무통장입금 (가상계좌) | 입금 확인 필요 |

| `StdpayHPP` | 휴대폰결제 | - |


### 1.3 테스트 모드


망보드 관리자에서 결제 플랫폼을 테스트 서버로 설정하면 `INIpayTest` MID로 테스트 결제 가능합니다.  

운영 전환 시 실 MID로 자동 변경됩니다.


---


## 2. 알림 시스템 아키텍처


### 2.1 전체 구조


```mermaid

flowchart TB

    subgraph 고객알림["고객 알림"]

        K1["카카오 알림톡(Popbill API)"]

        K2["SMS/LMS(미가입자 대체)"]

    end

    subgraph 관리자알림["관리자 알림"]

        T1["텔레그램 Bot(무료)"]

    end

    subgraph PG["이니시스 PG"]

        P1["결제 API"]

        P2["취소 API/api/v1/refund"]

    end


    subgraph 망보드["망보드 코어"]

        C1["kakao_api.php알림 발송 중앙"]

        C2["mb-commerce.php주문 API"]

        C3["inicis/functions.phpPG 연동"]

    end


    K1 --> C1

    K2 --> C1

    T1 --> C1

    P2 --> C3

    C2 --> C1

    C2 --> C3


    style 고객알림 fill:#FFF3E0

    style 관리자알림 fill:#E8F5E9

    style PG fill:#E3F2FD

```


### 2.2 알림 채널 비교


| 채널 | 대상 | 비용 | 비고 |

|------|------|------|------|

| 카카오 알림톡 (Popbill) | **고객** | ~11원/건 | 미가입자는 SMS 자동 전환 (17~36원) |

| 텔레그램 Bot | **관리자** | 무료 | 설정만 하면 즉시 사용 |


---


## 3. 관리자 결제취소 — 올바른 방법


### 3.1 취소 방법 비교


```mermaid

flowchart TD

    A["관리자가 취소 처리"] --> B{"어떤 버튼 사용?"}

    B -->|"주문 상세[결제 취소] 버튼"| C["✅ 올바른 방법"]

    B -->|"주문 목록드롭박스 [수정]"| D["❌ 잘못된 방법"]

    

    C --> E["이니시스 API 호출"]

    E --> F["DB 업데이트"]

    F --> G["고객 알림톡 발송"]

    G --> H["관리자 텔레그램 발송"]

    

    D --> I["DB만 변경"]

    I --> J["이니시스 실제 취소 안 됨"]

    J --> K["알림 발송 안 됨"]

    K --> L["⚠️ 카드사 환불 안 됨"]


    style C fill:#C8E6C9

    style D fill:#FFCDD2

```


> **반드시 주문 상세 페이지의 [결제 취소] 버튼을 사용하세요.**  

> 드롭박스 [수정]은 DB만 변경하고 실제 PG 취소를 수행하지 않습니다.


### 3.2 [결제 취소] 버튼 동작 순서


```mermaid

sequenceDiagram

    participant Admin as 관리자

    participant UI as 주문 상세 페이지

    participant MB as mb-commerce.php

    participant PG as 이니시스 API

    participant DB as 데이터베이스

    participant Notify as 알림 시스템


    Admin->>UI: [결제 취소] 클릭

    UI->>Admin: confirm 확인

    Admin->>MB: sendOrderViewData(modify_pay_cancel)

    MB->>PG: POST /api/v1/refundtype=Refund or PartialRefund

    PG-->>MB: resultCode=00 (성공)

    MB->>DB: pay_state=cancelorder_state=cancelled_payment

    MB->>Notify: do_action(mbw_commerce_modify_pay_cancel)

    Notify->>Notify: 고객 카카오 알림톡

    Notify->>Notify: 관리자 텔레그램

```


### 3.3 [결제 취소] 버튼 표시 조건


관리자가 주문 상세 페이지에서 [결제 취소] 버튼을 보려면 다음 **모든** 조건 충족:


| 조건 | 설명 |

|------|------|

| `pay_state == "complete"` 또는 `order_state == "refund_request"` | 아직 취소되지 않은 주문 |

| 결제수단이 카드/간편결제 | 무통장입금은 DB만 취소 |

| 결제일 30일 이내 | 예약상품은 60일 |

| `pay_tid`와 `order_id` 존재 | PG 거래 ID 필수 |


---


## 4. 전액 취소 vs 부분 환불


### 4.1 API 타입 분기


```mermaid

flowchart TD

    A["관리자 취소 요청"] --> B{"cancel_type == partial_refund?"}

    B -->|"NO"| C["type=Refund 전액 취소"]

    B -->|"YES"| D{"0보다 크고 pay_price보다 작은가?"}

    D -->|"YES"| E["type=PartialRefund 부분 환불"]

    D -->|"NO"| C


    style C fill:#C8E6C9

    style E fill:#FFF9C4

```


| 조건 | API type | 설명 |

|------|----------|------|

| `amt >= pay_price` | `Refund` | 전액 취소 |

| `cancel_type != partial_refund` | `Refund` | 전액 취소 |

| `cancel_type == partial_refund` AND `0 < amt < pay_price` | `PartialRefund` | 부분 환불 |


> **주의**: API 키가 설정되어 있으면 항상 부분환불 블록이 표시될 수 있습니다.  

> `amt == pay_price`일 때 `Refund`를 사용하도록 명시적으로 분기해야 합니다.


### 4.2 이니시스 API 호출 형식


**전액 취소 (Refund)**:


```

POST https://iniapi.inicis.com/api/v1/refund

Content-Type: application/x-www-form-urlencoded


type=Refund

paymethod=Card

timestamp=YYYYMMDDHHmmss (UTC)

clientIp=서버_IP

mid=가맹점ID

tid=결제TID

msg=취소사유

price=결제금액 (전액)

confirmPrice=0

hashData=sha512(apiKey + type + paymethod + timestamp + clientIp + mid + tid)

```


**부분 환불 (PartialRefund)**:


```

POST https://iniapi.inicis.com/api/v1/refund


type=PartialRefund

paymethod=Card

timestamp=YYYYMMDDHHmmss (UTC)

clientIp=서버_IP

mid=가맹점ID

tid=결제TID

msg=취소사유

price=환불금액

confirmPrice=남은금액 (결제금액 - 환불금액)

hashData=sha512(apiKey + type + paymethod + timestamp + clientIp + mid + tid + price + confirmPrice)

```


> hashData에 포함되는 파라미터 순서가 두 타입에서 다릅니다.  

> `Refund`는 `tid`까지, `PartialRefund`는 `confirmPrice`까지 포함.


### 4.3 응답 코드


| resultCode | 의미 | 조치 |

|-----------|------|------|

| `00` | 정상 처리 | 완료 |

| `01` | 실패 | 사유 확인 후 재시도 |

| `01` + `500626` | 기 취소 거래 | 이미 취소됨, 이니시스 관리자에서 원복 필요 |


---


## 5. 고객 환불/취소 플로우


### 5.1 고객이 볼 수 있는 버튼


```mermaid

flowchart TD

    A["고객 주문"] --> B{"결제수단?"}

    B -->|"무통장입금"| C["배송전[주문취소]"]

    B -->|"카드/PG"| D["배송전[환불신청]"]

    D --> E["관리자가[결제 취소] 처리"]

    

    F["7일 초과"] --> G["버튼 없음관리자 문의"]

    H["환불신청 상태"] --> I["[환불취소]"]

    J["반품/교환 신청"] --> K["[반품/교환 취소]"]


    style C fill:#FFF3E0

    style D fill:#FFF3E0

    style G fill:#FFCDD2

```


| 주문 상태 | 결제수단 | 고객 버튼 | 동작 |

|-----------|---------|----------|------|

| 주문완료 (무통장) | 무통장 | [주문취소] | DB 즉시 취소 (PG 호출 불필요) |

| 결제완료 (배송전) | 카드/PG | [환불신청] | DB를 `refund_request`로 변경 |

| 결제완료 (7일 초과) | 카드/PG | 버튼 없음 | 관리자에게 문의 |

| 환불신청 상태 | - | [환불취소] | `completed_payment`로 원복 |

| 반품/교환 신청 | - | [반품/교환 취소] | `completed_shipping`로 원복 |


### 5.2 중요: 환불요청 ≠ 자동 취소


고객의 [환불신청]은 **DB 상태만 변경**합니다. 실제 이니시스 결제 취소는 **관리자가 [결제 취소] 버튼으로 처리**해야 합니다.


```mermaid

flowchart LR

    A["고객 [환불신청]"] -->|"DB만 변경refund_request"| B["관리자 확인"]

    B --> C["관리자 [결제 취소]"]

    C -->|"이니시스 API 호출"| D["카드사 환불"]

    C --> E["고객 알림톡 발송"]

    C --> F["관리자 텔레그램 발송"]

```


---


## 6. 알림 발송 매핑


### 6.1 상황별 알림


| 상황 | 고객 카카오 | 관리자 텔레그램 | 비고 |

|------|-----------|---------------|------|

| 주문 접수 (PG/무통장) | ✅ 주문완료 | ✅ 주문완료 | 양쪽 모두 |

| 고객 환불요청 | ❌ 없음 | ✅ 전용 메시지 | 관리자에게만 |

| 관리자 결제취소 | ✅ 주문취소 | ✅ 주문취소 | 양쪽 모두 |

| 고객 주문취소 (무통장) | ✅ 주문취소 | ✅ 주문취소 | 양쪽 모두 |

| 고객 반품/교환 신청 | ✅ 주문취소 | ✅ 주문취소 | 양쪽 모두 |


### 6.2 알림 발송 흐름


```mermaid

flowchart TD

    A["주문 상태 변경"] --> B{"어떤 상태?"}

    B -->|"주문접수"| C["고객: 주문완료 템플릿"]

    C --> D["관리자: 주문완료 템플릿"]

    B -->|"환불요청refund_request"| E["관리자만: 전용 메시지"]

    E -.->|"고객에게는 없음"| F

    B -->|"결제취소"| F["고객: 취소 템플릿"]

    F --> G["관리자: 취소 템플릿"]

    B -->|"고객 취소/반품"| F


    style E fill:#FFF9C4

```


> `refund_request` 상태에서는 고객에게 알림을 보내지 않습니다.  

> "취소 완료" 알림은 관리자가 실제 PG 취소를 완료한 후에 발송됩니다.


---


## 7. 매입전취소 vs 매입후취소


### 7.1 타이밍에 따른 차이


```mermaid

timeline

    title 취소 타이밍에 따른 차이

    매입전취소 : 결제 당일 23시 30분 이전

               : 즉시 카드사 환불

    매입후취소 : 결제 익일 이후

               : 3~5 영업일 카드사 환불

```


| 구분 | 타이밍 | 환불 소요 |

|------|--------|----------|

| 매입전취소 | 결제 당일 23:30 이전 | **즉시** 카드 청구 취소 |

| 매입후취소 | 결제 익일 이후 | **3~5 영업일** 카드사 환불 |


> 네이버페이(`ININPGRPAY`)는 이니시스에서 실시간 매입 처리하므로,  

> 즉시 취소해도 매입후취소가 될 수 있습니다.


---


## 8. Popbill 알림톡 설정


### 8.1 필요 정보


| 항목 | 설명 |

|------|------|

| Popbill 회원가입 | https://www.popbill.com |

| 사업자등록번호 | 카카오톡 발신자 번호 인증에 사용 |

| 발신번호 | 사전 등록된 전화번호 |

| 카카오톡 발신자 번호 | 10~11자리 숫자 (하이픈 제거) |


### 8.2 템플릿


알림톡을 보내려면 카카오톡에 템플릿을 사전 등록해야 합니다.  

등록 시 발급받은 템플릿 코드를 망보드 관리자에 입력합니다.


| 템플릿 | 용도 | 대상 |

|--------|------|------|

| 주문완료 안내 | 주문 접수 시 | 고객 + 관리자 |

| 입금확인 안내 | 무통장 입금 시 | 고객 |

| 배송안내 | 배송 시작 시 | 고객 |

| 주문취소 안내 | 결제 취소 완료 시 | 고객 + 관리자 |


### 8.3 템플릿 변수


| 변수 | 의미 | 사용 템플릿 |

|------|------|-----------|

| `#{NAME}` | 고객명 | 전체 |

| `#{ORDER_NUM}` | 주문번호 | 전체 |

| `#{ORDER_DATE}` | 주문일자 | 전체 |

| `#{ORDER_PRICE}` | 주문금액 | 주문완료 |

| `#{CANCEL_PRICE}` | 취소금액 | 주문취소 |

| `#{PRODUCT_LIST}` | 주문상품 목록 | 전체 |

| `#{BANK_ACCOUNT}` | 입금계좌 | 주문완료 (무통장) |

| `#{DEPOSIT_DEADLINE}` | 입금기한 | 주문완료 (무통장) |


---


## 9. 텔레그램 관리자 알림


### 9.1 설정


| 항목 | 설명 |

|------|------|

| Bot 생성 | Telegram에서 @BotFather와 대화 → `/newbot` |

| Bot Token | BotFather가 발급 |

| Chat ID | 관리자 텔레그램에서 @userinfobot에게 메시지 전송 |


### 9.2 관리자 텔레그램 전송 원리


```mermaid

flowchart LR

    A["주문 상태 변경"] --> B["kakao_api.php"]

    B --> C{"고객 vs 관리자?"}

    C -->|"고객"| D["Popbill API카카오 알림톡"]

    C -->|"관리자"| E["wmbt_send_telegram()텔레그램 Bot API"]

    

    D --> F["비용 발생~11원/건"]

    E --> G["무료"]

```


### 9.3 두 가지 전송 방식


**템플릿 기반 전송** (주문접수, 결제취소 등):

```

mbw_send_admin_telegram(템플릿코드, 데이터배열)

→ 템플릿 렌더링 → HTML 태그 제거 → 텔레그램 전송

```


**직접 텍스트 전송** (환불요청 등 템플릿 없는 알림):

```

wmbt_send_telegram(문자열)

→ 텔레그램으로 직접 전송

```


---


## 10. 망보드 수정 파일 개요


### 10.1 핵심 파일


```mermaid

flowchart TD

    subgraph 주문API["mb-commerce.php"]

        A["modify_pay_cancel관리자 결제취소"]

        B["modify_order_state고객 상태변경"]

        C["multi_modify_order배치 상태변경"]

    end

    subgraph 알림["kakao_api.php"]

        D["mbw_send_admin_telegram관리자 텔레그램"]

        E["mbw_send_pay_cancel_message결제취소 알림"]

        F["mbw_send_order_state_message상태변경 알림"]

    end

    subgraph PG["inicis/functions.php"]

        G["mbw_commerce_pay_cancel_apiREST API 취소"]

        H["mbw_commerce_pay_partial_refund부분환불"]

    end

    subgraph UI["tpl.commerce.php"]

        I["관리자 [결제 취소] 버튼"]

        J["고객 [환불신청] 버튼"]

    end


    A --> G

    A --> E

    B --> F

    I --> A

    J --> B


    style 주문API fill:#E3F2FD

    style 알림 fill:#E8F5E9

    style PG fill:#FFF3E0

    style UI fill:#F3E5F5

```


### 10.2 망보드 업데이트 주의


> 망보드 플러그인 업데이트 시 위 파일들이 덮어씌워질 수 있습니다.  

> 업데이트 전 **반드시 백업**하고, 업데이트 후 diff를 확인하여 수정 사항을 재적용하세요.


---


## 11. 체크리스트


### 초기 설정


- [ ] 이니시스 가맹계약 완료 → MID, API Key, API IV, 비밀번호 발급

- [ ] 키파일 다운로드 → 서버에 배치

- [ ] 망보드 관리자에 PG 설정값 입력

- [ ] 테스트 모드로 결제/취소 정상 동작 확인

- [ ] 운영 모드 전환


### 알림 설정


- [ ] Popbill 가입 + 카카오톡 발신자 번호 등록

- [ ] 알림톡 템플릿 4종 승인 (주문완료, 입금확인, 배송안내, 주문취소)

- [ ] 망보드 관리자에 템플릿 코드 입력

- [ ] Telegram Bot 생성 → Token, Chat ID 발급

- [ ] 망보드 관리자에 Bot Token, Chat ID 입력

- [ ] 테스트 주문으로 알림 정상 수신 확인


### 관리자 운영


- [ ] 결제취소는 **반드시 주문 상세 [결제 취소] 버튼** 사용

- [ ] 드롭박스 [수정]은 DB만 변경한다는 점 숙지

- [ ] 매입전취소는 결제일 23:30 이전에 처리하면 즉시 환불

- [ ] 망보드 업데이트 전 백업 필수


---


## 12. 운영 시 자주 발생하는 실수


### 1. 드롭박스로 취소한 경우


```mermaid

flowchart TD

    A["드롭박스 [수정]상태를 취소로 변경"] --> B{"이니시스 실제 취소?"}

    B -->|"안 됨"| C["이니시스 관리자에서 수동 취소"]

    B -->|"이미 됨"| D["DB refund_price 확인 후이니시스에서 원복"]


    style A fill:#FFCDD2

```


**복구 절차**:

1. 이니시스 관리자에서 실제 취소 여부 확인

2. 취소 안 된 경우: 이니시스 관리자에서 직접 취소 또는 API 수동 호출

3. 취소된 경우: 이니시스 관리자에서 원복 처리


### 2. PartialRefund 전액 취소 불가


API 키가 설정되면 부분환불 UI가 항상 표시될 수 있으며, `amt == pay_price`일 때도 `PartialRefund`로 요청되면 실패합니다.  

`amt == pay_price` 조건을 명시적으로 체크하여 `Refund` 타입을 사용하도록 분기해야 합니다.


### 3. 알림톡 비용 누적


| 채널 | 비용/건 |

|------|--------|

| 카카오톡 알림톡 | ~11원 |

| SMS (미가입자 대체) | ~17원 |

| LMS (미가입자 대체) | ~36원 |

| 텔레그램 | **무료** |


> 관리자 알림을 카카오채널에서 텔레그램으로 전환하면 비용을 크게 절감할 수 있습니다.


---


## 13. 참고 링크


| 자료 | URL |

|------|-----|

| 이니시스 관리자 | https://iniweb.inicis.com |

| Popbill 관리 | https://www.popbill.com/ |

| 망보드 알림톡 가이드 | https://www.mangboard.com/tip/?vid=46 |


댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)