2020import com .itextpdf .kernel .pdf .canvas .PdfCanvas ;
2121import com .itextpdf .layout .Document ;
2222import com .itextpdf .layout .element .Image ;
23- import org .springframework .cglib .core .Local ;
2423import org .springframework .http .HttpEntity ;
2524import org .springframework .http .HttpHeaders ;
2625import org .springframework .http .MediaType ;
@@ -526,11 +525,13 @@ public void refundProcess(final UserEntity userInfo, final RefundRequestDTO dto)
526525 // Nicepay 환불용 orderId 생성
527526 String refundOrderId = generatedRefundOrderId (orderItem .getOrder ().getId ());
528527
529- NicepayCancelResponseDTO res = nicepayCancel (
530- orderItem .getOrder ().getTid (),
531- refundPrice ,
532- refundOrderId ,
533- dto .getReason ());
528+ NicepayCancelResponseDTO res ;
529+
530+ if (refundPrice == possiblePrice )
531+ res = requestCancelToNicepay (orderItem .getOrder ().getTid (), refundOrderId , dto .getReason (), null );
532+ else
533+ res = requestCancelToNicepay (orderItem .getOrder ().getTid (), refundOrderId , dto .getReason (), refundPrice );
534+
534535
535536 if (res == null || !"0000" .equals (res .getResultCode ())) {
536537 String error = (res != null ) ? res .getResultMsg () : "환불 실패" ;
@@ -808,7 +809,7 @@ private String generatedRefundOrderId(final Long orderId) {
808809 return orderId + "-R-" + UUID .randomUUID ().toString ().substring (0 , 8 );
809810 }
810811
811- private NicepayCancelResponseDTO nicepayCancel (String tid , long cancelAmount , String refundOrderId , String reason ) {
812+ private NicepayCancelResponseDTO requestCancelToNicepay (String tid , String refundOrderId , String reason , Long cancelAmount ) {
812813 try {
813814 String ediDate = OffsetDateTime .now ().format (DateTimeFormatter .ISO_OFFSET_DATE_TIME );
814815 String signString = tid + ediDate + secretKey ;
@@ -817,13 +818,14 @@ private NicepayCancelResponseDTO nicepayCancel(String tid, long cancelAmount, St
817818 String auth = clientKey + ":" + secretKey ;
818819 String encodedKey = Base64 .getEncoder ().encodeToString (auth .getBytes (StandardCharsets .UTF_8 ));
819820
820- Map <String , Object > body = Map .of (
821- "reason" , reason ,
822- "orderId" , refundOrderId ,
823- "cancelAmt" , cancelAmount ,
824- "ediDate" , ediDate ,
825- "signData" , signData
826- );
821+ Map <String , Object > body = new HashMap <>();
822+ body .put ("reason" , reason );
823+ body .put ("orderId" , refundOrderId );
824+ body .put ("ediDate" , ediDate );
825+ body .put ("signData" , signData );
826+
827+ if (cancelAmount != null ) // 부분 취소
828+ body .put ("cancelAmount" , cancelAmount );
827829
828830 HttpHeaders headers = new HttpHeaders ();
829831 headers .setContentType (MediaType .APPLICATION_JSON );
@@ -839,7 +841,7 @@ private NicepayCancelResponseDTO nicepayCancel(String tid, long cancelAmount, St
839841 );
840842
841843 return res .getBody ();
842- } catch (Exception e ) {
844+ } catch (Exception e ) {
843845 log .error ("환불 API 오류 발생" , e );
844846 throw new RuntimeException ("나이스페이 환불 실패" , e );
845847 }
0 commit comments