인트 (DEV)
인트 (DEV)2mo ago

successUrl 이동 시 결제수단에 따라 쿼리스트링 인코딩 방식이 다른이유

결제위젯을 사용할 때 successUrl 에 쿼리스트링으로 url 을 인코딩해서 사용중입니다. 예: https://payment-api.devinflearn.com/client/api/v1/payments/processing/toss?entryUrl=https%3A%2F%2Fwww.devinflearn.com%2Fcarts&successUrl=https%3A%2F%2Fcourse-api.devinflearn.com%2Fclient%2Fapi%2Fv2%2Fpayments%2Fcomplete%3FserviceId%3DCOURSE&failUrl=https%3A%2F%2Fwww.devinflearn.com%2Forders%2Fpay%2Fdomestic-fail%3FserviceId%3DCOURSE 참고로 쿼리스트링으로 제공하는 successUrl, failUrl, entryUrl 은 토스와 관계없고 저희 백엔드 서버에서 처리하는 데이터입니다. APM 으로 확인해보니 paymentType 이 BRANDPAY 일 때는 괜찮은데 NORMAL 인 경우가 일부 특수문자들이 디코딩이 된 채로 이동하는거 같습니다. BRANDPAY 인 경우 http://payment-api.inflearn.com/client/api/v1/payments/processing/toss?amount=66820&entryUrl=https%3A%2F%2Fwww.inflearn.com%2Fcarts%3FtargetCourseId%3D337692&failUrl=https%3A%2F%2Fwww.inflearn.com%2Forders%2Fpay%2Fdomestic-fail%3FserviceId%3DCOURSE&methodId=c_0Arne5leDdNoBVvm&orderId=0929-1654-3626018-0&paymentKey=xxx&paymentType=BRANDPAY&successUrl=https%3A%2F%2Fcourse-api.inflearn.com%2Fclient%2Fapi%2Fv2%2Fpayments%2Fcomplete%3FserviceId%3DCOURSE NORMAL 인 경우 http://payment-api.devinflearn.com/client/api/v1/payments/processing/toss?entryUrl=https://www.devinflearn.com/carts&successUrl=https://course-api.devinflearn.com/client/api/v2/payments/complete?serviceId%3DCOURSE&failUrl=https://www.devinflearn.com/orders/pay/domestic-fail?serviceId%3DCOURSE&paymentType=NORMAL&orderId=0929-1658-348790-0&paymentKey=xxx&amount=202400 = 문자는 정상적으로 인코딩이 유지된채로 오는데 :/? 와 같은 문자만 디코딩이 된 상태로 이동하는거 같습니다. NORMAL 인 경우만 다르게 동작하는 이유가 따로 있는건지 궁금합니다!
10 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
인트 (DEV)
인트 (DEV)OP2mo ago
BRANDPAY
{
"amount": "61600",
"orderId": "0929-1332-3625561-0",
"entryUrl": "https%3A%2F%2Fwww.inflearn.com%2Fcarts%3FtargetCourseId%3D325969",
"methodId": "c_k5rkDP5omLMLDy8n",
"successUrl": "https%3A%2F%2Fcourse-api.inflearn.com%2Fclient%2Fapi%2Fv2%2Fpayments%2Fcomplete%3FserviceId%3DCOURSE",
"failUrl": "https%3A%2F%2Fwww.inflearn.com%2Forders%2Fpay%2Fdomestic-fail%3FserviceId%3DCOURSE",
"paymentKey": "",
"paymentType": "BRANDPAY"
}
{
"amount": "61600",
"orderId": "0929-1332-3625561-0",
"entryUrl": "https%3A%2F%2Fwww.inflearn.com%2Fcarts%3FtargetCourseId%3D325969",
"methodId": "c_k5rkDP5omLMLDy8n",
"successUrl": "https%3A%2F%2Fcourse-api.inflearn.com%2Fclient%2Fapi%2Fv2%2Fpayments%2Fcomplete%3FserviceId%3DCOURSE",
"failUrl": "https%3A%2F%2Fwww.inflearn.com%2Forders%2Fpay%2Fdomestic-fail%3FserviceId%3DCOURSE",
"paymentKey": "",
"paymentType": "BRANDPAY"
}
NORMAL
{
"amount": "25300",
"orderId": "0929-1706-3626041-0",
"entryUrl": "https://www.inflearn.com/carts?targetCourseId%3D338838",
"successUrl": "https://course-api.inflearn.com/client/api/v2/payments/complete?serviceId%3DCOURSE",
"failUrl": "https://www.inflearn.com/orders/pay/domestic-fail?serviceId%3DCOURSE",
"paymentKey": "",
"paymentType": "NORMAL"
}
{
"amount": "25300",
"orderId": "0929-1706-3626041-0",
"entryUrl": "https://www.inflearn.com/carts?targetCourseId%3D338838",
"successUrl": "https://course-api.inflearn.com/client/api/v2/payments/complete?serviceId%3DCOURSE",
"failUrl": "https://www.inflearn.com/orders/pay/domestic-fail?serviceId%3DCOURSE",
"paymentKey": "",
"paymentType": "NORMAL"
}
이실장
이실장2mo ago
안녕하세요 아직 해결전이시죠? @인트 (DEV) 현재 문제가 발생하는 상황일까요?
인트 (DEV)
인트 (DEV)OP2mo ago
@이실장 url 에 & 가 들어가는 경우 문제가 발생합니다. 예를 들어 entryUrl 의 querystring 에 ?aaa=123&bbb=456 을 넣는 경우 저희는 모든 특수문자를 인코딩해서 전달하고 있지만 paymentType 이 NORMAL 인 경우만 & 의 인코딩이 유지가 안된채로 이동하고 있어서 bbb 에 대한 값이 entryUrl 이 아닌 토스의 successUrl 의 쿼리스트링으로 이동하게 되네요. 아래 링크는 entryUrl 에 orderId 를 쿼리스트링에 넣었지만 결국 payment-api.devinflearn.com/client/api/v1/payments/processing/toss 의 orderId 쿼리스트링으로 인식이 되버려 orderId 가 두 개 나오는 결과가 나와 에러가 발생합니다. https://payment-api.devinflearn.com/client/api/v1/payments/processing/toss?entryUrl=https://www.devinflearn.com/carts?payment%3Dsuccess&orderId=123&orderId=1002-1148-348892-0&successUrl=https://course-api.devinflearn.com/client/api/v2/payments/complete?serviceId%3DCOURSE&failUrl=https://www.devinflearn.com/orders/pay/domestic-fail?serviceId%3DCOURSE&paymentType=NORMAL&paymentKey=tinfl20251002114806sHBJ1&amount=137500
이실장
이실장2mo ago
현재 에러를 계속 받고 계시는군요?
인트 (DEV)
인트 (DEV)OP2mo ago
지금은 orderId 를 쿼리스트링에 안넣도록 처리해서 문제는 없는 상황입니다
이실장
이실장2mo ago
그럼 저희가 다시 수정하면 문제가 발생할까요?
인트 (DEV)
인트 (DEV)OP2mo ago
BRANDPAY 와 동일하게 동작하도록 수정해도 문제가 발생하지 않을거 같아요
이실장
이실장2mo ago
넵 그럼 요건 시급도 조금 낮춰서 개선하는 쪽으로 하겠습니다. 공유해주셔서 감사합니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.

Did you find this page helpful?