윤종우
윤종우2mo ago

payment 객체 한글 처리 방법

안녕하세요. toss payment를 사용하여 결제를 개발하고 있습니다. 결제 승인을 위해서 https://api.tosspayments.com/v1/payments/confirm API를 이용하였는데 return 되는 payment 객체에 한글 값들이 모두 깨져서 보입니다. 한글이 정상적으로 나오게 하기 위해 API에서 설정해야 하는게 있나요? 아니면 Java에서 decoding 하여 처리할 수 있나요? 리턴 받은 payment 객체 예시입니다. {"mId":"tvivarepublica","lastTransactionKey":"9FCF51AD41F368DEB6A5D7FFF61AB43A","paymentKey":"tviva20241206161758tm542","orderId":"KOCEA22024120038483125","orderName":"증명 발급 결제","taxExemptionAmount":0,"status":"DONE","requestedAt":"2024-12-06T16:17:58+09:00","approvedAt":"2024-12-06T16:18:27+09:00","useEscrow":false,"cultureExpense":false,"card":{"issuerCode":"11","acquirerCode":"11","number":"42658688**625*","installmentPlanMonths":0,"isInterestFree":false,"interestPayer":null,"approveNo":"00000000","useCardPoint":false,"cardType":"신용","ownerType":"법인","acquireStatus":"READY","amount":1500},"virtualAccount":null,"transfer":null,"mobilePhone":null,"giftCertificate":null,"cashReceipt":null,"cashReceipts":null,"discount":null,"cancels":null,"secret":"ps_ex6BJGQOVDELLwOR42a5rW4w2zNb","type":"NORMAL","easyPay":{"provider":"삼성페이","amount":0,"discountAmount":0},"country":"KR","failure":null,"isPartialCancelable":true,"receipt":{"url":"https://dashboard.tosspayments.com/receipt/redirection?transactionId=tviva20241206161758tm542&ref=PX"},"checkout":{"url":"https://api.tosspayments.com/v1/payments/tviva20241206161758tm542/checkout"},"currency":"KRW","totalAmount":1500,"balanceAmount":1500,"suppliedAmount":1364,"vat":136,"taxFreeAmount":0,"method":"간편결제","version":"2022-11-16","metadata":null}
15 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Ayaan이안
Ayaan이안2mo ago
UTF-8로 인코딩해서 값을 보내시고, UTF-8 로 받으시기 바랍니다.
윤종우
윤종우OP2mo ago
결제 화면 띄울 때는 SDK를 사용해서 띄우는데 method를 'CARD'로 넣습니다. 이 값을 깨지지 않았구요. 그런데 받을 때는 한글로 나오는 것 같습니다.
Ayaan이안
Ayaan이안2mo ago
네 한글로 내려갑니다. UTF-8로 받으시면 돼요.
윤종우
윤종우OP2mo ago
디코딩을 UTF-8로 하라는거죠?
Ayaan이안
Ayaan이안2mo ago
예, 승인 요청도 UTF-8로 보내시고 응답도 UTF-8로 디코딩하세요. 관련해서는 구글에 검색하면 정보가 많이 있습니다.
윤종우
윤종우OP2mo ago
승인요청 API 호출할 때도 UTF-8 인코딩 해서 보내야 한다는 건가요? 영문인데 인코딩이 필요한가요? method는 영문이라서
Ayaan이안
Ayaan이안2mo ago
그냥 요청 body자체를 UTF-8로 넘기시면 되시는데, 한번 먼저 응답먼저 UTF-8 디코드 하고 모든 값이 한국어로 잘 넘어오는지 봐주세요.
윤종우
윤종우OP2mo ago
네. 감사합니다.
Ayaan이안
Ayaan이안2mo ago
만약 UTF-8 디코딩했는데 깨져서 나온다면, 요청 자체에 어떤 필드이든 한국어가 들어있었고 그게 UTF-8이 아니라 EUC-KR이나 ASCII로 온다는 뜻이므로 요청도 같이 손봐주셔야 합니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
윤종우
윤종우OP2mo ago
CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost("https://api.tosspayments.com/v1/payments/confirm");
JSONObject json = new JSONObject(); json.put("paymentKey", paymentKey); json.put("orderId", orderId); json.put("amount", amount);
StringEntity entity = new StringEntity(json.toString()); post.setEntity(entity); post.setHeader("Content-Type", "application/json; charset=UTF-8"); String authHeader = "Basic " + java.util.Base64.getEncoder().encodeToString((SECRET_KEY + ":").getBytes()); post.setHeader("Authorization", authHeader);
HttpResponse apiResponse = httpClient.execute(post); String responseBody = new String(EntityUtils.toString(apiResponse.getEntity()).getBytes(), "UTF-8"); 이렇게 보내고 있는데 UTF-8로 디코딩해도 결과값이 깨지네요.
윤종우
윤종우OP2mo ago
{"mId":"tvivarepublica","lastTransactionKey":"ACC0F0BB616BA31B101E9D3027412B38","paymentKey":"tviva20241206170112rtHy6","orderId":"KOCEA22024120038483128","orderName":"증명 발급 결제","taxExemptionAmount":0,"status":"DONE","requestedAt":"2024-12-06T17:01:12+09:00","approvedAt":"2024-12-06T17:01:41+09:00","useEscrow":false,"cultureExpense":false,"card":{"issuerCode":"11","acquirerCode":"11","number":"42658606**427*","installmentPlanMonths":0,"isInterestFree":false,"interestPayer":null,"approveNo":"00000000","useCardPoint":false,"cardType":"신용","ownerType":"법인","acquireStatus":"READY","amount":1500},"virtualAccount":null,"transfer":null,"mobilePhone":null,"giftCertificate":null,"cashReceipt":null,"cashReceipts":null,"discount":null,"cancels":null,"secret":"ps_ALnQvDd2VJmZzdap6aQY3Mj7X41m","type":"NORMAL","easyPay":{"provider":"삼성페이","amount":0,"discountAmount":0},"country":"KR","failure":null,"isPartialCancelable":true,"receipt":{"url":"https://dashboard.tosspayments.com/receipt/redirection?transactionId=tviva20241206170112rtHy6&ref=PX"},"checkout":{"url":"https://api.tosspayments.com/v1/payments/tviva20241206170112rtHy6/checkout"},"currency":"KRW","totalAmount":1500,"balanceAmount":1500,"suppliedAmount":1364,"vat":136,"taxFreeAmount":0,"method":"간편결제","version":"2022-11-16","metadata":null}
Ayaan이안
Ayaan이안2mo ago
요청 자체가 올 때 한국어가 깨지진 않았는지 로그를 확인해보아야할 것 같은데, 조금만 시간 양해 부탁드립니다. orderId => KOCEA22024120038483128
유부장
유부장2mo ago
요청, 응답 정상 처리 되었습니다. 응답 받고 나신 다음에 처리가 잘못 되신것 같아요.

Did you find this page helpful?