다중 계좌 라우팅
계좌를 여러 개 연결하고 주문마다 입금받을 계좌를 지정해서 같은 입금자명과 금액의 주문을 함께 운영하는 방법이에요.
주문을 만들 때 받을 계좌를 지정하면 그 계좌로 들어온 입금만 해당 주문에 매칭돼요. 계좌가 하나이거나 주문이 많지 않다면 기본값인 모든 계좌로 받기로 충분해요.
이런 경우에 계좌를 나눠 쓰세요.
- 같은 입금자명과 금액의 주문이 자주 겹쳐서 주문 생성이
409,220010으로 실패해요. - 매장, 지점, 판매 채널마다 입금 계좌를 따로 운영해요.
동작 방식
주문의 bankAccountIds가 받을 계좌 목록이에요.
- 비워 두면 (모든 계좌로 받기): 워크스페이스에 연결한 모든 계좌의 입금이 매칭 후보가 돼요.
- 계좌를 하나 이상 넣으면 (계좌 라우팅): 넣은 계좌로 들어온 입금만 매칭 후보가 돼요.
입금이 들어오면 페이싱크는 입금자명, 금액, 입금 계좌가 모두 맞는 결제 대기 주문을 찾아 결제 완료로 바꿔요. 만료되거나 취소된 주문은 찾지 않아요.
매칭 실패 알림 메일은 이메일 알림에서 매칭 실패 입금을 켠 멤버에게만 보내요.
| 받는 방식 | 설정 | 매칭 대상 입금 | 어울리는 경우 |
|---|---|---|---|
| 모든 계좌로 받기 | bankAccountIds 비움 (기본값) |
연결한 모든 계좌의 입금 | 계좌 하나, 주문이 적은 매장 |
| 계좌 라우팅 | 계좌 하나 이상 지정 | 지정한 계좌의 입금 | 계좌 여러 개, 주문이 자주 겹치는 매장 |
주문 충돌 규칙
같은 입금자명과 금액으로 결제 대기 중이고 아직 만료되지 않은 주문이 있을 때, 두 주문의 받을 계좌가 하나라도 겹치면 새 주문은 220010으로 실패해요. 응답의 data에 겹친 주문의 invoiceId와 number가 와요. 모든 계좌로 받는 주문은 모든 계좌와 겹치는 것으로 봐요. 결제됐거나, 만료됐거나, 취소된 주문은 충돌 검사에서 빠져요.
주문 수정으로 입금자명, 금액, 받을 계좌를 바꿀 때도 같은 규칙으로 검사해요.
| 기존 주문 | 새 주문 | 결과 |
|---|---|---|
| 모든 계좌로 받기 | 어떤 방식이든 | 실패 |
계좌 [A] |
모든 계좌로 받기 | 실패 |
계좌 [A] |
계좌 [A] |
실패 |
계좌 [A] |
계좌 [B] |
생성됨 |
계좌 [A, B] |
계좌 [B, C] |
실패 (B가 겹침) |
설정 방법
계좌를 더 연결해요
계좌 연결 절차대로 계좌마다 입금 알림 신청과 1원 인증을 마쳐요. 모든 계좌의 알림 수신 번호를 010-8370-0166으로 설정해야 해요. 연결할 수 있는 계좌 수는 요금제마다 달라요.
대시보드에서 주문을 만들 때 계좌를 골라요
대시보드 주문에서 주문을 만들 때 받을 계좌를 골라요. 고르지 않으면 모든 계좌로 받아요.
API로 주문을 만들 때 `bankAccountIds`를 보내요
계좌 ID(bac_...)는 그 계좌로 들어온 입금의 bankAccount.id에서 확인해요. 입금 내역 목록 조회 응답이나 transaction.created 웹훅에 담겨 있어요.
curl -X POST https://api.paysync.kr/v2/invoices \
-H "Authorization: Bearer $PAYSYNC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"bankAccountIds": ["bac_xxxxxxxxxxxxxxxxxxxxxxxx"],
"customer": { "name": "홍길동" },
"amount": 10000
}'await fetch("https://api.paysync.kr/v2/invoices", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAYSYNC_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
bankAccountIds: ["bac_xxxxxxxxxxxxxxxxxxxxxxxx"],
customer: { name: "홍길동" },
amount: 10000,
}),
});import os
import requests
requests.post(
"https://api.paysync.kr/v2/invoices",
headers={"Authorization": f"Bearer {os.environ['PAYSYNC_API_KEY']}"},
json={
"bankAccountIds": ["bac_xxxxxxxxxxxxxxxxxxxxxxxx"],
"customer": {"name": "홍길동"},
"amount": 10000,
},
)bankAccountIds를 빼거나 빈 배열로 보내면 모든 계좌로 받는 주문이 만들어져요. 없는 계좌를 넣으면 220009, 1원 인증을 마치지 않은 계좌를 넣으면 220018로 실패해요. 요청과 응답 형식은 주문 생성을 참고하세요.
웹훅으로 결과를 받아요
지정한 계좌에 입금이 들어와 매칭되면 invoice.paid 웹훅이 가요.
예시
계좌 두 개로 겹치는 주문 나누기
같은 입금자명과 금액의 주문을 받을 계좌만 다르게 만들면 둘 다 생성돼요.
같은 계좌에 같은 주문을 두 번 만들기
두 번째 주문을 만들려면 다른 계좌를 지정하거나 입금자명이나 금액을 바꿔야 해요.
자주 묻는 질문
모든 계좌로 받는 주문이 한 번만 매칭되는 게 맞나요?
맞아요. 주문 하나에는 입금 하나만 매칭돼요. 첫 매칭에서 주문이 결제 완료로 바뀌니, 같은 입금자명과 금액의 다음 입금은 이 주문에 매칭되지 않아요.
API 키의 “계좌 범위”와는 어떻게 다른가요?
주문의 bankAccountIds는 어느 계좌의 입금을 그 주문에 매칭할지 정해요. API 키의 계좌 범위는 그 키로 어떤 주문과 입금을 다룰 수 있는지 정해요. 고른 계좌만으로 만든 키로는 허용된 계좌만 bankAccountIds에 넣을 수 있고, 모든 계좌로 받는 주문은 만들 수 없어요. 자세한 내용은 API 키 계좌 범위를 참고하세요.
어느 계좌로 입금됐는지 어떻게 알 수 있나요?
결제 완료된 주문의 matchedTransactionId로 입금 단건 조회를 하면 bankAccount에서 계좌를 확인할 수 있어요. transaction.created 웹훅에도 계좌 정보가 담겨요.