테스트 및 검증 (Testing & QA)
테스트넷 환경에서 결제 시스템을 테스트하고 사전에 검증하는 방법을 안내합니다.
테스트넷 환경 가이드
SoloPay는 개발 및 검증을 위해 다양한 테스트넷을 지원합니다. 가장 널리 사용되는 Polygon Amoy 테스트넷을 기준으로 설명합니다.
1. 테스트 네트워크 설정 (MetaMask)
- 네트워크 이름: Polygon Amoy Testnet
- RPC URL:
https://rpc-amoy.polygon.technology - 체인 ID:
80002 - 통화 기호:
MATIC - 블록 탐색기:
https://amoy.polygonscan.com/
2. 가스비(Faucet) 및 테스트 토큰 획득
트랜잭션 가스비로 사용할 테스트 MATIC과 실제 결제에 사용할 테스트 ERC-20 토큰 확보가 필요합니다.
- 테스트 가스비(MATIC) Faucet: Polygon Faucet 에서 지갑 주소를 입력하여 MATIC을 받습니다.
- 테스트 토큰(ERC-20): 가맹점 설정 시 운영팀으로부터 발급받은 테스트 토큰의 Faucet URL에서 토큰을 수령하거나 담당자에게 요청하세요.
테스트 시나리오 체크리스트
안정적인 서비스 런칭을 위해 아래 3가지 주요 케이스를 모두 테스트하는 것을 권장합니다.
케이스 A: 완벽한 가스리스 (Permit 지원 토큰)
USDC 등 EIP-2612 Permit을 지원하는 토큰을 사용할 경우의 시나리오입니다.
- 지갑에 가스비(MATIC)가 0인 상태의 테스트 계정을 준비합니다.
- 테스트 토큰만 해당 지갑으로 전송해 둡니다.
- SoloPay를 통해 10단위 이상의 결제 세션을 생성하고 서명을 요청합니다.
- 결과 확인:
- 지갑에서 가스비 전송 없이 단순 서명(Sign) 팝업만 발생해야 합니다.
- 서명 완료 시 릴레이어를 통해 결제가 정상 처리되어 상태가
PAID가 되어야 합니다. - MATIC 잔고 변동 없이 보유 테스트 토큰 잔고만 올바르게 차감되었음을 확인해야 합니다.
케이스 B: 무한 승인 기능 (Permit 미지원 일반 토큰)
Permit을 지원하지 않는 일반 테스트 토큰의 경우입니다. 이 경우 최초 1회의 Approve 트랜잭션이 발생하므로 지갑에 가스비용 MATIC이 필요합니다.
- 지갑에 가스용 테스트 MATIC과 결제용 테스트 토큰을 모두 준비합니다.
- 결제를 시도하면 최초 결제 시
approve트랜잭션 팝업이 발생합니다. - 이때 '최대 한도(Max)' 혹은 결제 금액보다 훨씬 큰 금액을 허용하여 Approve를 완료합니다.
- 승인 트랜잭션이 블록에 포함되면, 뒤이어 나오는
ForwardRequest서명 팝업을 승인하여 결제를 완료합니다. - 결과 확인:
- 첫 결제에는 Approve에 대한 가스비가 소모됩니다.
- 같은 사용자가 동일 결제수단으로 두 번째 결제를 시도할 때는 Approve 팝업이 생략되고 가스비 없이 서명만으로 진행됨을 확인합니다. (두 번째부터 완벽 가스리스 진입)
케이스 C: 실패 처리 (결제 만료 및 잔고 부족 등)
실패 상황에서도 시스템이 예외 처리 없이 적절히 동작하는지 검증합니다.
- 잔고 부족 검증: 지갑의 테스트 토큰 잔고보다 월등히 큰 금액의 결제를 시도합니다. (Relay 단계에서 거절되거나 스마트 컨트랙트에서 Revert 발생 확인)
- 결제 만료 검증: 결제 세션을 생성해 두고 팝업에서 5분 동안 대기하거나 창을 끕니다. 가맹점 백엔드가 상태를 조회했을 때 상태값이
EXPIRED로 정상 변환되는지 확인합니다. - 사용자 거절 검증: 지갑에서 서명을 요구할 때 사용자가 '거절(Reject)'을 누른 경우 클라이언트가 이를 감지하여 "서명이 취소되었습니다." 메시지를 노출하는지 확인합니다.
결제 결과 교차 검증 점검
클라이언트에서 successUrl 등으로 접속자가 리턴해 돌아왔을 때, 가맹점 서버가 백엔드 관점에서 올바른 검증을 수행하는지 점검하세요.
- URL의
paymentId파라미터를 그대로 맹신하여 결제 완료 처리로 넘기지 않는지 점검합니다. (반드시 서버間 통신으로 상태 검증) - 악의적인 사용자가 다른 가맹점의 완료된
paymentId나 금액이 다른 결제 ID를 변조 전송할 때, 백엔드의amount체크 등으로 인해 실패 처리됨을 확인합니다.