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
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
BRANDPAY
NORMAL
안녕하세요 아직 해결전이시죠?
@인트 (DEV)
현재 문제가 발생하는 상황일까요?
@이실장
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현재 에러를 계속 받고 계시는군요?
지금은 orderId 를 쿼리스트링에 안넣도록 처리해서 문제는 없는 상황입니다
그럼 저희가 다시 수정하면 문제가 발생할까요?
BRANDPAY 와 동일하게 동작하도록 수정해도 문제가 발생하지 않을거 같아요
넵 그럼 요건 시급도 조금 낮춰서 개선하는 쪽으로 하겠습니다.
공유해주셔서 감사합니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.