min.k4501
min.k45014mo ago

토스 결제에는 URL로만 결제할 수 있는 Checkout API 가 없나요?

아래 문서를 보면 있는 것 같은데 실제로 호출해보면 404 NotFound 응답이 발생합니다. https://docs.tosspayments.com/en/integration-types#1-create-payments-api
Integration Types | 토스페이먼츠 개발자센터
Learn types of integrating Toss Payments into your website.
67 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Ayaan이안
Ayaan이안4mo ago
결제창은 결제창 SDK로 호출해 주셔야 열립니다.
min.k4501
min.k4501OP4mo ago
Checkout Session API를 지원할 계획은 없을까요? 대부분의 글로벌 PG들이 Checkout Session URL을 제공합니다. 사용성 관점에서 클라 개발이 반드시 들어가야해서 사용성이 좀 떨어지네요. 제공되면 좋을 것 같습니다.
이실장
이실장4mo ago
@Ayaan 제공가능여부는 저희가 답변드리는게 좋을 것 같아요 호출할 때 사용한 orderId알려주시겠어요
min.k4501
min.k4501OP4mo ago
그냥 저 위에 링크 확인하시면 거기에 있는 요청 그대로 전송한것입니다
curl --request POST \
--url https://api.tosspayments.com/v1/payments \
--header 'Authorization: Basic your-key' \
--header 'Content-Type: application/json' \
--data '{"method":"CARD","amount":15000,"orderId":"a4CWyWY5m89PNh7xJwhk1","orderName":"토스 티셔츠 외 2건","successUrl":"http://localhost:8080/success","failUrl":"http://localhost:8080/fail"}'
curl --request POST \
--url https://api.tosspayments.com/v1/payments \
--header 'Authorization: Basic your-key' \
--header 'Content-Type: application/json' \
--data '{"method":"CARD","amount":15000,"orderId":"a4CWyWY5m89PNh7xJwhk1","orderName":"토스 티셔츠 외 2건","successUrl":"http://localhost:8080/success","failUrl":"http://localhost:8080/fail"}'
이실장
이실장4mo ago
curl --location 'https://api.tosspayments.com/v1/payments' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic {key}' \
--data '{
"method":"CARD",
"orderName": "124213123132",
"orderId": "12412312412411241244123123123",
"amount": 10000,
"successUrl": "https://localhost:8080",
"failUrl" : "https://localhost:8080/fail"
}

'
curl --location 'https://api.tosspayments.com/v1/payments' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic {key}' \
--data '{
"method":"CARD",
"orderName": "124213123132",
"orderId": "12412312412411241244123123123",
"amount": 10000,
"successUrl": "https://localhost:8080",
"failUrl" : "https://localhost:8080/fail"
}

'
잘되네요. 보내주신 payload로 들어온 내역이 없는 것으로 보아 호출과정에서 뭔가 이슈가 있었던 것 같아요
min.k4501
min.k4501OP4mo ago
{"message":{"timestamp":"2024-10-17T05:28:40.227+00:00","status":404,"error":"Not Found","path":"/v1/payments"}}% 없는 주소라고 나옵니다 잘된다라고 하셨는데 응답이 어떻게 나올까요
이실장
이실장4mo ago
응답도 실제 응답대로 잘 나와요
min.k4501
min.k4501OP4mo ago
응답 보내주실 수 있을까요
이실장
이실장4mo ago
{ "mId": "tsb_inmanaged", "lastTransactionKey": null, "paymentKey": "tsb_i20241017142710Ek0U6", "orderId": "12412312412411241244123123123", "orderName": "124213123132", "taxExemptionAmount": 0, "status": "READY", "requestedAt": "2024-10-17T14:27:10+09:00", "approvedAt": null, "useEscrow": null, "cultureExpense": false, "card": null, "virtualAccount": null, "transfer": null, "mobilePhone": null, "giftCertificate": null, "cashReceipt": null, "cashReceipts": null, "discount": null, "cancels": null, "secret": "ps_6bJXmgo28em1mO7xg7XW8LAnGKWx", "type": "NORMAL", "easyPay": null, "country": "KR", "failure": null, "isPartialCancelable": true, "receipt": null, "checkout": { "url": "https://payment-gateway-sandbox.tosspayments.com/link/payment?urlToken=checkout-url-0f55eb49e34e433aa5f20fc69f8dd1a27931fd3174374d6dae31623f762ffa0f&sessionCreationApiVersion=V3&gtid=a241017423fe453a4a14a68972c8d0294155754&flowMode=DEFAULT" }, "pgTransactionId": null, "currency": "KRW", "totalAmount": 10000, "balanceAmount": 10000, "suppliedAmount": 9091, "vat": 909, "taxFreeAmount": 0, "method": null, "version": "2022-11-16", "metadata": null }
min.k4501
min.k4501OP4mo ago
오 전달해주신 응답의 checkout.url 접속해보니 제가 원하는 체크아웃 url 이네요
min.k4501
min.k4501OP4mo ago
No description
min.k4501
min.k4501OP4mo ago
이 방식은 아직 공식적으로 지원하지 않는건가요? 공식 홈페이지에서 연동가이드에는 checkout.url 에 대한 가이드가 안나와있네요
이실장
이실장4mo ago
현재 저희 계약은 되셨나요?
min.k4501
min.k4501OP4mo ago
네 하이퍼커넥트입니다 토스측과 직접 연락하던 슬랙 채널이 있었는데 없어져서 이곳을 통해 질문드리네요.
이실장
이실장4mo ago
checkout방식이 지원은하는데, 보통 해외 연동에 익숙한 분들만 찾고 혼란이 있어서 홈페이지에는숨김처리되어있습니다.
min.k4501
min.k4501OP4mo ago
아 그렇군요.
이실장
이실장4mo ago
말씀하신것처럼 해외pg에서는 익숙한데 국내에서는 sdk방식을 더 익숙해하시거든요
min.k4501
min.k4501OP4mo ago
그렇군요. 이해했습니다. 그렇다면 checkout 방식을 사용해도 될까요? 갑자기 deprecated 되던지 할까봐 걱정되네요
이실장
이실장4mo ago
이미 몇몇 글로벌가맹점에서 사용중이기때문에 deprecated하는 것도 비용이라 당장 큰걱정은 하지않으셔도됩니다.
min.k4501
min.k4501OP4mo ago
아 다행이네요. 답변 감사합니다. 마지막으로 추가 질문 드리고 싶습니다 아까 제가 없는 주소라고 나왔다고 말씀드렸는데 혹시 Basic 인증 토큰으로 보내는 값 때문에 그럴 수 있을까요?
min.k4501
min.k4501OP4mo ago
No description
min.k4501
min.k4501OP4mo ago
시크릿 키는 공개 채널에 공유할 수 없다고 뜨네요
이실장
이실장4mo ago
사용한 시크릿키가 docs에 있는거 그대로 복붙하신건가요?
min.k4501
min.k4501OP4mo ago
네네 맞습니다 근데 보통은 유효하지 않은 키라면 키가 유효하지 않다고 응답을 하지 path가 없다고 뜨진 않아서요
이실장
이실장4mo ago
카드/간편결제 통합결제창 연동하기 | 토스페이먼츠 개발자센터
토스페이먼츠 카드/간편결제 통합결제창을 연동하는 방법이에요. 구매자가 결제창에서 결제수단, 결제 정보를 선택한 뒤에 카드 또는 간편결제 앱으로 이동해요.
이실장
이실장4mo ago
여기 있는 값으로 해보시겠어요? 일단 키도 사용불가한거긴하네요
min.k4501
min.k4501OP4mo ago
아 키를 바꾸니 나오네요. 빠르게 도움주셔서 감사합니다 매우 큰 도움이 되었습니다 checkout.url 사용해보겠습니다 ㅎㅎ
Ayaan이안
Ayaan이안4mo ago
처음에 내용 관련하여 혼선을 드린점 양해 부탁드립니다. ㅜ 이실장님 말씀대로 진행하시면 될 것 같습니다.
min.k4501
min.k4501OP4mo ago
감사합니다
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
min.k4501
min.k4501OP4mo ago
@이실장 안녕하세요. CHeckout Session URL 안에서 결제 완료 이후에 결제 완료 웹훅이 전송되지 않는데 Checkout Session URL 안에서 결제 후에 뭔가 따로 처리를 해야 하는게 있을까요? 혹시 Checkout Session URL 안에서 결제 승인 완료가 이루어지고 이후에 Confirm API를 한번더 호출해야 하는 구조일까요?
today.lastday
today.lastday4mo ago
confirm api를 호출해야 최종 결제가 완료되는 것입니다. paymentKey를 이용하여 결제조회를 하셔서 결제 상태가 완료되었는지 확인 부탁드려요.
min.k4501
min.k4501OP4mo ago
아.. 음 그러면 사실상 Checkout Session API가 아니군요 Checkout Session URL은 URL 하나로만 결제 처리를 끝낼 수 있는거라
today.lastday
today.lastday4mo ago
아 checkout이군요. 주문번호 남겨주시면 확인해볼게요.
min.k4501
min.k4501OP4mo ago
넵 잠시만요 orderId=1ef8d03b-b89b-65b1-a0e2-ab2395e410b8 paymentKey=thaku20241018124753BItW2 successUrl 에서 리다이렉트 되면서 받은 값들입니다. 그말은 결제가 성공했다는 뜻인데. 웹훅은 전송이 안되어서요
min.k4501
min.k4501OP4mo ago
웹훅 상세 정보 | 토스페이먼츠 개발자센터
토스페이먼츠 결제 연동 문서, API, 키, 테스트 내역, 웹훅 등록 등 개발에 필요한 정보와 기능을 확인해 보세요. 결제 연동에 필요한 모든 개발자 도구를 제공해 드립니다.
min.k4501
min.k4501OP4mo ago
웹훅이 전송된 기록은 없네요
No description
min.k4501
min.k4501OP4mo ago
오 방금 뭔가 전송되었네요 직접 하신건가요
today.lastday
today.lastday4mo ago
음 이건 결제가 만료되었다는거에요
min.k4501
min.k4501OP4mo ago
다른것 같네요
{
"createdAt": "2024-10-18T12:52:30.484559",
"eventType": "PAYMENT_STATUS_CHANGED",
"data": {
"mId": "thakuna_live2",
"paymentKey": "thaku20241018122057pRSs8",
"orderId": "1ef8cffe-ef04-643e-a0e2-eb6c397a9bf7",
"orderName": "",
"type": "NORMAL",
"totalAmount": 100,
"balanceAmount": 100,
"taxFreeAmount": 0,
"taxExemptionAmount": 0,
"suppliedAmount": 91,
"vat": 9,
"currency": "KRW",
"country": "KR",
"isPartialCancelable": true,
"checkout": {
"url": "https://api.tosspayments.com/v1/payments/thaku20241018122057pRSs8/checkout"
},
"requestedAt": "2024-10-18T12:20:57+09:00",
"cultureExpense": false,
"version": "2022-11-16",
"status": "EXPIRED",
"failure": {
"code": "EXPIRED_PAYMENT",
"message": "결제가 만료되었습니다. 다시 시도해주세요."
},
"approvedAt": null,
"cancels": null,
"card": null,
"cashReceipt": null,
"discount": null,
"easyPay": null,
"giftCertificate": null,
"lastTransactionKey": null,
"method": null,
"mobilePhone": null,
"receipt": null,
"secret": null,
"transactionKey": null,
"transfer": null,
"useEscrow": null,
"virtualAccount": null
}
}
{
"createdAt": "2024-10-18T12:52:30.484559",
"eventType": "PAYMENT_STATUS_CHANGED",
"data": {
"mId": "thakuna_live2",
"paymentKey": "thaku20241018122057pRSs8",
"orderId": "1ef8cffe-ef04-643e-a0e2-eb6c397a9bf7",
"orderName": "",
"type": "NORMAL",
"totalAmount": 100,
"balanceAmount": 100,
"taxFreeAmount": 0,
"taxExemptionAmount": 0,
"suppliedAmount": 91,
"vat": 9,
"currency": "KRW",
"country": "KR",
"isPartialCancelable": true,
"checkout": {
"url": "https://api.tosspayments.com/v1/payments/thaku20241018122057pRSs8/checkout"
},
"requestedAt": "2024-10-18T12:20:57+09:00",
"cultureExpense": false,
"version": "2022-11-16",
"status": "EXPIRED",
"failure": {
"code": "EXPIRED_PAYMENT",
"message": "결제가 만료되었습니다. 다시 시도해주세요."
},
"approvedAt": null,
"cancels": null,
"card": null,
"cashReceipt": null,
"discount": null,
"easyPay": null,
"giftCertificate": null,
"lastTransactionKey": null,
"method": null,
"mobilePhone": null,
"receipt": null,
"secret": null,
"transactionKey": null,
"transfer": null,
"useEscrow": null,
"virtualAccount": null
}
}
결제 완료 웹훅이 전송이 안되는 것 같아요
today.lastday
today.lastday4mo ago
승인 API를 호출하지 않아서 결제가 최종 DONE으로 변하지 않고 만료된 것인데요. 잠시 확인해보고 돌아올게요
min.k4501
min.k4501OP4mo ago
넵 Checkout Session API 방식이라면 URL 하나로 결제 처리를 다 끝내는방식이라 일반적인 글로벌 PG 방식을 고려할때 Confirm API 호출은 따로 없어야 적절할 것 같습니다. successUrl 로 정상적으로 리다이렉트 된 것으로 보면.. 결제 승인도 된 것 같은데 단순히 웹훅이 전송이 안된 것같네요.
today.lastday
today.lastday4mo ago
현재 결제 승인이 되지 않은 것입니다.
min.k4501
min.k4501OP4mo ago
음 일시적인 오류가 발생했다고 나오네요
min.k4501
min.k4501OP4mo ago
.
No description
today.lastday
today.lastday4mo ago
제가 귀사 test mid로 테스트 해봐도 될까요?
min.k4501
min.k4501OP4mo ago
넵 물론입니다 참고로 API 버전은 2022-11-16 입니다 이게 최신 버전 같더라구요
min.k4501
min.k4501OP4mo ago
.
No description
today.lastday
today.lastday4mo ago
지금 확인해보시면 정상응답 1개 웹훅 전달되었을거에요.
min.k4501
min.k4501OP4mo ago
혹시 사용하신 API 명령을 알 수 있을까요? curl 기준
min.k4501
min.k4501OP4mo ago
오우 ? 공식 문서에는 리턴 유알엘이 없는데 숨겨진 파라미터인가보군요
today.lastday
today.lastday4mo ago
일단 이걸로 해보시겠어요? checkout이 잘 사용되지 않는거라 확인해보고 수정 요청해놓을게요. 그리고 응답에 나오는 ckeckout.url을 이용하여 결제 진행하시면 승인 API 호출없이 결제될거에요.
min.k4501
min.k4501OP4mo ago
이렇게 해봤고 결제창은 잘 나오네요 그런데 결제 승인 웹훅이 안옵니다
today.lastday
today.lastday4mo ago
혹시 무슨 결제수단으로 결제 해보셨나요?
min.k4501
min.k4501OP4mo ago
신한카드 였습니다 신한카드 -> 신한 슈퍼쏠
today.lastday
today.lastday4mo ago
결제후에 localhost:8080으로 이동하였나요?
min.k4501
min.k4501OP4mo ago
다른것으로해볼게요 네 결제후에 정상적으로 이동했습니다
min.k4501
min.k4501OP4mo ago
.
No description
today.lastday
today.lastday4mo ago
secretKey를 변경하신 것 같은데 원래 테스트 하던걸로 해보시겠어요? key를 다른걸 사용해서 웹훅이 안온 것 같아요
min.k4501
min.k4501OP4mo ago
잠시만요 오 정상적으로 성공했습니다 감사합니다 넵 감사합니다. 그리고 결제창을 처음 띄울때 method를 꼭 입력해야 할까요 사용자가 원하는 결제를 땡기는데로 하는게 결제 승인관점에서 더 이득일 것 같은데
today.lastday
today.lastday4mo ago
네, 다른 결제창은 바둑판이라는 개념이 있어서 사용자가 선택할 수 있도록 하는 기능이 있는데 현재 checkout은 해당 기능은 적용이 안되어 있는 버전이에요.
min.k4501
min.k4501OP4mo ago
아하 그렇군요. 그럼 요약하면 checkout 쓸때 method를 필수로 넣어야 한다라고 보면될까요
today.lastday
today.lastday4mo ago
네, 이 부분은 좋은 아이디어일 것 같아서 내부에 공유해볼게요.
min.k4501
min.k4501OP4mo ago
넵 감사합니다! 빠르게 도움주셔서 감사합니다 🙂

Did you find this page helpful?