- [셸위:게임 친구 매칭 사이트] 토스 페이먼츠 API - 서브몰 생성 기능2024년 09월 25일
- Song hyun
- 작성자
- 2024.09.25.오후07:17
728x90반응형[셸위:게임 친구 매칭 사이트] 토스 페이먼츠 API - 서브몰 생성 기능
이번에는 서브몰 생성 기능에 대해 이야기해보려고 한다. 지금은 Seller라고 이름이 바뀌었는데... 구현할 때까지만 해도 서브몰이었다. 내가 구현한 기능은 유저가 서브몰 생성 신청을 하면, 관리자 측에서 그 요청을 승인해서 Toss Payments API로 승인 요청을 던지는 기능이었다.
서브몰(=셀러)란 플랫폼에 입점한 하위 상점, 판매자와 같은 개념이다. 대금 지급 요청을 할 때 필요한데, 돈을 받을 사람의 정보를 담은 객체라고 생각하면 편할 것 같다. 우리가 은행어플로 돈을 보낼 때, 받는 사람의 계좌가 필요한 것처럼 말이다.
절차는 아래와 같다.
유저가 서브몰을 신청할 때,
(1) 현재 충분한 금액이 있는지
(2) 통장 계좌가 있는지 (계좌실명인증)
등을 (1) js, (2) DB상의 데이터를 통해 검증하게 되기 때문에, 서브몰 생성 신청에서는 큰 검증 걸차는 없다.
- DB에서 유저의 계좌 정보, 유저의 이름등 개인정보를 조회하고 취합해,
- 랜덤한 submallId를 생성해 객체를 만들어 DB에 저장한 다음,
- TossAPI에 전송하면 끝이다!
/** * 유저 정보를 통해 계좌 정보 조회 * @param userId * @return */ public BankDTO getBankInfoById(int userId) { return registerSubmallRepositroy.getBankInfo(userId); } /** * 새로운 서브몰 등록 * @return * @throws InterruptedException * @throws IOException */ public boolean makeNewSubmall(RegisterSubmall submall, User user, BankDTO bank) throws IOException, InterruptedException { // 서브몰 ID 생성 UUID uuid = UUID.randomUUID(); // 랜덤값 생성 String orderId = (String)(user.getUserId()+"_"+uuid); // 서브몰 ID 생성 String submallId = orderId.substring(0,19); // 서브몰 ID 20자리 제한 - 20번째에서 자르기 BankDTO bankInfo = bankService.getAccountByUserIdAndBankId(user.getUserId()); // 유저 명의의 bank 객체 찾기 // 서브몰 객체 생성 Submall newSubmall = Submall.builder().submallId(submallId) .accountId(bank.getBankId()) .email(user.getEmail()) .phoneNumber(user.getPhoneNumber()) .build(); // JSON 문자열을 직접 생성 String requestBody = String.format( "{\"subMallId\":\"%s\",\"account\":{\"bank\":\"%s\",\"accountNumber\":\"%s\",\"holderName\":\"%s\"}," + "\"type\":\"CORPORATE\",\"email\":\"%s\",\"phoneNumber\":\"%s\",\"companyName\":\"%s\"," + "\"representativeName\":\"%s\",\"businessNumber\":\"%s\"}", newSubmall.getSubmallId(), // 서브몰 ID bankInfo.getBankId(), // 은행 고유 코드 bankInfo.getAccountNumber(), // 계좌번호 user.getUsername(), // 계좌 주 newSubmall.getEmail(), // 이메일 newSubmall.getPhoneNumber(), // 전화번호 "셸위-게임 친구 매칭 사이트", // 회사명 user.getUsername(), // 대표명 "1200220000" // 사업자번호 ); // Http-POST 메세지 만들기 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.tosspayments.com/v1/payouts/sub-malls")) .header("Authorization", "Base64 인증키") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(requestBody)) .build(); // TOSS 서버에서 응답 받아오기 - 서브몰 등록 HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); // 응답 메세지 String 으로 변환 String result = response.toString(); // 결과가 정상적으로 반환되었다면 if(result != null || !result.contains("null")) { // 서브몰 객체 DB에 생성 submallRepository.addNewSubmall(newSubmall.submallId,user.getUserId(),newSubmall.accountId,newSubmall.email,newSubmall.phoneNumber); // 서브몰 신청내역 상태 변경 submallRepository.updateRegisterSubmallStatus(submall.id); return true; } else { return false; } }
728x90반응형'💡My project > 셸위 : 게임 친구 매칭 사이트' 카테고리의 다른 글
[셸위:게임 친구 매칭 사이트] 토스 페이먼츠 API - 서브몰 지급 정산 기능 (0) 2024.09.25 [셸위:게임 친구 매칭 사이트] 토스 페이먼츠 API - 잔액 조회 기능 (0) 2024.09.25 [셸위:게임 친구 매칭 사이트] 토스 페이먼츠 API - 결제 취소 기능 (0) 2024.09.25 [셸위:게임 친구 매칭 사이트] 카카오 페이 API - 결제 취소 기능 (5) 2024.09.25 [셸위:게임 친구 매칭 사이트] 카카오 페이 API - 결제 기능 (0) 2024.09.25 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)