Payment 객체 method필드 nullable
안녕하세요 payment객체에서 method 값이 null로 조회되는 경우는 어떤 케이스인가요?
상점아이디 : encar02 / 주문아이디 : 23273979
20 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
상점아이디 : encar02 / 주문아이디 : 23150809
해당건 정상 결제 되지 않은 실패건 ABORTED 여서 method 정보가 없습니다. 정상 거래건을 참고해주시면 되겠습니다.
혹시 정상 결제 되지 않은 사유도 확인 가능할까요?
23150809 건은 고객이 입금도 진행한 것으로 보입니다
23273979 는 계좌 잔액부족으로 실패했구요.
23150809 도 오류 응답을 받았습니다.
{"code":"DUPLICATED_ORDER_ID","message":"이미 승인 및 취소가 진행된 중복된 주문번호 입니다. 다른 주문번호로 진행해주세요."}
orderId 로 결제조회 /v1/payments/orders/{orderId} 를 사용하고 계신 것 같은데,
orderId 말고 paymentKey 로 조회해주세요.
/v1/payments/{paymentKey}
답변 감사합니다.
제가 테스트로 승인요청 API 반복적으로 호출 했을때는 최초 신청된 method가 있는 payment객체가 나왔었는데 23150809건은 승인요청을 중복으로 했을때 method가 null로 나왔습니다. 혹시 23150809건은 제가 테스트한 것과 다른 케이스인가요?
네 마지막 정보로 조회되기도 하고, 주문번호는 동일 상점ID 내에서도 결제수단이 다르면 중복이 가능하기 때문에 유니크한 값인 paymentKey 로 조회해주시는게 정확합니다.
마지막으로 하나만 더 여쭤볼게요
상점아이디 : encar01 / orderId : 8363903 -> 테스트 환경에서 승인요청 10회 진행
이 건은 method가 가상계좌로 나옵니다 23150809건과 어떤 차이점이 있을까요?
23150809 는 2025.02.27 에 가상계좌 주문번호로 이미 사용하셨고, 오늘 재사용을 시도하셨던거고요.
8363903 는 사용한적이 없던 주문번호라서 응답이 다르게 나온겁니다.
이와 같은 상황이 발생하기 때문에 위에 설명드린 내용처럼 paymentKey 로 조회해주시는게 정확한 정보를 확인하실 수 있습니다.
넵 paymentKey로 조회하는 것으로 변경하는 것 고려해보겠습니다.
23150809와 같은 응답을 받을 수 있게끔 테스트환경에서 재현해보려면 어떤 절차로 진행해야 할까요?
이미 결제발생한 주문번호를 재사용하시면 될 것 같네요
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
혹시 '재사용'이 어떤 방식일까요?
테스트로 가상계좌 결제 승인 -> 입금처리 -> 가상계좌 결제 승인 시도했을때
{ "message": "이미 처리된 결제 입니다.", "code": "ALREADY_PROCESSED_PAYMENT" } 응답을 받았습니다. 그리고 v1/payments/orders/{orderId}를 사용하니 "method": "가상계좌", "status": "DONE", 으로 되어있습니다. 저는 '재사용'이 결제완료 후 결제 승인 API 호출 이라고 생각했는데 혹시 다른 방식인건가요? '23150809 는 2025.02.27 에 가상계좌 주문번호로 이미 사용하셨고, 오늘 재사용을 시도하셨던거고요.' 답변 주신 내용에서 제가 오늘 호출한 API는 조회만 했던것 같아서요.. 테스트 및 재현 하려는데 '재사용'이 정확히 어떤 방식인지 이해가 가질 않습니다 😢
{ "message": "이미 처리된 결제 입니다.", "code": "ALREADY_PROCESSED_PAYMENT" } 응답을 받았습니다. 그리고 v1/payments/orders/{orderId}를 사용하니 "method": "가상계좌", "status": "DONE", 으로 되어있습니다. 저는 '재사용'이 결제완료 후 결제 승인 API 호출 이라고 생각했는데 혹시 다른 방식인건가요? '23150809 는 2025.02.27 에 가상계좌 주문번호로 이미 사용하셨고, 오늘 재사용을 시도하셨던거고요.' 답변 주신 내용에서 제가 오늘 호출한 API는 조회만 했던것 같아서요.. 테스트 및 재현 하려는데 '재사용'이 정확히 어떤 방식인지 이해가 가질 않습니다 😢
굳이.. 안되는 상황을 다시 재현하시려는 이유가 있을까요?
재사용은 를 말씀드렸습니다.
2월27일에 결제성공으로 이미 사용된 주문번호인데, 오늘 주문번호로 조회하기 이전에 해당 주문번호로 결제 시도가 있었을 것으로 예상됩니다.
그래서 이번에 주문번호로 조회했을 때 위 케이스가 나왔을겁니다.
로그는 찾아보는 중인데 기간이 길어서 조회가 오래걸리는지 잘 안나오네요.
재현하려는 이유는 원인파악 및 재발방지에 있습니다.
paymentKey를 사용하면 괜찮을 거라 하시니 재발방지는 조회 API를 paymentKey로 사용하면 될 것 같은데, 원인파악은 하지 못해서 재현하려했습니다.
네넵. 이해했습니다.
로그 검색 중이라서 조금 더 찾아볼게요 잠시만요.
가상계좌군요
2/27에 가상계좌 발급 (가상계좌 만료일시: 2/27까지) 하셨고, 당시에 WAITING_FOR_DEPOSIT 이었다가 dueDate가 지나서 만료되었습니다.
그리고 시일이 지나서 조회를 했고 해당건 상태가 ABORTED 로 바뀌었습니다.
이런 케이스도 발생하게 되는군요.
혹시 고객이 입금한건 맞나요?
네 입금 후 취소는 하셨는데, 상황이 많이 꼬여있네요.
천천히 설명 드려볼게요
2/27 에 주문번호 23150809 로
- 결제창 호출하여 가상계좌를 발급 받았고, (paymentKey: encar20250227195952AxRC6)
- 중간중간 주문번호 조회 API 가 호출이 보입니다. 이때 주문번호 조회 API 호출 상태값이 WAITING_FOR_DEPOSIT
- 그런데 동시간대에 동일한 주문번호로 결제요청이 한번 더 있었고, 이 때 주문조회 API 를 호출상태값은 IN_PROGRESS (아직 인증완료 전을 의미합니다.)
- 2번째 요청에 대한 응답이 paymentKey: encar20250227200816rskP3 와 함께 응답이 {"code":"DUPLICATED_ORDER_ID","message":"이미 승인 및 취소가 진행된 중복된 주문번호 입니다. 다른 주문번호로 진행해주세요."} 가 나갔습니다.
가상계좌는 발급이 되었고, 발급 후 10분 정도 후에 사용자는 입금을 하고, 다음날 (2/28) 취소요청이 있었고, 실제 환불은 3/5 에 완료되었습니다.
아직 결제가 완료(또는 가상계좌가 발급 완료)되지 않은 상태로 주문번호가 중복해서 요청이 들어오게 되고,
서로 다른 paymentKey 로 한건은 성공, 다른 한건은 당연히 중복사용으로 실패 처리가 되는데,
동일한 주문번호이다보니 주문번호로 조회시 가장 최근 데이터를 보여주는 상황이 발생하게 되었습니다.
즉, 오늘 23150809 로 조회하실 때 encar20250227195952AxRC6 의 내역을 기대하고 조회를 진행하셨겠지만,
실제로는 encar20250227200816rskP3 의 결과값을 조회하게 되었습니다.
자세한 답변 감사합니다.
업무에 참고하겠습니다🙇♂️
네 수고하세요.