Eric7378
Eric73788h ago

가상계좌 결제요청 프로세스 문의

결제요청의 시작은 await payment.requestPayment(options); 로 시작 되는데 해당 options에 입력한 successUrl 로 결제 처리 결과를 받아 오더군요. successUrl: baseUrl + "/buy-success", 에서 다시 결제 처리상태 확인 ("https://api.tosspayments.com/v1/payments/orders/") 을 통해 상태 정보 확인 을 완료하고요. 대부분의 결재는 이렇게 진행해서 처리하는데 문제가 없는데, 가상계좌 결재 방식은 [계좌번호 생성] 절차가 필요한데 해당 프로세스로 진행 했을때 어디에도 자동으로 계좌번호 생성을 해서 넘겨 주지 않던데 가이드 문서에는 [가상계좌발급요청] API만 (POST /v1/virtual-accounts) 있더라구요. successUrl > /buy-success 에서 결재방식(method=VIRTUAL_ACCOUNT)이라도 전달되어오면 해당 요청인 경우 다시 [가상계좌발급요청] 을 다시 진행하던 할 수 있을꺼 같은데 결재방식이 넘어오지않아 진행이 어렵습니다. 가상계좌 결재시 결제요청부터 > 가상계좌발급요청 > 웹훅(입금결과통지) [이건 등록해 뒀습니다.] 등 전반적인 절차 에 대해 안내 부탁 드립니다. 참고로 개발 언어는 파이썬 입니다. 감사합니다.
8 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Minsu Kim
Minsu Kim7h ago
결제수단과 무관하게 buy-success에서 https://api.tosspayments.com/v1/payments/orders/{orderId} 를 호출하시면 안되구요. https://api.tosspayments.com/v1/payments/confirm 이걸 호출하셔야 합니다. 가상계좌의 경우, https://api.tosspayments.com/v1/payments/confirm 가 결제 승인이 아니라 가상계좌 발급으로 작동하게 되며 반환된 객체에서 virtualAccount.accountNumber 값으로 계좌번호, virtualAccount.bankCode 값으로 은행이 내려갑니다.
Eric7378
Eric7378OP6h ago
알려주신 confirm api 를 호출했더니 아래와 같은 오류가 발생 합니다. 가이드 문서의 필수입력값은 모두 넘겼는데 필수 파라미터가 누락되었다고 나옵니다. 필수입력값이 어떤게 누락됐는지 확인 가능할까요? 오류코드) >>buy-success get orderId: 오더 ID,paymentKey 페이먼트 키 ,amount: 1650 >>orders data: {'code': 'INVALID_REQUEST', 'message': '필수 파라미터가 누락되었습니다.'} ❌ 결제 조회 실패: {'code': 'INVALID_REQUEST', 'message': '필수 파라미터가 누락되었습니다.'} 127.0.0.1 - - [21/Sep/2025 14:52:07] "GET /buy-success?orderId=오더 ID&paymentKey=페이먼트 키&amount=1650 HTTP/1.1" 302 - 가이드 내용)
curl --request POST \
--url https://api.tosspayments.com/v1/payments/confirm \
--header 'Authorization: Basic 암호화 키' \
--header 'Content-Type: application/json' \
--data '{"paymentKey":"페이먼트 키","orderId":"오더 ID","amount":1000}'
curl --request POST \
--url https://api.tosspayments.com/v1/payments/confirm \
--header 'Authorization: Basic 암호화 키' \
--header 'Content-Type: application/json' \
--data '{"paymentKey":"페이먼트 키","orderId":"오더 ID","amount":1000}'
소스코드)
orderId = request.args.get("orderId")
paymentKey = request.args.get("paymentKey")
amount = request.args.get("amount")
print(">>buy-success get orderId:",orderId," ,paymentKey",paymentKey," ,amount:",amount)

data={
"paymentKey":{paymentKey},
"orderId":{orderId},
"amount":{amount}
}
auth_header = base64.b64encode(f"{skey}:".encode()).decode()
headers = {
"Authorization": f"Basic {auth_header}",
"Content-Type": "application/json"
}
res = requests.post(TOSS_API_URL, headers=headers, data=data)
orderId = request.args.get("orderId")
paymentKey = request.args.get("paymentKey")
amount = request.args.get("amount")
print(">>buy-success get orderId:",orderId," ,paymentKey",paymentKey," ,amount:",amount)

data={
"paymentKey":{paymentKey},
"orderId":{orderId},
"amount":{amount}
}
auth_header = base64.b64encode(f"{skey}:".encode()).decode()
headers = {
"Authorization": f"Basic {auth_header}",
"Content-Type": "application/json"
}
res = requests.post(TOSS_API_URL, headers=headers, data=data)
Minsu Kim
Minsu Kim6h ago
{paymentKey}, {orderId}, {amount} 이렇게 data에 지정하는게 맞나요? 그냥 paymentKey, orderId, amount로지정하셔야 할 것 같은데요.
Eric7378
Eric7378OP6h ago
>>buy-success form data: None >>buy-success get orderId: sVOR6XV2QyHHIayTfP28 ,paymentKey tviva202509211520289vRi8 ,amount: 1650 >>orders data: {'code': 'INVALID_REQUEST', 'message': '필수 파라미터가 누락되었습니다.'} ❌ 결제 조회 실패: {'code': 'INVALID_REQUEST', 'message': '필수 파라미터가 누락되었습니다.'} data={ "paymentKey":paymentKey, "orderId":orderId, "amount":amount } 여전히 그렇습니다
Minsu Kim
Minsu Kim6h ago
requests.post(TOSS_API_URL, headers=headers, json=data) 이렇게 넘기셔야 하네요, data로 하니까 formdata로 인식하고 있습니다. 동일 코드로 제가 작동 시 data=%7B%22paymentKey%22%3A%22tviva202509211520289vRi8%22%7D.... 이런식으로 오고있어요.
Eric7378
Eric7378OP5h ago
아 감사합니다 잘 작동합니다 혹시 BANK_CODES가 모아진 거 있나요? 토스페이먼츠에서 하는 BANK_CODES요
Minsu Kim
Minsu Kim5h ago
기관 코드 | 토스페이먼츠 개발자센터
파라미터로 전달할 수 있는 기관(카드사, 은행, 통신사) 코드 리스트입니다.

Did you find this page helpful?