22 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
별도로 현금영수증을 어떻게 발급 신청하고 계시는지 설명 부탁 드려요.
주문내역에서 일단 현금영수증 발급여부가 널인거는 신청버튼을 놓고 거기서 누르면 모달창이 떠서 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 뜨네요
저희가 요청을 특정할 수 있는 값도 주세요.
개발에서 주문번호가 240621163141-3 이거에요 그리고 건명은 7777 금액은 5280 이요
아까 테스트로 소득공제 그리고 번호는 01037670327로 넣었었어요
api로요 개발자센터에서 한게 아니구요
1) 요청에 대한 에러 응답은 {"code":"NOT_FOUND_MERCHANT","message":"존재하지 않는 상점 정보 입니다."} 이렇게 였습니다. 에러 code, messge 처리 잘 하셔야 할것 같고요
2) 지금 사용된 키는 무슨 키를 쓰신건가요?
시크릿키 개발용이요
어디에서 확인한 개발용 시크릿키요?
toss.secret.key=test_gsk_GjLJoQ1aVZYyJn94DNwg3w6KYe2R
API 키 | 토스페이먼츠 개발자센터
토스페이먼츠 결제 연동 문서, API, 키, 테스트 내역, 웹훅 등록 등 개발에 필요한 정보와 기능을 확인해 보세요. 결제 연동에 필요한 모든 개발자 도구를 제공해 드립니다.
지금 사이트 들어가보면
test_gsk_GjLJoQ1aVZYyJn94DNwg3w6KYe2R 이 키 좌측에
결제위젯 키라고 표시된 내용 보이시나요?
결제위젯 연동 키
API 개별 연동 키
아래에 검은 글씨로, 사용할 수 있는 제품에 대해 명시되어 있는데 보시겠어요?
예
아.... 그럼 개별로 할때는 api용 시크릿키를 써야되는건가요?
api 개별 인증키를 이용해서 해야되는군요?
네, API 개별연동키로 진행 해보시면 됩니다.
에고 그걸 몰랐네요 ^^ 감사합니다.
해보고 안되면 문의 드릴께요 감사합니다~
네 감사합니다
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
이번엔 400 bad request라고 나오네요 부장님
{"code":"DUPLICATED_CASH_RECEIPT","message":"이미 현금영수증이 발급된 주문입니다."}
주문번호 변경해서 다시 시도해보시겠어요
@조엘파파 님 에러 받으실때 응답의 body도 로그에 남겨주시기 바랍니다. 그러면 지금 유부장님이 전달주시는 에러 메시지를 직접 보실수 있습니다.
고맙습니다. 메세지 보면서 해결하였습니다.
👍