자동충전 설정
은행의 입금 알림을 Quartz Vend에 전달해 주문 결제를 자동으로 확인합니다. Android는 은행 앱 알림, iOS는 카카오뱅크 SMS를 사용합니다.
지원 환경
| 구분 | Android | iOS |
|---|---|---|
| 입력 | 은행 앱 입금 알림 | 카카오뱅크 입금 SMS |
| 은행 | 카카오뱅크·토스뱅크·케이뱅크·KB스타기업뱅킹 | 카카오뱅크 |
| 연결 | 공식 앱과 8자리 연결 코드 | 단축어와 전용 API 키 |
| 승인 | 등록 계좌와 유효한 주문의 입금 조건 대조 | 등록 계좌와 유효한 주문의 입금 조건 대조 |
Starter 이상에서 1계좌를 사용할 수 있습니다. 여러 계좌 등록과 계좌별 일·월 한도는 Pro 이상에서 제공합니다. 1908로 시작하는 토스뱅크 가상계좌는 등록할 수 없습니다.
Android 설정
Quartz Vend 자동충전 앱
버전 0.2.0 · 빌드 8
- 1.
앱 설치 및 권한 설정
공식 APK를 설치하고 알림 접근·백그라운드 실행을 허용합니다. 은행 앱의 입금 알림도 활성화합니다. Expo Go와 브라우저에서는 알림을 수신할 수 없습니다.
- 2.
연결 코드 발급
앱에서 스토어 연결 코드를 발급합니다. 코드는 10분 동안만 유효하며, 기기 보안키는 Android Keystore에 저장됩니다.
- 3.
스토어와 계좌 연결
스토어 대시보드의 입금 설정에서 Android 연결을 선택하고 8자리 코드를 입력합니다. 지원 은행, 계좌번호, 예금주를 등록한 뒤 앱의 연결 상태를 확인합니다.
- 4.
입금 확인
주문에 표시된 금액과 입금자명으로 입금합니다. 은행 알림 수신, 앱의 전송 결과, 주문의 결제 상태를 차례로 확인합니다. 서버 접수 완료만으로 주문의 결제 완료를 의미하지는 않습니다.
APK 설치 시 보안 안내
0.2.0은 이전 자동충전 앱과 별도로 설치됩니다. 설치 후 스토어 연결 코드를 새로 발급해 다시 연결하세요.
기기 한 대에 여러 스토어를 연결할 때는 스토어마다 새 연결 코드와 계좌 설정을 사용합니다. 다른 스토어의 연결 상태만으로 신규 스토어의 설정이 완료되지는 않습니다.
은행 알림에 계좌 끝자리가 없으면 연결 계좌가 하나뿐이어도 자동 승인하지 않습니다. 계좌를 특정할 수 없는 입금은 판매자가 확인해야 합니다.
iOS 설정
notificationId는 어디서 받나요?
20261101153045123-738192465는 날짜·시각과 임의의 숫자를 합친 값입니다. API 키, 주문번호, 계좌번호와는 다른 값입니다.동작 이름은 iOS 버전에 따라 조금 다를 수 있어 영문 이름도 함께 적었습니다. 아래 순서대로 동작을 추가하세요. 대괄호로 표시한 항목은 직접 타이핑하는 문구가 아니라 선택해야 하는 변수입니다.
1. 카카오뱅크 입금 SMS 수신 확인
먼저 iPhone의 메시지 앱에 은행에서 보낸 입금 SMS가 실제로 오는지 확인합니다. 앱 알림만 오면 은행의 SMS 알림 설정을 먼저 확인해야 합니다. 메시지에는 아래처럼 계좌 끝 4자리, 시각, 금액, 입금자명이 있어야 합니다.
지원하는 SMS 형식 예시 · 테스트에는 방금 받은 실제 SMS 사용[Web발신] [카카오뱅크] 홍*동(0645) 11/01 15:30 입금 5,000원 김민준이 예시를 결제 확인용으로 직접 보내거나 날짜·금액을 임의로 바꾸지 마세요. 기존 대화에서 실제 은행 발신 번호를 확인해 두세요. 대표번호는 1599-3333이지만 자동화에는 실제로 SMS를 보낸 번호를 사용합니다.
2. 대시보드에서 iOS 키 생성
스토어 대시보드의 입금 설정을 열고 자동충전을 사용할 계좌를 카카오뱅크로 저장합니다. 자동충전 연결에서 iOS를 선택한 뒤 키를 생성하고, 표시된 키 원문을 안전하게 보관합니다. 서비스 관리자용 키도 같은 방식으로 사용하며 형식은 다를 수 있습니다.
Android 연결 코드나 기기 페어링은 사용하지 않습니다. 접두사나 일부 글자만 복사하지 말고 키 전체를 사용하세요. 재생성하면 이전 키는 더 이상 사용할 수 없습니다.
3. 은행 메시지를 받으면 실행되는 자동화 생성
단축어 앱에서 자동화 → + → 메시지를 선택합니다. 버전에 따라 새 자동화 또는 개인용 자동화 생성으로 표시될 수 있습니다.
항목 선택할 값 발신자 1단계에서 확인한 실제 은행 발신 번호. 필요하면 해당 번호를 연락처에 저장한 뒤 선택 메시지에 포함 입금 실행 방식 즉시 실행. 이전 iOS의 ‘실행 전에 묻기’ 항목이 있다면 끄기 다음 화면 새로운 빈 자동화 또는 빈 자동화 선택 발신자를 모든 사람으로 두지 마세요. 은행이 아닌 사람이 보낸 문자가 전달되지 않도록 발신자와 ‘입금’ 포함 조건을 함께 설정합니다.
4. 받은 SMS 본문을 message 변수에 저장
입력에서 텍스트 가져오기(Get Text from Input)를 추가하고 입력 칸을 눌러 단축어 입력을 선택합니다. 입력이 메시지 개체로 표시되면 변수의 속성에서 내용(Content) 또는 본문을 선택합니다. 발신자(Sender)를 선택하면 안 됩니다.
이어서 변수 설정(Set Variable)을 추가합니다. 변수 이름은
message, 값은 방금 가져온 텍스트로 설정합니다. 결과에는 위 SMS의 모든 줄이 들어가야 합니다.직접 입력한 문구가 아니라 자동화의 ‘단축어 입력’에서 온 본문이어야 합니다. 직접 실행할 때 입력이 비어 있는 것은 정상입니다. 실제 메시지를 받은 자동화에서 확인하세요.
5. 알림을 받은 날짜·시각 만들기
현재 날짜(Current Date)를 추가합니다. 이어서 날짜 포맷(Format Date)을 추가하고 입력으로 현재 날짜를 선택합니다.
날짜 포맷 항목 설정값 날짜 포맷 사용자 지정(Custom) 포맷 문자열 yyyyMMddHHmmssSSS결과 예시 20261101153045123대소문자를 그대로 입력합니다.
MM은 월,mm은 분입니다. 이 값은 은행 거래 시각을 고치는 값이 아니라 알림 식별자를 만드는 재료입니다.6. 9자리 임의 숫자 만들기
임의의 숫자(Random Number)를 추가합니다. 최솟값은
100000000, 최댓값은999999999로 설정합니다. 예를 들어738192465가 나옵니다. 이 예시 숫자를 고정해서 쓰지 마세요.7. 날짜와 숫자를 텍스트로 연결
텍스트(Text)를 추가합니다. 입력 칸을 길게 누르거나 변수 선택을 눌러 5단계의 포맷된 날짜를 넣고, 키보드로 하이픈
-하나를 입력한 뒤 6단계의 임의의 숫자를 변수로 넣습니다.텍스트 동작의 구성 · 양쪽은 변수, 가운데 하이픈만 직접 입력[포맷된 날짜]-[임의의 숫자]결과는
20261101153045123-738192465와 같은 모양입니다. 대괄호나 변수 이름을 일반 글자로 적으면 작동하지 않습니다. 줄바꿈과 공백도 넣지 마세요.8. 쉼표를 제거하고 notificationId 변수에 저장
텍스트 대치(Replace Text)를 추가합니다. 입력은 7단계의 텍스트, 찾을 내용은 쉼표
,, 바꿀 내용은 빈칸으로 둡니다. 숫자가738,192,465처럼 표시되는 환경에서도 같은 형식으로 전송하기 위한 처리입니다.변수 설정(Set Variable)을 추가하고 이름을 정확히
notificationId로 지정합니다. 값은 텍스트 대치 결과를 선택합니다. 마지막Id의d는 소문자입니다.5~8단계는 SMS 한 건에 한 번만 실행합니다. URL 요청을 재시도하는 반복 안에 날짜·숫자 생성 동작을 넣으면 안 됩니다.
notificationId가 없는 이전 단축어는 접수되더라도 자동 승인하지 않고 확인 대상으로 보관합니다. 키와 SMS 본문만 보내던 단축어에도 이 변수를 추가하세요.
9. Quartz로 보낼 URL 요청 설정
URL 콘텐츠 가져오기(Get Contents of URL)를 추가하고 아래 전송 주소를 입력합니다. ‘더 보기’나 화살표를 눌러 메서드와 요청 본문을 펼칩니다.
현재 환경의 전송 주소https://payment.quartz-vend.com/api/v1/auto-payment/events항목 설정값 메서드(Method) POST 요청 본문(Request Body) JSON 헤더 Content-Type: application/json로컬 문서에서 주소가 localhost나 127.0.0.1로 보이면 그대로 iPhone에 넣지 마세요. iPhone에서 localhost는 Mac이 아닌 iPhone 자신을 뜻합니다. 개발·스테이징 테스트는 휴대폰에서도 접근 가능한 해당 환경의 HTTPS 주소가 필요합니다. 테스트를 위해 운영 주소로 바꾸지 마세요.
10. JSON 본문에 텍스트 항목 세 개 추가
JSON 본문에서 새로운 필드 추가를 세 번 누릅니다. 세 필드의 유형은 모두 텍스트로 선택하고, 이름과 값을 아래처럼 넣습니다.
필드 이름 값을 넣는 방법 apiKey2단계에서 복사한 키 원문 전체를 직접 붙여넣기 notificationId변수 선택 → 8단계에서 저장한 notificationId 선택 notificationText변수 선택 → 4단계에서 저장한 message 선택 실제 요청 모양 예시 · 키·식별자·본문은 자신의 값과 변수 사용{ "apiKey": "<대시보드에서 생성한 키 원문>", "notificationId": "20261101153045123-738192465", "notificationText": "[Web발신]\n[카카오뱅크]\n홍*동(0645)\n11/01 15:30\n입금 5,000원\n김민준" }notificationText칸에 message라는 글자를 타이핑하지 마세요. 변수 토큰을 선택해야 SMS 본문이 들어갑니다. 별도 Authorization 헤더, Android 서명, receivedAt 필드는 넣지 않아도 됩니다.11. 저장하고 실제 자동화 결과 확인
자동화를 저장합니다. 유효한 주문을 만든 뒤 주문에 표시된 금액과 입금자명으로 실제 입금하고, 은행 SMS 수신 → 단축어 실행 → Quartz 주문 상태 순서로 확인합니다. 직접 작성한 가짜 SMS로 결제를 완료시키는 테스트는 하지 마세요.
설정 중에는 URL 요청 다음에 결과 보기(Show Result)를 잠시 추가해 응답을 확인할 수 있습니다. 확인 후에는 이 동작을 제거해 알림 없이 실행되도록 합니다.
확인할 결과 의미와 다음 조치 HTTP 200 / success: true 요청이 접수됐다는 뜻입니다. 이것만으로 결제 완료는 아닙니다. 주문 화면의 결제 상태를 확인하세요. review_required / low_confidence 계좌·금액·이름·시간·중복 후보 또는 notificationId 설정을 확인하고 판매자가 입금 내역을 검토해야 합니다. 401 키 전체를 붙였는지, 폐기·재생성된 키가 아닌지 확인하세요. 400 / AUTO_PAYMENT_NOTIFICATION_ID_INVALID 날짜 17자리-임의 숫자 9자리인지, 쉼표·공백·줄바꿈·일반 글자가 들어가지 않았는지 확인하세요. 422 / KAKAOBANK_SMS_UNRECOGNIZED notificationText가 SMS 전체인지, 계좌 끝자리와 시각·금액·입금자명이 포함됐는지 확인하세요. 접속 불가 / 403 전송 주소가 휴대폰에서 열리는지, 스테이징 접근 허용 IP·HTTPS·방화벽 설정을 확인하세요. 같은 SMS를 재전송할 때는 처음 만든 notificationId와 SMS 원문을 그대로 사용합니다. 자동화를 처음부터 다시 실행하면 새 번호가 만들어집니다. 이전 번호를 잃었다면 새 번호로 반복 전송하기 전에 주문 상태부터 확인하세요.
중복 주문과 자동 승인
설정 화면 참고: Apple 메시지 자동화 조건, 사용자 지정 날짜 포맷.
문제 해결
| 증상 | 확인 사항 |
|---|---|
| 연결 코드 발급 실패 | Payment 서버 연결, 앱의 실행 환경과 서명을 확인한 뒤 새 코드를 발급합니다. |
| 알림 수신 안 됨 | 지원 은행의 공식 앱인지, 입금 알림이 켜져 있는지, 알림 접근·배터리 제한 설정이 올바른지 확인합니다. |
| 서버 접수 후 미매칭 | 주문 유효시간·등록 계좌·금액·입금자명·중복 후보를 확인합니다. 수동 승인 대기 상태로 전환된 주문은 자동 매칭 대상이 아닙니다. |
| iOS 401 응답 | 키 원문 전체와 재발급 여부를 확인합니다. |
| iOS 문자 인식 실패 | notificationText에 SMS 전체가 전달되는지, 필수 입금 정보가 포함되어 있는지 확인합니다. |