조엘파파
조엘파파7mo ago

현금영수증 신청

주문건에 대해 별도로 현급영수증을 발급신청하는데 404 notfound가 돌아오는데 왜일까요?
22 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
유부장
유부장7mo ago
별도로 현금영수증을 어떻게 발급 신청하고 계시는지 설명 부탁 드려요.
조엘파파
조엘파파OP7mo ago
주문내역에서 일단 현금영수증 발급여부가 널인거는 신청버튼을 놓고 거기서 누르면 모달창이 떠서 cashreceipt에 맞게 주문번호 주문건명 금액 타입 핸드폰번호나 사업자번호 이렇게 해서 public CashReceipt registerCashReceipt(RegisterCashReceiptDTO registerCashReceiptDTO) { RestTemplate restTemplate = new RestTemplate(); String url = "https://api.tosspayments.com/v1/cash-receipts"; String encodedApiKey = Base64.getEncoder().encodeToString((tossPaymentsApiKey + ":").getBytes(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Basic " + encodedApiKey); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<RegisterCashReceiptDTO> entity = new HttpEntity<>(registerCashReceiptDTO, headers); ResponseEntity<CashReceipt> response = restTemplate.exchange(url, HttpMethod.POST, entity, CashReceipt.class); return response.getBody(); } 이걸 부르거든요 ajax로 저걸 부릅니다. ajax에서는 function submitCashReceipt() { let orderId = $('#modalOrderId').val(); let orderName = $('#modalOrderName').val(); let amount = $('#modalAmount').val(); let customerIdentityNumber = $('#modalCustomerIdentityNumber').val(); let type = $('input[name="type"]:checked').val(); let csrfToken = $("input[name='_csrf']").val(); $.ajax({ url: '/api/registerCashReceipt', type: 'POST', contentType: 'application/json', headers: { 'X-CSRF-TOKEN': csrfToken }, data: JSON.stringify({ orderId: orderId, orderName: orderName, amount: amount, customerIdentityNumber: customerIdentityNumber, type: type }), success: function(response) { $('#registerCashReceiptModal').modal('hide'); location.reload(); }, error: function(error) { alert('현금영수증 신청에 실패했습니다.'); } }); } 데이타는 그냥 json.stringify했으니까 string으로 생각해야되는거겠네요 근데 저기서 DTO하나 만들어서 그 형식으로 ... 저게 잘못된건가요? /api/registerCashReceipt는 @PostMapping("/registerCashReceipt") public ResponseEntity<CashReceipt> registerCashReceipt(@RequestBody RegisterCashReceiptDTO registerCashReceiptDTO) { try { CashReceipt cashReceipt = paymentService.registerCashReceipt(registerCashReceiptDTO); // orderId를 이용해 해당 주문을 찾고 receiptKey를 업데이트 Orders order = ordersRepository.findByTossOrderId(cashReceipt.getOrderId()); order.setIsReciepPrinted(Boolean.TRUE); order.setReceiptKey(cashReceipt.getReceiptKey()); ordersRepository.save(order); return ResponseEntity.ok(cashReceipt); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } 이렇게 생겼구요 2024-06-27T16:09:49.679+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : POST "/api/registerCashReceipt", parameters={} 2024-06-27T16:09:49.679+09:00 DEBUG 12252 --- [nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to com.printwell.wellBAK.controller.ApiController#registerCashReceipt(RegisterCashReceiptDTO) 2024-06-27T16:09:49.679+09:00 DEBUG 12252 --- [nio-8080-exec-3] m.m.a.RequestResponseBodyMethodProcessor : Read "application/json;charset=UTF-8" to [com.printwell.wellBAK.dto.RegisterCashReceiptDTO@3d939e17] 2024-06-27T16:09:49.682+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.client.RestTemplate : HTTP POST https://api.tosspayments.com/v1/cash-receipts 2024-06-27T16:09:49.683+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.client.RestTemplate : Accept=[application/json, application/+json] 2024-06-27T16:09:49.684+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.client.RestTemplate : Writing [com.printwell.wellBAK.dto.RegisterCashReceiptDTO@3d939e17] as "application/json" 2024-06-27T16:09:49.759+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.client.RestTemplate : Response 404 NOT_FOUND 2024-06-27T16:09:49.760+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [/] and supported [application/json, application/+json] 2024-06-27T16:09:49.760+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Nothing to write: null body 2024-06-27T16:09:49.760+09:00 DEBUG 12252 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet : Completed 500 INTERNAL_SERVER_ERROR 이렇게 404 not_found 뜨네요
유부장
유부장7mo ago
저희가 요청을 특정할 수 있는 값도 주세요.
조엘파파
조엘파파OP7mo ago
개발에서 주문번호가 240621163141-3 이거에요 그리고 건명은 7777 금액은 5280 이요 아까 테스트로 소득공제 그리고 번호는 01037670327로 넣었었어요 api로요 개발자센터에서 한게 아니구요
유부장
유부장7mo ago
1) 요청에 대한 에러 응답은 {"code":"NOT_FOUND_MERCHANT","message":"존재하지 않는 상점 정보 입니다."} 이렇게 였습니다. 에러 code, messge 처리 잘 하셔야 할것 같고요 2) 지금 사용된 키는 무슨 키를 쓰신건가요?
조엘파파
조엘파파OP7mo ago
시크릿키 개발용이요
유부장
유부장7mo ago
어디에서 확인한 개발용 시크릿키요?
조엘파파
조엘파파OP7mo ago
toss.secret.key=test_gsk_GjLJoQ1aVZYyJn94DNwg3w6KYe2R
조엘파파
조엘파파OP7mo ago
API 키 | 토스페이먼츠 개발자센터
토스페이먼츠 결제 연동 문서, API, 키, 테스트 내역, 웹훅 등록 등 개발에 필요한 정보와 기능을 확인해 보세요. 결제 연동에 필요한 모든 개발자 도구를 제공해 드립니다.
유부장
유부장7mo ago
지금 사이트 들어가보면 test_gsk_GjLJoQ1aVZYyJn94DNwg3w6KYe2R 이 키 좌측에 결제위젯 키라고 표시된 내용 보이시나요? 결제위젯 연동 키 API 개별 연동 키 아래에 검은 글씨로, 사용할 수 있는 제품에 대해 명시되어 있는데 보시겠어요?
조엘파파
조엘파파OP7mo ago
조엘파파
조엘파파OP7mo ago
아.... 그럼 개별로 할때는 api용 시크릿키를 써야되는건가요?
No description
조엘파파
조엘파파OP7mo ago
api 개별 인증키를 이용해서 해야되는군요?
유부장
유부장7mo ago
네, API 개별연동키로 진행 해보시면 됩니다.
조엘파파
조엘파파OP7mo ago
에고 그걸 몰랐네요 ^^ 감사합니다. 해보고 안되면 문의 드릴께요 감사합니다~
유부장
유부장7mo ago
네 감사합니다
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
조엘파파
조엘파파OP7mo ago
이번엔 400 bad request라고 나오네요 부장님
유부장
유부장7mo ago
{"code":"DUPLICATED_CASH_RECEIPT","message":"이미 현금영수증이 발급된 주문입니다."} 주문번호 변경해서 다시 시도해보시겠어요
Kimoon Lee
Kimoon Lee7mo ago
@조엘파파 님 에러 받으실때 응답의 body도 로그에 남겨주시기 바랍니다. 그러면 지금 유부장님이 전달주시는 에러 메시지를 직접 보실수 있습니다.
조엘파파
조엘파파OP7mo ago
고맙습니다. 메세지 보면서 해결하였습니다. 👍

Did you find this page helpful?