VibeFox USPS for OpenCart — 도움말
요구 사항
OpenCart: 3.0.x(3.0.5.0에서 테스트됨) 또는 4.0.2 이상(4.1.0.3에서 테스트됨).
PHP: 8.0 이상, cURL 확장 포함.
USPS Developer Portal 앱(실시간 요금 전용): 무료 USPS 비즈니스 계정으로 USPS Developer Portal(developers.usps.com)에 로그인하고, 앱을 만든 다음 Consumer Key와 Consumer Secret을 복사하세요. 이 확장 기능은 OAuth 2.0을 사용하는 최신 USPS API를 사용합니다. 기존 Web Tools User ID로는 작동하지 않습니다. 키가 없으면 고정 요금만 사용됩니다.
발송 우편번호: 실시간 요금에는 소포를 발송하는 5자리 미국 우편번호가 필요합니다.
VibeFox 라이선스 키: vibefox.net에서 구매합니다. 키 하나는 도메인 하나에서만 사용할 수 있습니다.
설치
다운로드는 두 OpenCart 버전용 패키지가 들어 있는 하나의 ZIP 파일입니다. 컴퓨터에서 압축을 풀어 주세요. 내용은 README.txt, OpenCart 3용 패키지 vfd_usps-oc3-(version).ocmod.zip, OpenCart 4용 패키지 vfd_usps.ocmod.zip입니다. 사용 중인 OpenCart 버전에 맞는 패키지만 설치하세요. 라이선스 키는 두 버전에서 동일합니다.
OpenCart 3
1. 관리자 페이지에서 Extensions > Installer로 이동하여 Upload를 클릭하고 vfd_usps-oc3-(version).ocmod.zip 파일을 선택하세요. 이 확장 기능은 OCMOD 수정 사항을 추가하지 않으므로 Extensions > Modifications를 새로 고칠 필요가 없습니다. Installer 대신 이 패키지의 upload 폴더 내용을 쇼핑몰의 루트 폴더에 복사할 수도 있습니다.
2. Extensions > Extensions로 이동하여 확장 기능 유형으로 Shipping을 선택하세요. VibeFox USPS를 찾아 Install(초록색 + 버튼)을 클릭하세요.
3. Edit(연필 버튼)를 클릭하여 설정 페이지를 여세요.
4. Edit 페이지 상단의 라이선스 블록에 있는 License key에 VibeFox 라이선스 키를 붙여 넣고 Activate를 클릭하세요(License key 참조).
5. Consumer Key와 Consumer Secret, 5자리 Ship from ZIP code를 입력하고 Services를 선택하세요. 쇼핑몰의 기본 통화가 USD가 아니라면 USD exchange rate를 입력하세요.
6. 선택 사항으로 대체용 고정 요금을 입력하고, Enable USPS shipping을 켠 다음 Save를 클릭하세요.
OpenCart 4
1. 관리자 페이지에서 Extensions > Installer로 이동하여 Upload를 클릭하고 vfd_usps.ocmod.zip 파일을 선택하세요. 파일 이름을 바꾸지 마세요. OpenCart 4는 파일 이름에서 확장 기능 코드를 가져오므로, 이름을 바꾼 패키지는 작동하지 않습니다.
2. 같은 페이지의 설치된 확장 기능 목록에 패키지가 나타납니다. 그 옆의 Install(초록색 + 버튼)을 클릭하세요.
3. Extensions > Extensions로 이동하여 확장 기능 유형으로 Shipping을 선택하세요. VibeFox USPS를 찾아 Install(초록색 + 버튼)을 클릭한 다음 Edit(연필 버튼)를 클릭하세요.
4. OpenCart 3의 4~6단계와 같이 라이선스 키와 설정을 입력하세요. 설정 페이지와 그 필드는 두 버전에서 같습니다.
설치 후에는Enable USPS shipping을 켜고 저장하기 전까지 이 배송 방법이 꺼져 있습니다. 제거한 뒤 확장 기능을 다시 설치하면, 보관해 둔 USPS 설정이 다시 사용됩니다.
설정
모든 설정은 확장 기능 페이지에 있습니다: Extensions > Extensions > Shipping > VibeFox USPS > Edit. 섹션은 왼쪽에 나열됩니다. 페이지 하단의 Save 버튼 하나로 페이지를 새로 고치지 않고 전체를 저장합니다. 저장할 때마다 캐시된 USPS 토큰과 요금이 지워집니다. 이 확장 기능에 대한 수정 권한이 있는 관리자 사용자만 설정을 저장하고, 캐시를 지우고, 로그를 비울 수 있습니다.
유효하지 않은 값은 저장되지 않습니다. 페이지가 해당 필드를 표시하고 이전 값으로 되돌린 뒤 The other settings were saved.를 보여 줍니다. 이는 비어 있거나, 너무 길거나, 금지된 문자가 포함된 이름, 음수이거나 숫자가 아닌 값, 5자리가 아닌 우편번호, 잘못된 상자 크기, Max weight (kg)보다 큰 Min weight (kg)(두 한도 모두 값 유지), 정수가 아닌 정렬 순서, 알 수 없는 세금 등급 또는 지역 구역에 적용됩니다. 숫자가 아닌 국가별 요금은 지워지고 목록으로 표시됩니다. 설정 위의 경고는 두 키 중 하나만 입력된 경우, 키와 고정 요금이 모두 없는 경우(이 경우 배송 방법은 전혀 표시되지 않음), 우편번호가 없는 경우, 서비스가 선택되지 않은 경우, USD 환율이 없는 경우, 테스트 환경이 켜져 있는 경우, 또는 쇼핑몰의 무게 또는 길이 단위를 확장 기능이 알 수 없는 경우를 알려 줍니다.
일반
설정은 모든 지역 구역에 적용됩니다. USPS는 체크아웃에서 하나의 배송 옵션으로 제공됩니다.
Enable USPS shipping: 체크아웃에서 USPS 배송을 제공합니다. 기본값: 끔.
Name: 체크아웃에서 고객에게 표시되는 배송 방법 이름. 기본값: USPS. 필수, 최대 64자, < > ; = # { } 문자 사용 불가.
Tax class: 배송비의 세금 등급. USPS 요금에는 세금이 포함되지 않습니다. No tax(기본값)는 배송비에 세금이 부과되지 않음을 뜻합니다.
Sort order: 체크아웃의 배송 방법 중 USPS의 표시 순서. 정수.
USPS API(실시간 요금)
Consumer Key: USPS 개발자 앱의 Consumer Key(client_id). 이 값을 지우면 저장된 Consumer Secret도 함께 삭제됩니다.
Consumer Secret: 같은 앱의 Consumer Secret(client_secret). 저장 후 이 필드는 비어 있고 Saved — leave empty to keep it. Clearing the Consumer Key removes it too.를 표시합니다. 변경하려는 경우에만 새 값을 입력하세요.
Test environment: 발송자용 USPS Testing Environment를 사용합니다. 이 환경에 접근 권한이 있는 앱에만 해당합니다. 실제 요금을 사용하려면 끈 상태로 두세요. 기본값: 끔.
Prices: 사용할 USPS 요금표.
Services: 견적을 낼 수 있는 USPS 서비스. 선택한 서비스 중 소포에 대해 USPS가 제공하는 가장 저렴한 서비스가 표시됩니다. USPS Ground Advantage, Priority Mail / Priority Mail International, Priority Mail Express / Priority Mail Express International, First-Class Package International Service, Media Mail (books and media only), Library Mail (libraries and schools only) 중에서 선택하세요. 기본값: Ground Advantage, Priority Mail, First-Class Package International. Flat Rate, Cubic, Hold for Pickup, Sunday 요금은 사용되지 않습니다. 서비스가 하나도 선택되지 않으면 실시간 요금은 사용되지 않습니다.
USD exchange rate: USPS 요금은 USD로 표시됩니다. 쇼핑몰의 기본 통화가 USD가 아니라면 1 USD의 가격을 해당 통화로 입력하세요(예: 0.92). 0보다 커야 합니다. 이 값이 없으면 실시간 요금은 사용되지 않고 고정 요금이 적용됩니다. 쇼핑몰 통화가 USD라면 필요하지 않습니다. 환율은 자동으로 업데이트되지 않습니다.
Cache: 견적은 1시간, 실패한 견적은 10분 동안 캐시됩니다. 시간 초과, 서버 오류, 요청 제한 또는 키 거부 후에는 5분 동안 USPS를 호출하지 않습니다. 캐시를 즉시 비우려면 Clear cached USPS token and rates를 클릭하세요.
발송 및 소포(USPS 요금은 발송 우편번호, 무게, 소포 크기에 따라 달라집니다. 장바구니는 하나의 소포로 견적이 산출됩니다)
Ship from ZIP code: 소포를 발송하는 5자리 미국 우편번호. ZIP+4는 5자리로 잘립니다. OpenCart에는 쇼핑몰 우편번호가 없으므로 여기에 입력하세요.
Box size (L x W x H): 쇼핑몰의 길이 단위(필드 이름에 표시됨)로 된 선택적 상자 치수(예: 30x20x15). 비워 두면 상품 치수를 사용합니다. 가장 긴 길이, 가장 넓은 너비, 쌓아 올린 높이입니다. 치수가 없는 상품은 10 x 8 x 4인치 상자로 견적이 산출됩니다.
Default product weight (kg): 무게가 없는 상품에 사용되는 무게로, USPS 요금, 무게 한도, 무게 구간에 쓰입니다. 기본값: 0.5. 비워 두면 역시 0.5 kg을 뜻합니다.
고정 요금(쇼핑몰 기본 통화로 된 세금 제외 가격. API 키가 입력되지 않은 경우에 사용되며, USPS가 요금을 반환하지 않을 때 대체 수단으로도 사용됩니다. 두 값을 모두 비워 두면 이 경우 배송 방법을 숨깁니다)
Country prices: 배송지 국가와 장바구니 무게별 요금. Add country를 클릭하여 행을 추가하고, 삭제 버튼으로 행을 삭제합니다. 무게 구간은 XS 1 kg까지, S 1–2 kg, M 2–3 kg, L 3–5 kg, XL 5 kg 초과입니다. 비어 있거나 0인 구간은 Price를 사용합니다. * Default (any other country)는 그 밖의 모든 국가에 적용됩니다.
Fallback cost: 일치하는 국가별 요금이 없을 때 적용되는 고정 배송비. 이 경우 배송 방법을 숨기려면 비워 두세요.
Fixed price is: Per order(기본값)는 장바구니 전체 무게에 대해 요금을 한 번 부과합니다. Per item (each item priced by its own weight x quantity)는 상품마다 자체 무게에 수량을 곱해 요금을 계산합니다. USPS 실시간 요금은 항상 소포 전체에 대해 견적이 산출됩니다.
조건
Free shipping from: 이 방법이 무료가 되는 배송이 필요한 상품의 소계(쿠폰 적용 후, 세금 전). 이 경우 USPS로 요청이 전송되지 않습니다. 무료 배송을 제공하지 않으려면 비워 두세요.
Minimum subtotal: 배송이 필요한 상품의 소계(쿠폰 적용 후, 세금 전)가 이 금액 이상인 경우에만 이 방법을 표시합니다. 항상 표시하려면 비워 두세요.
Min weight (kg): 이 방법이 표시되기 위한 최소 장바구니 무게. 0은 제한 없음(기본값)을 뜻합니다.
Max weight (kg): 장바구니 무게가 이 값을 넘으면 이 방법을 숨깁니다. 기본값: 30. 비어 있으면 30 kg, 0이면 제한 없음을 뜻합니다. USPS는 최대 70 lb(31.7 kg)까지 받습니다. 그보다 무거운 소포에는 고정 요금이 적용됩니다.
Geo zone: 이 지역 구역 내 주소에 대해서만 USPS를 제공합니다. All zones(기본값)는 제한 없음을 뜻합니다. 지역 구역은 System > Localisation > Geo Zones에서 관리합니다. Ignore shipping zones와 함께 사용되지 않습니다.
배송 구역 없이 제공 여부
Ignore shipping zones: 지역 구역을 확인하지 않습니다. 아래에 나열된 국가에 대해 이 방법을 제공합니다.
Countries: 이 모드의 배송 대상 국가. 모든 국가를 허용하려면 비워 두세요. 이 필드는 Ignore shipping zones가 켜져 있을 때만 사용됩니다.
고급
Debug log: API 요청과 요금 계산을 storage/logs/vfd_usps_debug.log.php(OpenCart 4에서는 system/storage/logs/vfd_usps_debug.log.php)에 기록합니다. 이 파일은 웹에서 읽을 수 없습니다. 이 옵션이 꺼져 있어도 API 오류는 항상 기록됩니다. 키, 토큰, 우편번호, 고객 주소는 기록되지 않습니다. 파일이 5 MB에 도달하면 vfd_usps_debug.old.log.php로 옮겨지고 새 로그가 시작됩니다.
Log: 로그의 크기와 최근 항목을 표시합니다. Clear log를 클릭하면 비워집니다.
Remove data on uninstall: 켜져 있으면 확장 기능을 제거할 때 USPS 설정과 로그가 삭제됩니다. 캐시된 요금은 항상 삭제됩니다. 주문된 주문의 USPS 서비스 정보는 항상 보존됩니다. 꺼져 있으면 재설치를 위해 설정이 보존됩니다.
가져오기 / 내보내기
Export: Download JSON을 클릭하면 설정을 JSON 파일로 저장합니다. Consumer Secret은 내보내지 않습니다.
Import: 이전에 내보낸 JSON을 붙여 넣고 Import를 클릭하면 설정을 복원합니다. 예를 들어 다른 쇼핑몰에서 사용할 수 있습니다. 값은 일반 저장과 같은 방식으로 확인됩니다. 저장된 Consumer Secret은 유지됩니다.
체크아웃에서의 동작
OpenCart가 배송 방법을 표시할 때, 확장 기능에 USPS 요금을 요청합니다. Geo zone이 설정되어 있고 주소가 그 밖에 있으면 USPS는 제공되지 않습니다(Ignore shipping zones를 사용하면 대신 국가 목록이 결정합니다). Requires Shipping이 Yes로 설정된 상품만 계산에 포함됩니다. 다른 상품은 무게를 더하지 않고 소계에도 포함되지 않습니다. 상품권, 적립 포인트, 쇼핑몰 적립금은 고려되지 않습니다. 그런 다음 확장 기능은 조건을 확인합니다. 장바구니 무게와 최소 소계입니다. 무료 배송이 적용되면 요금은 0이 되고 USPS로 요청이 전송되지 않습니다.
확장 기능은 USPS에서 OAuth 토큰을 받고, 만료되기 직전까지 보관합니다. 미국 및 미국 영토(푸에르토리코, 미국령 버진아일랜드, 괌, 미국령 사모아, 북마리아나 제도, 미크로네시아, 마셜 제도, 팔라우)로의 배송에는 국내 요금을 요청하며 고객의 5자리 우편번호가 필요합니다. 우편번호가 없으면 요청하지 않습니다. 그 밖의 국가에는 국제 요금을 요청합니다.
요청에는 발송 우편번호, 장바구니 무게, 소포 크기, 요금 유형이 포함됩니다. 70 lb를 넘는 소포에는 고정 요금이 적용됩니다. 고객에게는 선택한 서비스 중 가장 저렴한 서비스 하나의 옵션이 표시됩니다. USD 요금은 쇼핑몰 기본 통화로 환산되고, 그 통화의 소수점 자리에 맞춰 반올림되며, 선택한 Tax class의 세금을 포함하여 고객의 통화로 표시됩니다.
각 견적은 1시간 동안 캐시됩니다. 실패한 견적은 10분 동안 기억됩니다. 시간 초과, 서버 오류, 요청 제한 또는 키 거부 후에는 5분 동안 USPS를 호출하지 않습니다. HTTP 시간 초과는 10초입니다.
USPS가 요금을 반환하지 않으면, 요금은 Country prices에서, 그다음 Fallback cost에서 가져옵니다. 둘 다 해당하지 않으면 배송 방법은 숨겨집니다. 고객은 USPS 오류 메시지를 전혀 보지 않습니다. 그 이유는 디버그 로그에 기록됩니다.
확장 기능은 요금만 계산합니다. 우표나 배송 라벨을 구매하지 않으며, 집하를 예약하지 않고, 소포를 추적하지 않으며, 고객이 우체국이나 수령 장소를 선택하도록 하지 않습니다. 여러 USPS 서비스가 아니라 하나의 옵션만 표시합니다. 상자 포장 기능은 없습니다. 장바구니는 하나의 소포로 견적이 산출됩니다. 보험 및 기타 추가 서비스는 포함되지 않습니다.
OpenCart 4에서는 고객이 체크아웃 페이지의 배송 방법 블록에서 Choose를 클릭하고 Shipping method options 창에서 USPS를 선택합니다. 이 방법은 OpenCart 3과 같은 방식으로 작동합니다.
주문
USPS로 주문이 이루어지면, 확장 기능은 배송비를 어떻게 결정했는지 저장합니다. Sales > Orders의 주문 페이지에는 USPS 패널이 표시되며, 여기에는 USPS service(실시간 요금의 경우 예: USPS Ground Advantage), Price source(USPS live rate, Fixed price 또는 Free shipping), Calculated price (excl. tax)가 포함됩니다. 이 값들은 주문할 때 저장됩니다.
OpenCart 4는 체크아웃을 위해 주문을 하나만 유지하며, 고객이 다시 확인할 때마다 그 주문을 업데이트합니다. 저장된 값도 함께 업데이트됩니다. 고객이 다른 배송 방법으로 바꾸면 이 값은 주문에서 제거됩니다. OpenCart 4에서는 USPS 패널이 History 섹션 위에 표시됩니다.
라이선스 키
이 확장 기능은 vibefox.net에서 받은 VibeFox 라이선스 키로 작동합니다. 라이선스 블록 License — VibeFox USPS는 Extensions > Extensions > Shipping > VibeFox USPS > Edit 페이지의 첫 번째 블록이며 설정 위에 있습니다. License key에 키를 붙여 넣고 Activate를 클릭하세요. 그러면 블록에 키가 마스크된 상태로 표시되고, 상태(예: 라이선스가 활성인 날짜와 도메인)와 다음 버튼이 표시됩니다. Check now는 상태를 다시 확인하고, Change key는 다른 키를 입력하고, Remove key는 이 쇼핑몰에서 키를 제거합니다. 그 아래에는 Product: opencart-shipping-usps 줄과 Manage licenses and domains in your account 링크가 있으며, 이 링크는 vibefox.net 계정을 엽니다. 이 확장 기능에 대한 Modify 권한이 있는 관리자 사용자만 키를 변경할 수 있습니다. 블록의 텍스트는 관리자 언어를 따릅니다(영어와 러시아어 포함).
키가 승인되지 않으면 블록에 이유가 표시됩니다. 예를 들어 Key not found, This key belongs to another product, Domain limit reached 또는 날짜와 함께 표시되는 License expired on입니다. 쇼핑몰 주소를 변경한 후, 또는 계정에서 도메인 슬롯을 해제한 후에는 Check now를 클릭하세요. 라이선스 서버에 연결할 수 없으면 확장 기능은 마지막으로 확인된 상태로 계속 작동합니다.
키 하나는 도메인 하나에서만 작동합니다. OpenCart 설정의 쇼핑몰 주소입니다. 쇼핑몰에서 키를 제거해도 도메인 슬롯은 해제되지 않습니다. vibefox.net 계정에서 슬롯을 해제하세요.
활성 키가 없으면 체크아웃에서 고객에게 USPS가 표시되지 않으며 요금도 계산되지 않습니다. 같은 브라우저에서 관리자에 로그인한 관리자 사용자는 쇼핑몰에서 이 방법을 여전히 볼 수 있으며, (unlicensed — visible to admins only) 표시가 붙습니다. 따라서 키를 구매하기 전에 확장 기능을 설정하고 테스트할 수 있습니다. OpenCart 4에서는 이 미리 보기를 사용할 수 없습니다. 쇼핑몰이 관리자 로그인을 인식하지 못하므로, 활성 키가 없으면 모든 사용자에게 이 방법이 숨겨집니다. Edit 페이지를 한 번 연 후에는 관리자 Dashboard에 알림이 나타납니다. ×를 눌러 닫으면 7일 동안 숨겨집니다. 기존 주문은 영향을 받지 않습니다.
라이선스가 만료되어도 확장 기능은 계속 작동하지만, 업데이트와 지원을 받으려면 갱신이 필요합니다. 상태는 관리자 Dashboard 또는 Edit 페이지를 열 때 자동으로 다시 확인됩니다. 키를 입력한 후 처음 14일 동안은 하루에 한 번, 그 후에는 일주일에 한 번입니다. cron 작업은 필요하지 않습니다. 확장 기능을 제거하면 라이선스 키와 라이선스 상태가 항상 삭제됩니다.
문제 해결
체크아웃에 USPS가 나타나지 않음: 라이선스가 활성 상태이고 Enable USPS shipping이 켜져 있는지 확인하세요. Geo zone을 확인하거나 Ignore shipping zones를 켜고 Countries를 확인하세요. 무게 한도와 Minimum subtotal을 확인하세요. 작동하는 USPS 키가 없으면 이 방법에는 고정 요금(Country prices 또는 Fallback cost)이 필요합니다. 상품의 Requires Shipping이 Yes로 설정되어 있는지 확인하세요.
실시간 요금이 나타나지 않음: Edit 페이지 상단의 경고를 확인하세요. 두 키, 우편번호, 최소 하나의 서비스, 그리고 USD를 사용하지 않는 쇼핑몰의 경우 환율입니다. 미국 고객은 우편번호를 입력해야 합니다. Debug log를 켜고, 체크아웃을 새로 고친 다음 확장 기능 페이지의 Log 필드를 확인하세요.
요금이 실제 가격이 아님: Test environment를 끄세요.
페이지에 무게 또는 길이 단위에 대한 경고가 표시됨: 단위가 kg인 무게 등급이 없으면 알 수 없는 무게 단위는 kg으로 읽힙니다. System > Localisation > Weight Classes에서 kg 무게 등급을 추가하세요. 쇼핑몰의 알 수 없는 길이 단위는 cm로 처리됩니다. 쇼핑몰의 길이 등급으로 cm, mm, m 또는 in을 사용하세요(System > Settings, Option 탭).
변경 후 요금이 오래된 것처럼 보임: 확장 기능 페이지에서 Save를 클릭하거나 Clear cached USPS token and rates를 클릭하세요.
페이지에 "Warning: You do not have permission to modify VibeFox USPS!"가 표시됨: 관리자 사용자 그룹은 설정을 보기만 할 수 있을 수 있습니다. System > Users > User Groups에서 그룹에 extension/shipping/vfd_usps(OpenCart 3) 또는 extension/vfd_usps/shipping/vfd_usps(OpenCart 4)에 대한 수정 권한을 부여하세요.
개발자용: USPS API 주소는 vfd_usps_api_url 설정(테스트용)으로 바꿀 수 있습니다. 설정 페이지에는 이에 대한 필드가 없습니다.
제거
Extensions > Extensions로 이동하여 유형 Shipping을 선택하고, VibeFox USPS 옆의 Uninstall(빨간색 − 버튼)을 클릭하세요. 이 확장 기능의 라이선스 키와 라이선스 상태는 항상 삭제됩니다. OpenCart는 항상 Enable USPS shipping, Sort order, Tax class, Geo zone을 초기화합니다. 캐시된 USPS 토큰과 요금은 항상 삭제됩니다. Remove data on uninstall이 켜져 있으면 USPS 설정과 디버그 로그도 삭제됩니다. 꺼져 있으면 다른 설정은 보존되며, 확장 기능을 다시 설치할 때 다시 사용됩니다. 주문된 주문의 USPS 데이터는 절대 삭제되지 않으며, 기존 주문은 배송 방법과 비용을 그대로 유지합니다.
OpenCart 4에서 확장 기능의 파일까지 제거하려면, 제거한 후 Extensions > Installer로 이동하여 설치된 확장 기능 목록에서 VibeFox USPS 옆의 Uninstall(주황색 − 버튼)을 클릭한 다음, 업로드된 패키지를 제거하기 위해 Delete(빨간색 휴지통 버튼)를 클릭하세요.
USPS는 각 소유자의 상표입니다. 이 확장 기능은 USPS와 제휴하거나 USPS의 승인을 받은 것이 아닙니다.
