뒤로

VibeFox Cashfree for OpenCart — 도움말

요구 사항

OpenCart: 3.0.x (3.0.5.0에서 테스트됨) 또는 4.0.2 이상(4.1.0.3에서 테스트됨).

PHP: 8.0 이상.

HTTPS: Cashfree는 https:// 주소로만 웹훅을 전달합니다. HTTPS가 없어도 고객이 쇼핑몰로 돌아오면 결제는 확인되지만, 실제 운영을 시작하기 전에 HTTPS를 활성화하세요.

Cashfree 계정: Cashfree 계정의 App ID와 Secret Key가 필요하며, 테스트(샌드박스) 환경과 운영 환경에 각각 따로 있습니다. 또한 Cashfree 가맹점 대시보드(Merchant Dashboard)에 웹훅을 추가해야 합니다(구성 참조). Secret Key는 웹훅을 검증하는 데도 사용되므로 웹훅용 별도 비밀 키는 없습니다. 주문 통화가 Cashfree 계정에서 활성화되어 있어야 합니다.

VibeFox 라이선스 키: vibefox.net에서 구입합니다. 키 하나는 도메인 하나에서 작동합니다.

설치

이 다운로드는 두 OpenCart 버전용 패키지가 들어 있는 zip 파일 하나입니다. 컴퓨터에서 압축을 푸세요. 압축 파일에는 README.txt, OpenCart 3용 패키지 wcp_cashfree_payment-oc3-(version).ocmod.zip, OpenCart 4용 패키지 wcp_cashfree_payment.ocmod.zip이 들어 있습니다. 사용하는 OpenCart 버전에 맞는 패키지만 설치하세요. 라이선스 키는 두 버전 모두 동일합니다.

OpenCart 3

1. 관리자 화면에서 Extensions > Installer로 이동하여 Upload를 클릭하고 wcp_cashfree_payment-oc3-(version).ocmod.zip 파일을 선택하세요. 이 확장 기능에는 OCMOD 수정 사항이 없으므로 Extensions > Modifications를 새로 고칠 필요가 없습니다. 설치 도구 대신 이 패키지의 upload 폴더 내용을 쇼핑몰의 루트 폴더에 복사할 수도 있습니다.

2. Extensions > Extensions로 이동하여 유형으로 Payments를 선택하세요. VibeFox Cashfree Payments를 찾아 Install(녹색 + 버튼)을 클릭하세요. 관리자 사용자에게는 결제 확장 기능 목록을 수정할 권한이 있어야 합니다.

3. Edit(연필 버튼)을 클릭하여 설정 페이지를 여세요. 페이지 상단의 라이선스 블록에 있는 License key에 VibeFox 라이선스 키를 붙여 넣고 Activate를 클릭하세요(라이선스 키 참조).

4. Sandbox App ID와 Sandbox Secret Key를 입력하고, Cashfree 가맹점 대시보드에 웹훅을 추가한 다음(구성 참조), Enable/Disable을 켜고, Save를 클릭한 후 결제를 테스트하세요.

5. 준비가 되면 운영용 App ID와 Secret Key를 입력하고, Sandbox Mode를 끈 다음 Save를 클릭하세요.

OpenCart 4

1. 관리자 화면에서 Extensions > Installer로 이동하여 Upload를 클릭하고 wcp_cashfree_payment.ocmod.zip 파일을 선택하세요. 파일 이름을 바꾸지 마세요. OpenCart 4는 파일 이름에서 확장 기능 코드를 가져오므로, 이름을 바꾼 패키지는 작동하지 않습니다.

2. 설치된 확장 기능 목록에 같은 페이지에서 패키지가 나타납니다. 그 옆의 Install(녹색 + 버튼)을 클릭하세요.

3. Extensions > Extensions로 이동하여 유형으로 Payments를 선택하세요. VibeFox Cashfree Payments를 찾아 Install(녹색 + 버튼)을 클릭한 다음 Edit(연필 버튼)를 클릭하세요.

4. 라이선스 키, Cashfree 키, 웹훅은 OpenCart 3의 3~5단계와 같이 입력하세요. 설정 페이지와 그 필드는 두 버전이 같습니다. 웹훅 URL만 다릅니다(웹훅 참조).

새로 설치하면 결제 수단은 꺼진 상태이고 샌드박스 모드는 켜진 상태로 시작합니다.

구성

모든 설정은 확장 기능 페이지에 있습니다: Extensions > Extensions > Payments > VibeFox Cashfree Payments > Edit. 섹션은 왼쪽에 나열되며, 목록 아래의 Save 버튼은 페이지 전체를 저장합니다. 설정 위에는 Cashfree가 결제를 확인한 후에만 주문이 상태를 받는다는 내용이 표시됩니다. 결제 수단이 활성화되어 있을 때 선택한 모드의 API 키가 없으면 페이지가 경고하며(이 경우 결제 수단은 체크아웃에서 숨겨짐), 샌드박스 모드가 켜져 있는 동안에는 Sandbox mode is on: customers see a test checkout and no real money is charged.라고 표시합니다. 확장 기능을 수정할 권한이 없으면 페이지에는 설정이 표시되지만 저장할 수는 없습니다.

저장할 때 Title은 비워 둘 수 없으며(최대 128자), API Version은 나열된 버전 중 하나여야 하고, Sort Order는 정수여야 하고, Total은 0 이상의 숫자여야 하며, 지역 구역과 주문 상태가 존재해야 합니다. 그렇지 않으면 아무것도 저장되지 않습니다. 선택한 모드의 키 없이 활성화된 결제 수단을 저장하면, 키를 입력하기 전까지 결제 수단이 체크아웃에서 숨겨진다는 경고와 함께 설정이 저장됩니다.

Cashfree Payments

Enable/Disable: Enable Cashfree Payments는 결제 수단을 켜거나 끕니다. 기본값: 끔.

Title: 고객이 체크아웃에서 보는 결제 수단 이름입니다. 주문에도 결제 수단 이름으로 저장됩니다. 기본값: Cashfree Payments. 필수.

Description: 고객이 Confirm Order 단계에서 확인 버튼 위에 보는 문구입니다. 기본값: Pay securely via Card, UPI, Net Banking, Wallet via Cashfree.

Sort Order: 체크아웃에서 결제 수단 중 Cashfree의 위치입니다. 비워 두거나 정수를 입력하세요.

Geo Zone: 선택한 지역 구역의 결제 주소에 대해서만 Cashfree를 제공합니다. 기본값: All zones. 지역 구역은 System > Localisation > Geo Zones에서 설정합니다.

Total: Cashfree가 제공되기 위해 주문이 도달해야 하는, 쇼핑몰 기본 통화 기준의 체크아웃 금액입니다. 비워 두면 모든 금액에 대해 Cashfree를 제공합니다. 통화의 Cashfree 최소 금액(1단위, 소수점 셋째 자리까지 있는 통화는 0.01 또는 0.1)보다 적은 금액에는 결코 제공되지 않습니다.

모드와 API 키

App ID와 Secret Key는 Cashfree 가맹점 대시보드의 Developers > API Keys에서 확인할 수 있습니다(페이지에 해당 위치로 가는 링크가 있습니다). 테스트 키와 운영 키는 서로 다릅니다.

Sandbox Mode: 테스트를 위해 Cashfree 샌드박스를 사용합니다. 실제 금액은 청구되지 않으며, Confirm Order 단계와 결제 페이지에 SANDBOX MODE - no real payments will be processed.가 표시됩니다. 기본값: 켬. 실제 결제를 하려면 끄세요.

Sandbox App ID: Cashfree 테스트 환경의 App ID입니다.

Sandbox Secret Key: Cashfree 테스트 환경의 Secret Key입니다.

App ID: Cashfree 운영 환경의 App ID입니다.

Secret Key: Cashfree 운영 환경의 Secret Key입니다.

저장된 Secret Key는 다시 표시되지 않습니다. 입력란은 비어 있고 저장됨 — 유지하려면 비워 두세요.라고 표시됩니다. 변경하려는 경우에만 새 값을 입력하세요. 저장된 키를 삭제하려면 입력란 아래의 Clear the saved value on save를 선택한 다음 Save를 클릭하세요.

결제는 생성된 환경을 그대로 유지합니다. 해당 웹훅은 검증되고, 상태는 확인되며, 환불은 그 환경의 키로 전송됩니다. 따라서 운영으로 전환한 후 샌드박스 결제가 정산될 때까지 샌드박스 키를 계속 입력해 두세요.

웹훅

웹훅은 결제가 이루어졌는지, 실패했는지, 환불되었는지를 쇼핑몰에 알려 줍니다. Cashfree 가맹점 대시보드에서 Developers > Webhooks로 이동한 후, 이 섹션의 Webhook URL에 표시된 URL을 Payment 및 Refund 이벤트와 함께 추가하세요. OpenCart 3에서는 https://your-store/index.php?route=extension/payment/wcp_cashfree_payment/webhook과 같은 형태이고, OpenCart 4에서는 https://your-store/index.php?route=extension/wcp_cashfree_payment/payment/wcp_cashfree_payment.webhook과 같은 형태이며,OpenCart 설치의 storefront 주소로 만들어집니다. 설정에 표시된 URL을 정확히 그대로 복사하세요. HTTPS 쇼핑몰에서는 확장 기능이 결제할 때마다 이 URL을 Cashfree에도 전달합니다. 쇼핑몰이 HTTPS를 사용하지 않으면 이 섹션에 경고가 표시됩니다.

확장 기능은 다음 이벤트를 처리합니다(이 섹션에도 나열되어 있습니다):

PAYMENT_SUCCESS_WEBHOOK: 결제가 성공했습니다. 금액과 통화를 확인한 후 주문이 상태를 받습니다.
PAYMENT_FAILED_WEBHOOK: 결제가 실패했습니다. 주문은 상태 없이 남으며, 고객은 다시 결제할 수 있습니다.
PAYMENT_USER_DROPPED_WEBHOOK: 고객이 결제를 중단했습니다. 주문은 상태 없이 남으며, 고객은 다시 결제할 수 있습니다.
REFUND_STATUS_WEBHOOK and AUTO_REFUND_STATUS_WEBHOOK: 환불 상태가 바뀌었습니다. 환불 ID, 금액, 상태가 포함된 메모가 추가되고, 환불 내역에 새 상태가 표시됩니다.

Cashfree는 모든 웹훅에 Secret Key로 서명합니다. 유효한 서명이 없는 웹훅은 거부됩니다. 웹훅은 결제가 이루어진 환경의 Secret Key로 서명되어야 하므로, 샌드박스 키가 운영 결제를 확인하는 일은 결코 없습니다. 이 쇼핑몰이 시작하지 않은 결제(예: 같은 Cashfree 계정의 다른 쇼핑몰)에 대한 서명된 웹훅은 확인 응답을 받고 무시됩니다. 웹훅이 없으면 주문은 고객이 결제 후 쇼핑몰로 돌아왔을 때에만 확인됩니다. 고객이 결제 후 브라우저를 닫으면, 주문은 웹훅(또는 같은 장바구니에 대한 다음 결제 시도)만이 확인할 수 있습니다.

주문

OpenCart는 Confirm Order 단계에서 상태가 없는 주문(누락된 주문)을 만듭니다. 주문은 Cashfree가 결제를 확인한 후에만 상태를 받습니다. 실패하거나 중단된 결제는 주문을 상태 없이 남기며, 장바구니는 유지됩니다. 아래의 각 필드에는 OpenCart 주문 상태가 나열됩니다.

Order Status After Payment: 결제가 확인되고 금액과 통화가 일치한 후 설정되는 상태입니다. 기본값: 처리 중.

On Hold (Review) Status: Cashfree가 주문 합계와 다른 결제 금액 또는 통화를 보고했습니다. 메모에는 예상 금액과 실제 받은 금액이 표시됩니다. 기본값: 대기 중. OpenCart에는 보류 상태가 없기 때문입니다. System > Localisation > Order Statuses에서 직접 상태를 만든 다음 여기에서 선택할 수 있습니다.

Refunded Status: 주문 페이지에서 결제 전액을 환불한 후 설정됩니다. 기본값: 환불됨.

고급

API Version: 사용할 Cashfree API 버전입니다.

v1 (2022-09-01): 기본값.
v2 (2023-08-01): 더 최신 API 버전입니다.

Order ID prefix: Cashfree 주문 ID는 접두사 + OpenCart 주문 ID로 만들어집니다. 같은 주문에 대한 새 시도에는 끝에 번호가 붙습니다(예: 123-2). 비워 두면 필드 설명에 표시된 이 쇼핑몰의 자동 접두사를 사용합니다(OC, 쇼핑몰 주소에서 파생된 네 글자와 하이픈). 같은 Cashfree 계정에 연결된 쇼핑몰마다 서로 다른 접두사를 사용하세요. 영문자, 숫자, “_”, “-”만 사용할 수 있으며 최대 20자입니다. 그 밖의 문자는 저장할 때 경고와 함께 제거됩니다.

Debug log: 오류는 항상 기록됩니다. 켜면 Cashfree API 호출과 웹훅도 OpenCart 로그 폴더(storage/logs)의 cashfree_p_debug.log.php에 기록됩니다. 이 파일은 웹에서 열 수 없으며, 5 MB에 도달하면 교체됩니다. 키와 고객 데이터는 절대 기록되지 않습니다. 기본값: 끔.

Log: 로그의 크기와 최신 항목을 보여 줍니다. Clear log를 클릭하면 로그를 비울 수 있습니다.

Delete Data on Uninstall: 켜 두면 확장 기능을 제거할 때 Cashfree 설정과 확장 기능 로그가 삭제됩니다. 주문과 그 Cashfree 거래 및 환불은 항상 보관됩니다. 기본값: 끔.

가져오기 / 내보내기

Export: Download JSON은 설정을 JSON 파일로 저장합니다. Secret Key는 내보내지 않습니다.

Import: 이전에 내보낸 JSON을 붙여 넣고 Import를 클릭하면 설정이 복원됩니다. 저장된 Secret Key는 유지됩니다.

체크아웃

Payment Method 단계에서 고객은 결제 수단을 선택합니다(기본값은 Cashfree Payments). Confirm Order 단계에서 고객은 설명과 함께 카드, UPI, 인터넷 뱅킹, 간편결제로 안전하게 결제하기 위해 Cashfree 결제 페이지로 이동합니다. 안내를 봅니다. OpenCart는 이 단계에서 주문을 만들며, 여전히 상태는 없습니다. 고객이 Confirm Order를 클릭하면, 확장 기능은 주문 통화로 주문 금액에 대한 Cashfree 주문을 만들고, Cashfree payment 페이지를 열어 결제를 위해 Cashfree로 이동하는 중...이라고 표시하고 Cashfree 결제 페이지를 불러옵니다. 페이지가 자동으로 열리지 않으면 고객은 Pay Now를 클릭할 수 있습니다. Cashfree 결제 페이지에서 고객은 Cashfree 계정에서 활성화된 모든 수단(예: 카드, UPI, 인터넷 뱅킹, 간편결제)으로 결제할 수 있습니다. 고객의 이메일과 전화번호는 Cashfree에 전달됩니다. OpenCart 4에서는 고객이 결제 수단 블록의 Choose 버튼을 눌러 Payment method options 창에서 결제 수단을 선택한 다음, 체크아웃 페이지 하단의 Confirm Order를 클릭합니다. OpenCart 4는 기본적으로 전화번호를 묻지 않습니다. 주문에 전화번호가 없으면 확인 블록에 선택 사항인 Phone 필드가 표시됩니다(선택 사항: Cashfree(UPI, OTP)용 결제자의 전화번호입니다.). 형식이 올바르지 않으면 올바른 전화번호(10자리 숫자, 또는 +와 국가 코드)를 입력하거나 필드를 비워 두세요.라고 표시됩니다. 번호는 다음 시도를 위해 기억됩니다.

결제를 마친 고객은 쇼핑몰로 돌아옵니다. 주문은 Cashfree가 서명된 웹훅을 통해서, 또는 고객이 돌아올 때 서버에서 Cashfree에 보낸 요청을 통해 결제를 확인한 후에만 결제 완료로 표시됩니다. 그 후 주문은 일반적인 OpenCart 방식으로 상태를 받고, 일반 주문 이메일과 재고 업데이트가 이루어지며, 고객은 OpenCart 주문 성공 페이지를 봅니다. UPI 앱에서 돌아오는 경우처럼 다른 브라우저에서도 복귀가 작동합니다. 은행이 아직 결제를 확인하지 않았다면, Payment confirmation 페이지에 Your payment is being processed by the bank. We will update the order as soon as Cashfree confirms it — please do not pay again.가 표시되고 Check again 버튼이 나타납니다. 은행이 결제를 확인하는 즉시 웹훅이 주문 상태를 설정합니다. OpenCart 4에서는 고객이 Cashfree에서 돌아올 때 브라우저가 쇼핑몰 세션을 보내지 않으므로, 확장 기능이 먼저 짧은 페이지를 표시하고 쇼핑몰에서 같은 복귀 주소를 다시 엽니다. 고객은 장바구니와 로그인 상태를 유지합니다.

결제가 실패하거나 고객이 결제하지 않고 Cashfree 페이지를 떠나면, 고객은 Cashfree 결제가 완료되지 않았습니다. 다시 시도하거나 다른 결제 수단을 선택해 주세요.라는 메시지와 함께 체크아웃으로 돌아갑니다. OpenCart 4에서는 체크아웃 메시지가 체크아웃 페이지 상단에 표시됩니다. 주문은 상태 없이 남고 장바구니는 유지됩니다. OpenCart 3에서는 Confirm Order 단계가 표시될 때마다 새 주문을 만들고, OpenCart 4에서는 체크아웃의 주문 하나를 유지하면서 업데이트하므로 고객이 같은 주문을 다시 결제합니다. 같은 주문의 열린 Cashfree 결제는 금액이 바뀌지 않았고 5분 넘게 남아 있으면 재사용됩니다. 그렇지 않으면 이전 Cashfree 주문은 닫히고 새 주문이 만들어집니다. 같은 장바구니의 이전 주문들에 대해 열려 있는 Cashfree 결제도 닫히므로, 장바구니를 두 번 결제할 수 없습니다. 장바구니가 Cashfree에서 이미 결제되었지만 기록되지 않았다면, 다음 시도는 다시 청구하는 대신 그 결제를 확인합니다. 다른 주문으로 이미 결제된 장바구니는 다시 청구되지 않으며, 고객은 성공 페이지로 이동합니다. 같은 장바구니가 그래도 두 번 결제된다면(예: 두 브라우저 탭에서 동시에), 두 번째 주문은 상태 없이 남고 결제된 주문에는 고객이 두 번 청구되었을 수 있다는 메모가 추가되어 Cashfree 대시보드에서 환불할 수 있습니다.

OpenCart 4에서는 성공 페이지가 표시될 때까지 주문이 체크아웃에 유지됩니다. 그 사이 주문이 닫혔고(예: 취소됨) Cashfree가 그 주문에 대한 금액을 보유하고 있지 않다면, 고객은 Cashfree 결제가 완료되지 않았습니다. 다시 시도하거나 다른 결제 수단을 선택해 주세요.라는 메시지와 함께 체크아웃으로 돌아가며, 다음 Confirm Order에서는 장바구니의 새 주문이 결제됩니다. 주문에 이미 상태가 있고 그 이후 장바구니가 변경되었다면(다른 상품 또는 수량), 고객은 이전 주문이 이미 접수되었습니다. 주문을 다시 확인해 주세요. 현재 장바구니는 새 주문으로 결제됩니다.라는 메시지와 함께 체크아웃으로 돌아갑니다.

Cashfree가 결제를 시작할 수 없으면, 고객은 Confirm Order 단계에 머물며 버튼 위에 Cashfree 결제를 시작할 수 없습니다. 다시 시도하거나 다른 결제 수단을 선택해 주세요.가 표시됩니다. 기술적인 이유는 로그에 기록됩니다. Cashfree 최소 금액(통화의 1단위, KWD처럼 소수점 셋째 자리까지 있는 통화는 0.01, TND는 0.1)보다 적은 주문 합계는 Cashfree로 결제할 수 없으며, 해당 주문에는 결제 수단이 표시되지 않습니다.

쇼핑몰이 점검 모드인 동안에도 웹훅은 작동합니다. OpenCart 3에서는 결제 확장 기능의 요청이 통과되고, OpenCart 4에서는 확장 기능이 웹훅과 고객의 복귀를 통과시키는 시작 액션을 추가합니다.

이 확장 기능은 Cashfree 체크아웃에서의 일회성 결제만 받습니다. 저장된 카드, 구독, 정기 결제는 없으며, 별도의 승인 및 캡처, Cashfree 혜택 위젯, Cashfree를 통한 착불 결제나 결제 링크도 없습니다. 통화 변환도 하지 않으므로, 주문은 주문 통화로 청구됩니다.

주문 및 환불

주문 상태

상태 없음(누락된 주문): 고객이 Cashfree로 이동했지만 결제하지 않았거나, 결제가 실패했거나, 결제가 아직 은행에서 처리 중입니다. Sales > Orders에서 이러한 주문은 Order Status 필터를 Missing Orders로 설정했을 때만 표시됩니다.

Order Status After Payment(기본값 처리 중): 결제가 확인되었습니다. 메모에는 Cashfree 거래 ID와 결제 수단 그룹(예: upi 또는 credit_card)이 표시됩니다.

On Hold (Review) Status(기본값 대기 중): Cashfree가 주문 합계와 다른 결제 금액 또는 통화를 보고했습니다. 메모에는 예상 금액과 실제 받은 금액, 그리고 거래 ID가 표시됩니다. Cashfree 대시보드에서 결제를 확인한 다음, 주문을 처리하거나 결제를 환불하세요.

Refunded Status(기본값 환불됨): 확장 기능을 통해 결제 전액이 환불되었습니다.

직접 상태(예: 취소됨)를 지정한 대기 중 주문에 결제가 들어오더라도, 돈이 이미 청구되었으므로 그 결제는 기록되고 주문은 결제 완료가 됩니다. OpenCart는 이 변경을 고객에게 알립니다. 결제 완료된 주문은 나중의 실패한 결제로 되돌아가지 않으며, 이미 결제 완료된 주문에 대한 두 번째 결제도 주문을 바꾸지 않습니다.

메모는 고객이 보지 않는 주문의 History 항목입니다.

VibeFox Cashfree Payments 탭

Sales > Orders에서 Cashfree로 결제된 주문을 여세요. 주문 페이지 하단, History와 Additional 옆에 있는 VibeFox Cashfree Payments 탭에는 샌드박스 결제의 경우 Sandbox 라벨이 붙은 Transaction ID, Cashfree order, 결제 Status, Paid / refunded 금액, 환불 양식, 각 환불의 상태가 포함된 환불 내역, 주문의 Cashfree notes가 표시됩니다. 이 탭은 확장 기능에 접근 권한이 있는 사용자에게 표시됩니다.

환불

탭에서 Amount를 입력하세요(아직 환불되지 않은 금액이 자동으로 채워집니다). 필요하면 Reason (optional)도 입력하고, Refund via Cashfree를 클릭하세요. Refund this amount through Cashfree? This cannot be undone. 확인 메시지에 응답하세요. 전액 환불과 부분 환불을 지원합니다. 확장 기능을 수정할 권한이 있어야 합니다(System > Users > User Groups에서 설정). 환불은 Cashfree가 청구한 금액과 통화로 이루어지므로, 금액이 맞지 않는 경우에는 주문 합계가 아니라 고객이 실제로 결제한 금액까지 환불할 수 있습니다. 환불은 결제된 Cashfree 주문에 대해, 결제가 이루어진 환경(샌드박스 또는 운영)으로 전송되므로 그 환경의 키가 입력되어 있어야 합니다. Cashfree가 환불을 받아들이지 않거나, 취소 또는 거부된 것으로 보고하면, 탭에 오류가 표시되고 환불은 기록되지 않습니다. 시작된 환불은 환불 ID, 금액, 상태와 함께 환불 내역과 메모에 추가됩니다. 전액 환불은 고객에게 알리지 않고, 제품을 재고로 되돌리지 않은 채, 수동 상태 변경과 마찬가지로 주문을 Refunded Status로 설정합니다. 부분 환불은 상태를 바꾸지 않습니다. 환불은 Cashfree가 결제를 확인한 후에 사용할 수 있습니다.

최종 환불 상태는 환불 웹훅으로 도착하며 메모에 추가됩니다. Sales > Returns의 제품 반품은 Cashfree를 통해 돈을 돌려주지 않습니다.

라이선스 키

이 확장 기능은 vibefox.net에서 받은 VibeFox 라이선스 키와 함께 작동합니다. License — VibeFox Cashfree Payments 라이선스 블록은 Extensions > Extensions > Payments > VibeFox Cashfree Payments > Edit의 첫 번째 블록이며, 설정 위에 있습니다. License key에 키를 붙여 넣고 Activate를 클릭하세요. 그러면 블록에 마스킹된 키, 상태(예: 라이선스가 유효한 날짜와 도메인), 그리고 상태를 다시 확인하는 Check now, 다른 키를 입력하는 Change key, 이 쇼핑몰에서 키를 제거하는 Remove key 버튼이 표시됩니다. 그 아래에는 Product: opencart-payment-cashfree 줄과, 여러분의 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 계정에서 자리를 비우세요.

활성 키가 없으면 체크아웃에서 고객에게 Cashfree가 표시되지 않습니다. 그래도 결제가 시작되면 고객에게 이 결제 수단은 사용할 수 없습니다. 다른 결제 수단을 선택하세요.라고 표시됩니다. 같은 브라우저에서 관리자 화면에 로그인한 관리자 사용자는 여전히 쇼핑몰에서 결제 수단을 보며, (라이선스 없음 — 관리자에게만 표시됨)라고 표시되어 있습니다. 따라서 키를 구입하기 전에 확장 기능을 설정하고 테스트할 수 있습니다. OpenCart 4에서는 이 미리보기를 사용할 수 없습니다. 쇼핑몰은 관리자 로그인을 확인할 수 없으므로, 활성 키가 없으면 결제 수단이 모든 사용자에게 숨겨집니다. Edit 페이지를 한 번 연 후에는 관리자 Dashboard에 알림이 나타납니다. ×를 눌러 닫으면 7일 동안 숨겨집니다. 기존 주문은 영향을 받지 않습니다. 이미 시작된 결제는 계속 확인되고, 환불도 작동합니다.

라이선스가 만료되어도 확장 기능은 계속 작동하지만, 업데이트와 지원을 받으려면 갱신이 필요합니다. 관리자 Dashboard 또는 Edit 페이지를 열면 상태가 자동으로 다시 확인됩니다. 키를 입력한 후 처음 14일 동안은 하루에 한 번, 그 뒤로는 일주일에 한 번입니다. cron 작업은 필요하지 않습니다. 확장 기능을 제거하면 라이선스 키와 라이선스 상태는 항상 삭제됩니다.

문제 해결

Cashfree가 체크아웃에 나타나지 않음: 라이선스가 활성 상태인지, Enable/Disable이 켜져 있는지, 현재 모드에 키가 있는지 확인하세요. 샌드박스 모드에서는 Sandbox App ID와 Sandbox Secret Key, 실제 모드에서는 App ID와 Secret Key입니다. 키가 없으면 설정 페이지에 경고가 표시됩니다. 주문 합계가 Cashfree 최소 금액보다 낮으면 결제 수단도 숨겨집니다. 또한 결제 주소가 선택한 Geo Zone에 있고, 주문이 설정의 Total에 도달하는지 확인하세요.

결제는 완료되었지만 주문에 상태가 없음: 웹훅이 작동하지 않습니다. 쇼핑몰이 HTTPS를 사용하는지, Developers > Webhooks의 URL이 Webhook URL에 표시된 것과 정확히 같은지, 그리고 Payment 이벤트가 선택되어 있는지 확인하세요. 설정의 Secret Key가 결제가 이루어진 환경의 것인지 확인하세요. Cashfree 대시보드에는 웹훅마다 쇼핑몰의 응답이 표시됩니다. 주문은 고객이 결제 후 쇼핑몰로 돌아왔을 때, 그리고 같은 장바구니에 대한 다음 결제 시도 때에도 상태를 받습니다.

웹훅이 Missing signature 또는 Invalid signature로 응답함: 호출에 유효한 Cashfree 서명이 없었거나, 설정의 Secret Key가 결제가 이루어진 환경과 일치하지 않습니다. 샌드박스 키와 운영 키가 서로 바뀌지 않았는지 확인하세요.

웹훅이 Ignored로 응답함: 웹훅은 올바르게 서명되었지만, 이 쇼핑몰이 시작하지 않은 결제에 속합니다. 예를 들어 같은 Cashfree 계정의 다른 쇼핑몰입니다. 각 쇼핑몰에 고유한 Order ID prefix를 지정하세요.

웹훅이 Busy, retry later로 응답함: 같은 시각에 다른 요청이 주문을 확인하고 있었거나, 주문 상태를 설정할 수 없었습니다. Cashfree가 웹훅을 다시 시도합니다. 이유를 보려면 Debug log를 켜세요.

고객에게 “Cashfree 결제 페이지를 불러올 수 없습니다. 다시 시도해 주세요.”가 표시됨: 브라우저에서 Cashfree 스크립트를 불러오지 못했습니다. 예를 들어 차단 프로그램 때문일 수 있습니다. 고객은 Pay Now를 다시 클릭하거나 Choose another payment method를 선택할 수 있습니다.

고객에게 “Cashfree 결제를 시작할 수 없습니다”가 표시됨: 확장 기능 페이지의 Log 필드를 확인하세요. 일반적인 원인은 선택한 모드의 키가 잘못되었거나, Cashfree 계정에서 활성화되지 않은 통화입니다.

Confirm Order 후 고객에게 “이 결제 수단은 사용할 수 없습니다.”가 표시됨: 체크아웃 세션이 더 이상 주문과 맞지 않거나, 그사이 결제 수단이 꺼졌습니다. 고객이 체크아웃을 새로 고칩니다.

고객에게 “결제 세션을 찾을 수 없습니다. 다시 시도해 주세요.”가 표시됨: 결제 페이지 링크가 이 쇼핑몰의 결제에 속하지 않거나, Cashfree 세션이 끝났습니다. 고객은 주문을 다시 확인합니다.

고객에게 “결제를 확인할 수 없습니다”가 표시됨: 돌아오는 링크가 결제와 일치하지 않았습니다. 돈이 청구되었다면 웹훅이 여전히 주문을 확인합니다. 고객이 다시 결제하기 전에 Cashfree 대시보드에서 결제를 확인하세요.

결제 후 주문이 검토 상태임: VibeFox Cashfree Payments 탭의 메모(주문 상태 참조)를 읽은 다음, 주문을 처리하거나 결제를 환불하세요.

탭에 환불 양식이 없음: 탭에 이유가 표시됩니다. 결제가 아직 확인되지 않았거나, 전액 환불되었거나, 사용자 그룹에 확장 기능을 수정할 권한이 없거나, 결제 환경의 API 키가 설정되지 않은 경우입니다.

환불이 샌드박스 또는 실제 모드에 관한 메시지와 함께 실패함: 결제는 그 환경에서 이루어졌고, 그 환경의 API 키가 설정되지 않았습니다. 키를 입력한 후 다시 시도하세요.

제거

Extensions > Extensions로 이동하여 유형으로 Payments를 선택한 다음, VibeFox Cashfree Payments 옆의 Uninstall(빨간색 − 버튼)을 클릭하세요. 이 확장 기능의 라이선스 키와 라이선스 상태는 항상 제거됩니다. OpenCart는 확장 기능 자체의 설정을 항상 제거합니다: Enable/Disable, Sort Order, Geo Zone, Total, 그리고 Orders 섹션의 주문 상태들이며, 이들은 다시 설치하면 기본값으로 돌아갑니다. OpenCart 4에서는 확장 기능의 이벤트와 점검 모드에서 웹훅을 통과시키는 시작 액션도 함께 제거됩니다. Delete Data on Uninstall이 켜져 있으면 나머지 Cashfree 설정(제목, 설명, 모드, 키, API 버전, 주문 ID 접두사, 로깅)과 로그가 제거됩니다. 꺼져 있으면 나중에 다시 설치할 때를 위해 보관됩니다. Cashfree 거래와 환불은 항상 보관되므로, 이전에 결제된 주문은 다시 설치한 후에도 환불할 수 있습니다. 기존 주문은 결제 메모를 유지합니다.

OpenCart 4에서 확장 기능의 파일도 제거하려면, 제거 후 Extensions > Installer로 이동하여 설치된 확장 기능 목록에서 VibeFox Cashfree Payments 옆의 Uninstall(주황색 − 버튼)을 클릭한 다음, 업로드한 패키지를 삭제하려면 Delete(빨간색 휴지통 버튼)를 클릭하세요.

Cashfree는 해당 소유자의 상표입니다. 이 확장 기능은 Cashfree와 제휴하거나 Cashfree의 승인을 받은 것이 아닙니다.