VibeFox Midtrans for OpenCart — 도움말
요구 사항
OpenCart: 3.0.x (3.0.5.0에서 테스트됨) 또는 4.0.2 이상 (4.1.0.3에서 테스트됨).
PHP: 8.0 이상.
통화: 인도네시아 루피아(IDR). Midtrans는 IDR로만 청구하므로, 결제 수단은 체크아웃 통화가 IDR인 경우에만 제공됩니다. 환전은 없습니다. 쇼핑몰에 IDR 통화가 없다면 System > Localisation > Currencies에서 추가하세요.
Midtrans 계정: Midtrans Dashboard > Settings > Access Keys의 Server Key가 필요합니다. 샌드박스 대시보드와 운영 대시보드 모두에서 가져오세요. Server Key만 사용합니다. Snap Redirect에는 Client Key가 필요하지 않습니다. 결제 수단 자체(GoPay, QRIS, 가상계좌 등)는 Midtrans 계정에서 활성화합니다.
VibeFox 라이선스 키: vibefox.net에서 구매합니다. 키 하나는 도메인 하나에서 작동합니다.
설치
다운로드 파일은 두 OpenCart 버전용 패키지가 모두 들어 있는 zip 파일 하나입니다. 컴퓨터에서 압축을 푸세요. 여기에는 README.txt, OpenCart 3 패키지 wcp_midtrans_payment_gateway-oc3-(version).ocmod.zip, OpenCart 4 패키지 wcp_midtrans_payment_gateway.ocmod.zip이 들어 있습니다. 사용 중인 OpenCart 버전의 패키지만 설치하세요. 라이선스 키는 두 버전 모두 같습니다.
OpenCart 3
1. 관리자 페이지에서 Extensions > Installer로 이동하고, Upload를 클릭한 뒤 wcp_midtrans_payment_gateway-oc3-(version).ocmod.zip 파일을 선택합니다. 이 확장 프로그램에는 OCMOD 수정 사항이 없으므로 Extensions > Modifications를 새로 고칠 필요가 없습니다. 설치 도구 대신, 이 패키지의 upload 폴더 내용을 쇼핑몰의 루트 폴더에 복사할 수도 있습니다.
2. Extensions > Extensions로 이동하고 유형으로 Payments를 선택합니다. VibeFox Midtrans Payment Gateway를 찾아 Install(녹색 + 버튼)을 클릭합니다. 관리자 사용자에게는 결제 확장 프로그램 목록을 수정할 권한이 있어야 합니다.
3. Edit(연필 버튼)을 클릭하여 설정 페이지를 엽니다. 페이지 상단의 라이선스 블록에 있는 License key에 VibeFox 라이선스 키를 붙여 넣고 Activate를 클릭합니다(라이선스 키 참고).
4. Server Key를 입력하고, 결제 알림 URL을 Midtrans 대시보드에 복사합니다(구성 참고).
5. Enable/Disable을 켜고 Save를 클릭합니다. Sandbox에서 테스트한 다음, Environment를 Production으로 전환하세요.
OpenCart 4
1. 관리자 페이지에서 Extensions > Installer로 이동하고, Upload를 클릭한 뒤 wcp_midtrans_payment_gateway.ocmod.zip 파일을 선택합니다. 파일 이름을 바꾸지 마세요. OpenCart 4는 확장 프로그램 코드를 파일 이름에서 가져오므로, 이름을 바꾼 패키지는 작동하지 않습니다.
2. 같은 페이지의 설치된 확장 프로그램 목록에 패키지가 나타납니다. 그 옆의 Install(녹색 + 버튼)을 클릭합니다.
3. Extensions > Extensions로 이동하고 유형으로 Payments를 선택합니다. VibeFox Midtrans Payment Gateway를 찾아 Install(녹색 + 버튼)을 클릭한 다음 Edit(연필 버튼)를 클릭합니다.
4. 라이선스 키, Server Key, 알림 URL을 OpenCart 3의 3~5단계와 같이 입력합니다. 설정 페이지와 필드는 두 버전 모두 같습니다. 다른 것은 알림 URL뿐입니다(구성 참고).
새로 설치하면 결제 수단은 꺼져 있고 Sandbox 환경이 선택된 상태로 시작합니다.
구성
모든 설정은 확장 프로그램 페이지에 있습니다: Extensions > Extensions > Payments > VibeFox Midtrans Payment Gateway > Edit. 섹션은 왼쪽에 나열되며, 목록 아래의 Save 버튼은 페이지 전체를 저장합니다. 설정 위에서 페이지는 선택된 환경의 Server Key가 없으면(이 경우 결제 수단이 체크아웃에서 숨겨짐) 경고하고, 쇼핑몰의 기본 통화가 IDR이 아니면 경고합니다. Sandbox가 선택되어 있는 동안에는 Sandbox mode: payments are simulated, no real money is charged.가 표시됩니다. 확장 프로그램을 수정할 권한이 없으면 페이지에 설정은 표시되지만 저장할 수 없습니다.
저장할 때 Title은 1자 이상 128자 이하, Sort Order는 정수, Total은 0 이상의 숫자, Payment page expiry (minutes)는 정수여야 합니다. 값이 잘못되면 페이지에 오류가 표시되고 아무것도 저장되지 않습니다.
Midtrans
Enable/Disable: Enable Midtrans payments는 결제 수단을 켜거나 끕니다. 기본값: 끔.
Title: 체크아웃에서 고객에게 표시되는 결제 수단 제목입니다. 주문에도 결제 수단 이름으로 저장됩니다. 기본값: Midtrans. 필수.
Description: Confirm Order 단계에서 확인 버튼 위에 고객에게 표시되는 텍스트입니다. 기본값: Pay securely via Midtrans — GoPay, QRIS, ShopeePay, cards, bank transfer and more. Sandbox에서는 그 위에 SANDBOX MODE: no real money is charged. 줄이 표시됩니다.
Sort Order: 체크아웃에서 Midtrans가 결제 수단 중 차지하는 위치입니다. 비워 두거나 정수를 입력합니다.
Geo Zone: 선택한 지역 영역 내의 결제 주소에 대해서만 Midtrans를 제공합니다. 기본값: All zones. 지역 영역은 System > Localisation > Geo Zones에서 설정합니다.
Total: Midtrans를 제공하기 전에 주문이 도달해야 하는, 쇼핑몰 기본 통화 기준 체크아웃 합계 금액입니다. 비워 두면 모든 금액에 대해 Midtrans를 제공합니다.
API 자격 증명
Midtrans Dashboard > Settings > Access Keys에서 Server Key를 복사합니다. 이 섹션에는 운영 대시보드와 샌드박스 대시보드로 가는 링크가 있습니다.
Environment: 새 결제가 사용하는 Midtrans 환경입니다. 전환하면 선택한 환경의 키와 API가 사용됩니다. 주문은 환불과 알림을 위해 결제가 이루어진 환경을 유지합니다. 기본값: Sandbox.
Production Server Key: Mid-server-로 시작합니다. 비밀로 유지하세요.
Sandbox Server Key: SB-Mid-server-로 시작합니다.
저장된 키는 다시 표시되지 않습니다. 입력란은 비어 있으며 Saved — leave empty to keep it.가 표시됩니다. 변경하려는 경우에만 새 값을 입력하세요. 저장된 키를 삭제하려면 입력란 아래의 Clear the saved key on save에 체크한 뒤 Save를 클릭합니다.
결제 알림 URL
알림은 결제가 이루어졌다는 사실을 쇼핑몰에 알려 줍니다. Notification URL 필드에는 사용할 URL이 표시됩니다. OpenCart 3에서는 https://your-store/index.php?route=extension/payment/wcp_midtrans_payment_gateway/webhook, OpenCart 4에서는 https://your-store/index.php?route=extension/wcp_midtrans_payment_gateway/payment/wcp_midtrans_payment_gateway.webhook이며, OpenCart 설치의 스토어프론트 주소로 만들어집니다. 설정에 표시된 그대로 URL을 정확히 복사하고, 사용하는 샌드박스 대시보드와 운영 대시보드 모두의 Midtrans Dashboard > Settings > Payment > Notification URL에 붙여 넣으세요. 이 URL은 인터넷에서 접근 가능해야 합니다. 브라우저에서 열면 짧은 설명이 표시되므로 접근 가능한지 확인할 수 있습니다. Midtrans 대시보드의 Test notification URL 버튼에도 응답합니다.
모든 알림에는 Server Key 중 하나로 만든 유효한 서명이 있어야 하며, 키의 환경이 결제의 환경과 일치해야 합니다. 유효한 서명이 없는 알림은 거부됩니다. 주문이 바뀌기 전에 상태는 Midtrans 상태 API에서 다시 읽힙니다. 확장 프로그램은 다음 Midtrans 거래 상태를 처리합니다:
결제 알림 URL이 없으면 주문은 고객이 결제 후 쇼핑몰로 돌아왔을 때에만 확인됩니다. 나중에 이루어진 후불 결제는 고객이 돌아오기 전까지 인식되지 않습니다.
결제 설정
Midtrans는 IDR로만 청구하며, 금액은 루피아 정수 단위로 전송됩니다. 주문 항목을 합쳐도 반올림된 합계와 일치하지 않으면, Midtrans에 Rounding adjustment 줄이 전송됩니다.
Payment page expiry (minutes): 고객이 결제할 수 있는 시간입니다(Snap 페이지, 가상계좌 등). 비워 두거나 0을 입력하면 Midtrans 기본값을 사용합니다.
Order ID prefix: Midtrans에 보내는 번호 앞에 추가됩니다. 이렇게 하면 여러 쇼핑몰이 하나의 Midtrans 계정을 함께 사용할 수 있습니다. 번호는 시간 정보가 포함된 OpenCart 주문 ID입니다(예: OC-123-1700000000). 영문자, 숫자, - _ . ~만 사용할 수 있으며 최대 20자입니다. 그 밖의 문자는 저장할 때 제거됩니다. 다른 쇼핑몰의 알림은 무시됩니다. 기본값: OC-.
주문
OpenCart는 Confirm Order 단계에서 상태 없이(미완료 주문) 주문을 만듭니다. 주문은 Midtrans가 거래를 확인한 후에야 상태를 받습니다. 아래의 각 항목에는 OpenCart 주문 상태가 나열됩니다.
Status after payment: 결제가 확인된 후의 상태입니다. 기본값: 처리중. 결제 완료된 주문을 완료로 표시하려면 완료 상태를, 결제된 모든 주문을 직접 확인하려면 자체 검토 상태를 선택하세요.
Awaiting Midtrans payment status: Midtrans가 pending을 보고한 경우입니다. 가상계좌, 편의점, QRIS 코드가 발급되었거나, 카드의 3-D Secure 인증이 끝나지 않았습니다. 기본값: 대기.
Midtrans payment on hold status: 결제에 사용자의 검토가 필요합니다(주문 상태 참고). 기본값: 대기. OpenCart에는 On hold 상태가 없기 때문입니다. System > Localisation > Order Statuses에서 자체 상태를 만들고 여기서 선택할 수 있습니다.
Payment failed status: Midtrans가 대기 중인 주문에 대해 deny 또는 failure를 보고한 경우입니다. 기본값: 실패.
Payment expired / cancelled status: 대기 중인 주문의 대기 중인 Midtrans 거래가 만료되었거나 취소되었습니다. 결제되지 않은 Midtrans 주문을 직접 이 상태로 설정하면, 대기 중인 Midtrans 거래(예: 발급된 가상계좌)가 만료 처리되어 더 이상 결제할 수 없게 됩니다. 기본값: 취소됨.
Refunded status: 주문 페이지 또는 Midtrans 대시보드에서 결제가 전액 환불되었습니다. 기본값: 환불됨.
고급
Debug log: API 호출과 알림을 OpenCart 로그 폴더(storage/logs)의 midtrans_p_debug.log.php에 기록합니다. 이 파일은 웹에서 열 수 없습니다. 오류는 항상 기록됩니다. 키와 고객 데이터는 절대 기록되지 않습니다. 기본값: 끔.
Log: 로그의 크기와 최근 항목을 표시합니다. Clear log를 클릭하면 로그를 비웁니다.
Delete data on uninstall: 켜면 확장 프로그램을 제거할 때 게이트웨이 설정과 로그가 삭제됩니다. 주문의 Midtrans 결제 참조 정보와 환불은 항상 유지되므로, 재설치 후에도 이전 주문을 환불할 수 있습니다. 기본값: 끔.
가져오기 / 내보내기
Export: Download JSON은 설정을 JSON 파일로 저장합니다. Server Key는 내보내지 않습니다.
Import: 이전에 내보낸 JSON을 붙여 넣고 Import를 클릭하면 설정이 복원됩니다. 저장된 Server Key는 유지됩니다.
체크아웃
Payment Method 단계에서 고객이 결제 수단을 선택합니다(기본값은 Midtrans). Confirm Order 단계에서 고객은 설명과 You will be redirected to the Midtrans payment page (GoPay, QRIS, ShopeePay, cards, bank transfer and more). 안내를 봅니다. OpenCart는 이 단계에서 주문을 만들며, 아직 상태는 없습니다. 고객이 Confirm Order를 클릭하면 확장 프로그램은 주문 합계에 대해 루피아 정수 단위로 Midtrans Snap 거래를 만들고, 주문 항목, 배송비, 할인, 세금, 고객의 청구지 및 배송지 정보를 포함해 고객을 Midtrans 결제 페이지로 보냅니다. 거기서 고객은 Midtrans 계정에서 활성화된 결제 방식을 선택합니다. OpenCart 4에서 고객은 결제 수단 블록의 Choose 버튼을 눌러 Payment method options 창에서 결제 수단을 선택한 다음, 체크아웃 페이지 하단의 Confirm Order를 클릭합니다.
결제 후 고객은 쇼핑몰로 돌아옵니다. 돌아오는 링크 자체로는 주문이 결제 완료로 표시되지 않습니다. 주문은 Midtrans가 확인한 후에만 결제 완료로 표시되며, 확인은 서명된 알림 또는 고객이 돌아왔을 때 Midtrans 상태 API에 대한 요청으로 이루어집니다. 그 후 주문은 일반적인 OpenCart 방식으로 상태를 받고, 일반적인 주문 이메일 발송과 재고 업데이트가 이루어지며, 고객은 OpenCart 주문 완료 페이지를 봅니다. 후불 결제의 경우 페이지에는 We are waiting for Midtrans to confirm your payment. If you chose a bank transfer, virtual account or convenience store, please complete the payment using the instructions from Midtrans. You will receive an e-mail once the payment is confirmed.도 표시됩니다. 고객이 돌아왔을 때 Midtrans에 연결할 수 없으면, Payment confirmation 페이지에 We are confirming your payment with Midtrans. The order will be updated automatically — please do not pay again.가 표시되며, Check again 버튼과 Back to checkout 버튼이 함께 나옵니다.
고객이 결제하지 않고 Snap 페이지를 떠났다면, The Midtrans payment was not completed. You can try again below.와 함께 체크아웃으로 돌아갑니다. 결제가 거부되었거나 만료되었다면 메시지는 Your Midtrans payment was declined or has expired. Please try again or choose another payment method.입니다. OpenCart 4에서는 이 메시지가 체크아웃 페이지 상단에 표시됩니다. 장바구니는 유지됩니다. OpenCart 3는 Confirm Order 단계가 표시될 때마다 새 주문을 만들고, OpenCart 4는 체크아웃의 주문을 유지하며 같은 주문을 다시 결제합니다. 어느 경우든 확장 프로그램은 같은 장바구니의 모든 주문을 하나의 결제로 취급합니다. 고객이 다시 결제하면 같은 금액의 사용하지 않았거나 대기 중인 Snap이 재사용됩니다(이미 발급된 가상계좌는 계속 유효합니다). 금액이 바뀌었다면 먼저 Midtrans에서 대기 중인 거래가 만료 처리됩니다. 그 사이에 이전 Snap이 결제되었다면, 그 결제가 확인되고 고객은 새 거래 없이 성공 페이지로 이동합니다.
OpenCart 4는 성공 페이지가 표시될 때까지 체크아웃에 주문을 유지합니다. 그 사이 결제 없이 주문이 닫혔다면(예: 결제가 거부되었거나 만료되었거나, 쇼핑몰에서 취소한 경우), 고객은 Your previous order was cancelled without a payment. Please confirm the order again to pay with a new order.가 표시된 체크아웃으로 돌아가며, 다음 Confirm Order에서 새 주문이 결제됩니다. 주문이 이미 접수되었고 장바구니가 바뀌었다면 메시지는 Your previous order #(number) has already been placed. Your cart has changed: please confirm the new order to pay for it.입니다. 수량 변경을 포함한 장바구니 변경은 자체 결제가 필요한 새 장바구니로 취급됩니다. 장바구니가 이미 비워진 뒤 주문의 결제가 거부되거나 만료되면(예: 가상계좌 결제 후), 고객에게는 The Midtrans payment of order #(number) was declined or has expired, so the order will not be shipped. To buy these items, please place a new order.가 표시됩니다.
Midtrans가 결제를 시작할 수 없으면, 고객은 Confirm Order 단계에 머물고 버튼 위에 짧은 메시지를 봅니다: Could not connect to Midtrans. Please try again in a moment., Midtrans payments are temporarily unavailable. Please choose another payment method or contact us.(예: 잘못된 Server Key인 경우) 또는 Midtrans가 알려 준 사유입니다. 기술적 사유는 로그에 기록됩니다.
쇼핑몰이 점검 모드여도 알림은 작동합니다. OpenCart 3는 결제 확장 프로그램의 요청을 통과시키며, OpenCart 4에서는 확장 프로그램이 알림과 고객의 복귀를 통과시키는 시작 액션(startup action)을 추가합니다.
이 확장 프로그램은 Snap Redirect만 사용합니다. Snap 팝업, 쇼핑몰의 카드 입력 양식, 저장된 카드나 원클릭 결제, 할부 또는 프로모션 설정(결제 수단은 Midtrans 대시보드에서 구성합니다), 구독은 지원하지 않습니다. 카드 결제는 즉시 청구되며, 별도의 승인 및 캡처는 없습니다.
주문 및 환불
주문 상태
No status (missing order): 고객이 Midtrans로 보내졌지만 아직 결제하지 않았거나, Midtrans가 아직 결제를 확인하지 않았습니다. Sales > Orders에서는 Order Status 필터를 Missing Orders로 설정했을 때에만 이런 주문이 표시됩니다.
Awaiting Midtrans payment status(기본값 대기): 고객이 후불 방식을 선택했거나, 완료되지 않은 카드 결제를 시작했습니다. Midtrans가 결제를 보고하면 주문은 Status after payment로 넘어갑니다.
Status after payment(기본값 처리중): 결제가 확인되었습니다. 메모에는 결제 방식, Midtrans 주문 ID, 거래가 표시됩니다.
Midtrans payment on hold status(기본값 대기): 카드 결제가 사기 검토 중입니다(challenge, 아직 기록된 금액 없음). 결제된 금액이나 통화가 주문과 일치하지 않았습니다(주문은 결제 완료로 표시되지 않음). 또는 취소된 주문에 대해 결제가 도착했습니다(주문은 자동으로 다시 열리지 않음). 메모에 설명이 나옵니다. 주문을 확인한 뒤 처리하거나 결제를 환불하세요.
Payment expired / cancelled status(기본값 취소됨): 대기 중인 주문의 결제되지 않은 거래가 만료되었거나 취소되었습니다.
Payment failed status(기본값 실패): 결제가 실패했거나, 검토 중이던 카드 결제가 거부되었습니다.
Refunded status(기본값 환불됨): 결제가 전액 환불되었습니다.
OpenCart는 이러한 상태 변경을 일반적인 방식으로 고객에게 알립니다. 같은 장바구니에 두 번째 결제가 도착해도 주문은 바뀌지 않습니다. 결제 완료된 주문의 메모는 두 번째 결제를 Midtrans 대시보드에서 환불하라고 알려 줍니다. 이미 환불된 주문에 대한 결제는 메모만 추가합니다.
메모는 고객이 볼 수 없는 주문 History의 항목입니다.
VibeFox Midtrans Payment Gateway 탭
Sales > Orders에서 Midtrans로 결제된 주문을 엽니다. 주문 페이지 하단, History 및 Additional 옆에 있는 VibeFox Midtrans Payment Gateway 탭에는 Midtrans order ID, 결제 환경의 Midtrans 대시보드 거래와 연결된 Transaction ID(샌드박스 결제에는 Sandbox 라벨 포함), Payment method, Status, Paid / refunded 금액, 환불 양식, 환불 내역, 주문의 Midtrans notes가 표시됩니다. 이 탭은 확장 프로그램에 접근 권한이 있는 사용자에게 표시됩니다.
환불
VibeFox Midtrans Payment Gateway 탭에서 Amount를 입력합니다(아직 환불되지 않은 금액이 자동으로 채워짐). 필요하면 Reason (optional)을 입력하고 Refund via Midtrans를 클릭합니다. Refund this amount through Midtrans? This cannot be undone. 질문을 확인하세요. 전액 환불과 부분 환불은 루피아 정수 단위로 지원되며, 소수점이 있는 금액은 거부됩니다. 확장 프로그램을 수정할 권한이 있어야 합니다(System > Users > User Groups에서 설정). 주문이 나중에 수정되었더라도, Midtrans가 실제로 청구한 금액까지 환불할 수 있습니다. 환불은 결제가 이루어진 환경에서 전송되므로, 해당 환경의 Server Key가 설정되어 있어야 합니다. Midtrans는 일부 결제 수단과 정산된 거래에 대해서만 API 환불을 허용합니다. Midtrans가 환불을 받아들이지 않으면 탭에 오류가 표시되고 환불은 기록되지 않습니다. 그럴 때는 Midtrans 대시보드에서 환불하세요. 성공한 환불은 환불 내역과 메모에 추가됩니다. 전액 환불은 고객에게 알리지 않고, 상품을 재고로 되돌리지도 않은 채, 수동 상태 변경과 마찬가지로 주문을 Refunded status로 설정합니다. 부분 환불은 상태를 바꾸지 않습니다. 환불은 Midtrans가 결제가 정산되었다고 보고한 후에만 가능합니다.
Sales > Returns의 상품 반품은 Midtrans를 통해 돈을 돌려주지 않습니다.
Midtrans 대시보드에서 이루어진 환불은 알림을 통해 전달되며, 사유 Refunded in the Midtrans dashboard와 함께 환불 내역에 자동으로 추가됩니다. 그곳에서 결제 전액이 환불되면 주문은 Refunded status를 받습니다.
라이선스 키
이 확장 프로그램은 vibefox.net에서 받은 VibeFox 라이선스 키로 작동합니다. License — VibeFox Midtrans Payment Gateway 라이선스 블록은 Extensions > Extensions > Payments > VibeFox Midtrans Payment Gateway > Edit 페이지에서 설정 위에 있는 첫 번째 블록입니다. 키를 License key에 붙여 넣고 Activate를 클릭합니다. 그러면 블록에 마스킹된 키, 상태(예: 라이선스가 유효한 날짜와 도메인), 그리고 다음 버튼이 표시됩니다. 상태를 다시 확인하는 Check now, 다른 키를 입력하는 Change key, 이 쇼핑몰에서 키를 삭제하는 Remove key입니다. 그 아래에는 Product: opencart-payment-midtrans 줄과 vibefox.net 계정을 여는 Manage licenses and domains in your account 링크가 있습니다. 확장 프로그램에 대한 Modify 권한이 있는 관리자 사용자만 키를 변경할 수 있습니다. 블록의 텍스트는 관리자 언어를 따릅니다(영어와 러시아어가 포함됩니다).
키가 승인되지 않으면 블록에 이유가 표시됩니다. 예를 들면 Key not found, This key belongs to another product, Domain limit reached, 또는 날짜와 함께 나오는 License expired on입니다. 쇼핑몰 주소를 바꾼 뒤나 계정에서 도메인 슬롯을 비운 뒤에는 Check now를 클릭하세요. 라이선스 서버에 연결할 수 없으면 확장 프로그램은 마지막으로 확인된 상태로 계속 작동합니다.
키 하나는 도메인 하나에서 작동합니다. 도메인은 OpenCart 구성에 있는 쇼핑몰 주소입니다. 쇼핑몰에서 키를 제거해도 도메인 슬롯은 해제되지 않습니다. vibefox.net 계정에서 슬롯을 해제하세요.
활성 키가 없으면 체크아웃에서 고객에게 Midtrans가 표시되지 않습니다. 그래도 결제가 시작되면 고객에게 This payment method is not available. Please choose another one.가 표시됩니다. 같은 브라우저에서 관리자 페이지에 로그인한 관리자 사용자는 쇼핑몰에서 결제 수단을 (unlicensed — visible to admins only) 표시와 함께 계속 볼 수 있으므로, 키를 구매하기 전에 확장 프로그램을 설정하고 시험할 수 있습니다. OpenCart 4에서는 이 미리 보기를 사용할 수 없습니다. 쇼핑몰은 관리자 로그인을 인식하지 않으므로, 활성 키가 없으면 결제 수단은 모든 사용자에게 숨겨집니다. Edit 페이지를 한 번 열면 관리자 Dashboard에 알림이 나타납니다. ×로 닫으면 7일 동안 숨겨집니다. 기존 주문은 영향을 받지 않습니다. 이미 시작된 결제는 계속 확인되고, 환불도 작동합니다.
라이선스가 만료되어도 확장 프로그램은 계속 작동하지만, 업데이트와 지원에는 갱신이 필요합니다. 관리자 Dashboard나 Edit 페이지를 열면 상태가 자동으로 다시 확인됩니다. 키를 입력한 뒤 처음 14일 동안은 하루에 한 번, 그 후에는 일주일에 한 번입니다. 크론 작업은 필요하지 않습니다. 확장 프로그램을 제거하면 라이선스 키와 라이선스 상태는 항상 삭제됩니다.
문제 해결
Midtrans가 체크아웃에 나타나지 않음: 라이선스가 활성 상태인지, Enable/Disable이 켜져 있는지, 선택한 Environment에 Server Key가 있는지 확인하세요. 체크아웃 통화가 IDR인지, 결제 주소가 선택한 Geo Zone 안에 있는지, 주문이 설정의 Total에 도달했는지 확인하세요. 키가 없거나 쇼핑몰 통화가 IDR이 아니면 설정 페이지에 경고가 표시됩니다.
결제는 완료되었지만 주문이 상태 없이 남아 있음: 알림이 작동하지 않습니다. 사용하는 환경(샌드박스 또는 운영)의 Midtrans 대시보드에 결제 알림 URL이 설정되어 있는지, Notification URL에 표시된 URL과 정확히 같은지, 접근 가능한지 확인하세요. 브라우저에서 열면 짧은 설명이 표시됩니다. 알림을 보려면 Debug log를 켜세요. 고객이 결제 후 쇼핑몰로 돌아오면 주문도 상태를 받습니다.
알림 응답이 Invalid signature: 알림이 Sandbox 또는 Production Server Key로 서명되지 않았습니다. 설정의 키가 알림을 보내는 대시보드와 같은 Midtrans 계정에 속하는지 확인하세요.
알림 응답이 Server key not configured: Server Key가 설정되어 있지 않습니다. 설정에 입력하세요. Midtrans가 알림을 다시 보냅니다.
알림 응답이 Order not found — ignored: Midtrans 주문 ID가 이 쇼핑몰에서 발급된 것이 아닙니다. 예를 들어 같은 Midtrans 계정을 쓰는 다른 쇼핑몰이 발급한 경우입니다. 쇼핑몰마다 서로 다른 Order ID prefix를 설정하세요.
알림 응답이 Environment mismatch — ignored: 알림이 결제가 이루어진 환경과 다른 환경의 키로 서명되었습니다.
알림 응답이 Verification failed, please retry: Midtrans 상태 API에 연결할 수 없었습니다. Midtrans가 알림을 다시 보냅니다.
알림 응답이 Busy, please retry: 같은 시점에 다른 요청이 장바구니를 업데이트하고 있었거나, 주문 상태를 설정할 수 없었습니다. Midtrans가 알림을 다시 보냅니다. 원인은 로그에서 확인하세요.
주문이 검토 상태임: 탭의 Midtrans notes를 읽으세요. 카드 결제가 사기 검토 중이거나, 결제된 금액이나 통화가 주문과 일치하지 않았거나, 주문이 취소된 후에 결제가 도착했습니다.
고객이 Confirm Order 후 오류를 봄: 확장 프로그램 페이지의 Log 항목을 확인하세요. 오류는 항상 기록됩니다. 잘못된 Server Key는 Midtrans 결제를 일시적으로 사용할 수 없다는 메시지를 띄웁니다. Midtrans only supports payments in IDR (Indonesian Rupiah). Please choose another payment method.는 주문이 IDR이 아니라는 뜻입니다. This payment method is not available.는 체크아웃 세션이 더 이상 주문과 맞지 않거나, 그사이 결제 수단이 꺼졌다는 뜻입니다. 고객은 체크아웃을 새로 고쳐야 합니다.
고객이 Payment verification failed.와 함께 체크아웃으로 돌아감: 돌아오는 링크가 불완전하거나 주문에 속하지 않았습니다. 주문은 여전히 알림을 통해 상태를 받습니다.
탭에 환불 양식이 없음: 탭에 사유가 표시됩니다. 결제가 아직 정산되지 않았거나, 전액 환불되었거나, 사용자 그룹에 확장 프로그램 수정 권한이 없거나, 주문이 결제된 환경의 Server Key가 설정되어 있지 않습니다.
환불 실패: 결제 수단 또는 거래 상태가 API 환불을 허용하지 않습니다. Midtrans 대시보드에서 환불하세요. 환불은 자동으로 주문에 기록됩니다.
개발자용: Snap 거래를 만들기 전에 확장 프로그램은 요청 데이터와 주문을 담아 OpenCart 이벤트 midtrans_p_snap_payload를 발생시킵니다. 주문 ID와 금액은 변경할 수 없습니다.
제거
Extensions > Extensions로 이동하여 유형으로 Payments를 선택하고, VibeFox Midtrans Payment Gateway 옆의 Uninstall(빨간색 − 버튼)을 클릭합니다. 이 확장 프로그램의 라이선스 키와 라이선스 상태는 항상 제거됩니다. OpenCart는 확장 프로그램의 자체 설정을 항상 제거합니다: Enable/Disable, Sort Order, Geo Zone, Total, 그리고 Orders 섹션의 주문 상태. 이 설정들은 재설치 시 기본값으로 돌아갑니다. 확장 프로그램의 OpenCart 이벤트도 제거됩니다(OpenCart 4에서는 이벤트와, 유지 보수 모드에서 알림과 고객의 복귀를 통과시키는 시작 액션도 제거됩니다). Delete data on uninstall이 켜져 있으면 나머지 게이트웨이 설정(제목, 설명, 환경, Server Key, 결제 설정, 로깅)과 로그가 제거됩니다. 꺼져 있으면 나중에 재설치할 때를 위해 보존됩니다. 주문의 Midtrans 결제 참조 정보와 환불은 항상 유지되므로, 재설치 후에도 이전에 결제된 주문을 환불할 수 있습니다. 기존 주문은 결제 메모를 유지합니다.
OpenCart 4에서 파일까지 제거하려면, 제거한 뒤 Extensions > Installer로 이동하여 설치된 확장 프로그램 목록에서 VibeFox Midtrans Payment Gateway 옆의 Uninstall(주황색 − 버튼)을 클릭한 다음, Delete(빨간 휴지통 버튼)를 클릭하여 업로드된 패키지를 삭제하세요.
Midtrans는 각 소유자의 상표입니다. 이 확장 프로그램은 Midtrans와 제휴하거나 Midtrans의 승인을 받지 않았습니다.
