ย ์ฌ์ฉ๋ฒ
ย ์๋ฒ์์ ์๋ฒ๋ก ์์ฒญํ๋ ๊ตฌ์กฐ
๊ฒฐ์ ๊ฐ ์๋ฃ๋๋ฉด ์์ฒญํ ์๋ฒ(์์ ์ ์๋ฒ)์ ๊ฒฐ์ ์๋ฃ ์๋ต์ด ๊ฐ์ ์์ ์ ํด๋ผ์ด์ธํธ์ ์๋ต
โข
(๋ด ํด๋ผ์ด์ธํธ) -๊ฒฐ์ ์์ฒญ(์ปค์คํ
)โ (๋ด ์๋ฒ) -๊ฒฐ์ ์์ฒญโ (ํผํผ ๊ฒฐ์ ์๋ฒ)
โข
(๋ด ํด๋ผ์ด์ธํธ) โ๊ฒฐ์ ์๋ฃ(์ปค์คํ
)- (๋ด ์๋ฒ) โ๊ฒฐ์ ์๋ฃโ (ํผํผ ๊ฒฐ์ ์๋ฒ)
ย API ๋ช ์ธ์
ย ์ฝ๋
ย OpenFeign
PlantifyPaymentServiceClient
@FeignClient(name = "plantify-payment-service", url = "${}")
public interface PlantifyPaymentServiceClient {
@PostMapping("/v1/pay/payment")
ResponseEntity<String> payment(@RequestBody TransactionRequest request);
@GetMapping("/v1/auth/users/seacrh")
ResponseEntity<Long> getUserId(@RequestParam String username);
@GetMapping("/v1/pay/settlements/external")
ResponseEntity<ExternalSettlementResponse> getSettlementByOrderId(@RequestParam String orderId)
}
Java
๋ณต์ฌ
ย DTO
TransactionRequest
public record TransactionRequest(
Long userId,
Long sellerId,
String orderName,
Long amount,
String redirectUri
) {
}
Java
๋ณต์ฌ
ExternalSettlementResponse
public record ExternalSettlementResponse(
String orderId,
String orderName,
LocalDateTime createdAt,
Long amount
)
Java
๋ณต์ฌ
ย Controller
์์
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1")
public class MyFundingUserController {
private final MyFundingUserService myFundingUserService;
@PostMapping("/payment")
public void payment(@RequestBody MyFundingUserRequest request, HttpServletResponse response) throws IOException {
String redirectUrl = myFundingUserService.payment(request);
response.sendRedirect(redirectUrl);
}
@GetMapping("/callback")
public ResponseEntity<MyFundingUserResponse> getMyFundingUserCallback(@RequestParam String orderId) {
MyFundingUserResponse response = myFundingUserService.callbackParticipate(orderId);
return ResponseEntity.ok(response);
}
}
Java
๋ณต์ฌ
ย Service
๊ฒฐ์ ๋ก์ง์ด ํ์ํ ์๋น์ค ๋ก์ง์ ์ถ๊ฐ
private final PlantifyPaymentServiceClient plantifyPaymentServiceClient;
Java
๋ณต์ฌ
Long userId = plantifyAuthServiceClient.getUserId(์ ์ ์ด๋ฆ).getBody();
TransactionRequest transactionRequest = new TransactionRequest(
userId,
2L,
๊ตฌ๋งคํ๋ ์ํ ์ด๋ฆ, // ์์
๊ตฌ๋งคํ๋ ์ํ ๊ฐ๊ฒฉ, // ์์
"redirect Url" // ์์
);
plantifyPaymentServiceClient.payment(transactionRequest);
Java
๋ณต์ฌ
์์ ์ด๋ผ๊ณ ์ ํ ๊ณณ์ ์ ์ธํ๊ณ ๋๋จธ์ง๋ ๊ณ ์
ExternalSettlementResponse response = payServiceClient.getSettlementByOrderId(orderId).getBody();
Java
๋ณต์ฌ
์์
@Service
@RequireArgsConstructor
public class MyFundingServiceImpl implements MyFundingUserService {
private final PlantifyPaymentServiceClient plantifyPaymentServiceClient;
@Override
@Transactional
public MyFundingResponse participate(MyfundingUserRequest request) {
...
TransactionRequest transactionRequest = new TransactionRequest(
userId,
2L,
funding.getTitle(), // ์์
request.price(), // ์์
"https://www.naver.com"
);
plantifyPaymentServiceClient.payment(transactionRequest);
...
}
@Override
public MyFundingUserResponse callbackParticipate(String orderId) {
ExternalSettlementResponse response = payServiceClient.getSettlementByOrderId(orderId).getBody();
...
MyFundingUserRequest request = new MyFundingUserRequest(funding.getFundingId(), response.amount());
...
}
}
Java
๋ณต์ฌ
ย ์ฃผ์
ย request์ userId(์ ์ ์์ด๋)๋ฅผ ๋ฃ์ด์ค์ผํจ
(ํ์) ์ ์ ์ด๋ฆ์ผ๋ก ๋จผ์ ์ ์ ์์ด๋ ๋ฐ๊ธฐ
ย ํ๋ํฐํ์ด ํ์ด๋ก ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ
โข
ํ๋ํฐํ์ด ์ ์ ๊ฐ ์๋
โข
ํ๋ํฐํ์ด ์ ์ ์ธ๋ฐ ํ์ด๊ฐ ์๋ ์ ์