Skip to content

Commit

Permalink
feat: 카카오페이로 포인트 충전하기
Browse files Browse the repository at this point in the history
  • Loading branch information
GimHaLim committed Jul 31, 2024
1 parent a6ad63d commit 6c36758
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 4 deletions.
11 changes: 11 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ dependencies {

// reset password
implementation 'org.springframework.boot:spring-boot-starter-mail'

// kakao pay (test)
implementation 'com.github.iamport:iamport-rest-client-java:0.2.21'
}

repositories {
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.soongsil.poppin.user.application;

import com.siot.IamportRestClient.IamportClient;
import com.siot.IamportRestClient.exception.IamportResponseException;
import com.siot.IamportRestClient.response.IamportResponse;
import com.siot.IamportRestClient.response.Payment;
import com.soongsil.poppin.global.response.ErrorCode;
import com.soongsil.poppin.user.application.exception.UserException;
import com.soongsil.poppin.user.application.response.PaymentDto;
import com.soongsil.poppin.user.domain.Member;
import com.soongsil.poppin.user.domain.UserRepository;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;

@Service
@Transactional
@Log4j2
public class PaymentService {
private final IamportClient iamportClient;
private final UserRepository userRepository;

public PaymentService(UserRepository userRepository) {
this.userRepository = userRepository;
this.iamportClient = new IamportClient("8754401450070487", "oU0hOQPSSuFLK6qSfLZZRrprvF3pqz3K0OOniDSvrS58RfR6sPFZnhXhVt7Av9AVPtPqItaiuL43BLR1");
}

public PaymentDto verifyPayment(String imp_uid) throws IamportResponseException, IOException {
IamportResponse<Payment> iamportResponse = iamportClient.paymentByImpUid(imp_uid); // 결제 검증 시작
Long amount = (iamportResponse.getResponse().getAmount()).longValue(); // 결제 금액
String nickname = iamportResponse.getResponse().getBuyerName(); // 유저 닉네임
String status = iamportResponse.getResponse().getStatus(); // Paid 이면 1

Member result = userRepository.findBynickName(nickname);
if (result == null) {
throw new UserException(ErrorCode.USER_NOT_FOUND);
}

Long newPoint = result.getPoint() + amount;
result.setPoint(newPoint);

userRepository.save(result);

PaymentDto paymentDto = PaymentDto.builder()
.impuid(imp_uid)
.amount(newPoint)
.nickname(nickname)
.status(amount + "포인트가 충전되었습니다.")
.build();

return paymentDto;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.soongsil.poppin.user.application.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@AllArgsConstructor
@Getter
@Setter
@Builder
public class PaymentDto {
private String impuid; // 거래 고유 번호
private String nickname; // 사용자 닉네임
private String status; // 결제 여부 paid = 1, 그 외 실패
private Long amount; // 결제 금액
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.soongsil.poppin.user.presentation;

import com.siot.IamportRestClient.exception.IamportResponseException;
import com.soongsil.poppin.global.response.ResponseDto;
import com.soongsil.poppin.user.application.MemberService;
import com.soongsil.poppin.user.application.response.ChargePointDto;
import com.soongsil.poppin.user.application.response.JWTUtil;
import com.soongsil.poppin.user.application.response.MypageDto;
import com.soongsil.poppin.user.application.response.UserDto;
import com.soongsil.poppin.user.application.PaymentService;
import com.soongsil.poppin.user.application.response.*;
import com.soongsil.poppin.user.domain.Member;
import com.soongsil.poppin.userchat.application.response.JoinUserChat;
import lombok.RequiredArgsConstructor;
Expand All @@ -14,13 +13,15 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.Map;

@RestController
@RequiredArgsConstructor
@Log4j2
public class MypageController {
private final MemberService memberService;
private final PaymentService paymentService;

@GetMapping("/v1/user/kakao")
public Map<String, Object> getMemberFromKakao(String accessToken) {
Expand Down Expand Up @@ -53,6 +54,13 @@ public ResponseEntity<Long> chargePoint(@RequestBody ChargePointDto chargePointD
return ResponseEntity.ok(newPoint);
}

@ResponseBody
@RequestMapping("/v1/verify/{imp_uid}")
public PaymentDto paymentByImpUid(@PathVariable("imp_uid") String imp_uid)
throws IamportResponseException, IOException {
return paymentService.verifyPayment(imp_uid); // 결제 및 검증 DB 값 삽입
}

@PostMapping("/v1/user/modify-password")
public ResponseEntity<String> modifyPassword(@RequestBody String userId) {
try {
Expand Down

0 comments on commit 6c36758

Please sign in to comment.