현재 부트캠프에서 만들었던 프로젝트를 리팩토링 하는 중이다.

결제 기능을 만들었는데, 단순 버튼 클릭으로 구현해서 아쉬움이 있었다.

 

그래서 무료로 제공하는 결제 api를 사용해서 공부해보려고 한다.


아임포트(I'mport)

- 현재는 포트원으로 이름이 바뀌었다

 

- PG사 결제모듈에 대한 연동 개발을 진행할 때, 다양한 개발환경에서 보다 쉽고 빠르게 개발할 수 있도록 제공되는 결제 플랫폼 혹은 결제 호스팅 서비스

 

https://developers.portone.io/opi/ko/integration/start/v1/auth?v=v2#request-payment

 

PG(Payment gateway)

- 온라인 쇼핑몰의 경우, PG사와의 계약을 통해 전자결제서비스를 구축해야만 거래가 가능

- PG사는 신용카드사와 직접 계약하기 어려운 온라인 쇼핑몰을 대신해 결제와 정산 업무를 대행해 주는 업체
- PG사와 계약을 하면, 카드결제, 휴대폰 결제, 계좌이체, 무통장입금 등 다양한 결제 수단을 쇼핑몰 방문 고객에게 제공

 

(출처)


구현

개발 환경

Spring Boot, java, maven

 

아임포트 계정 생성 

관리자 페이지

 

결제 연동 -> 연동 정보 -> API Keys

REST API Key, REST API SECRET 확인 

 

채널 관리 -> 테스트 -> 채널 추가

많이 선택하는 KG이니시스로 결정했다.

 

Spring 설정

공식 깃허브

 

pom.xml에 의존성 추가 

<repositories>
	<repository>
	    <id>jitpack.io</id>
	    <url>https://jitpack.io</url>
	</repository>
</repositories>
<dependencies>
	<dependency>
	    <groupId>com.github.iamport</groupId>
	    <artifactId>iamport-rest-client-java</artifactId>
	    <version>0.2.23</version>
	</dependency>
</dependencies>

 

PaymentController 

@RestController
@RequestMapping("/api/payment")
@Slf4j
public class PaymentController {

    private IamportClient iamportClient;

    @Value("${imp.apiKey}")
    private String apiKey;

    @Value("${imp.secretkey}")
    private String secretKey;

    @PostConstruct
    public void init() {
        this.iamportClient = new IamportClient(apiKey, secretKey);
    }
}

두 API KEY를 인자로 넘겨서 IamportClient 객체를 생성하면, 이 객체를 통해 iamport 함수들을 사용할 수 있다.

 

imp_uid : 고객사 식별코드

    @PostMapping("/validate/{imp_uid}")
    public IamportResponse<Payment> validateIamport(@PathVariable String imp_uid) throws IamportResponseException, IOException {
        IamportResponse<Payment> payment = iamportClient.paymentByImpUid(imp_uid);
        log.info("결제 요청 응답. 결제 내역 - 주문 번호: {}", payment.getResponse().getMerchantUid());
        return payment;
    }