iamport
- pg란 PaymentGateway의 약자이며, 온라인상으로 결제대행을 해주는 서비스
- import는 그런 pg서비스를 제공하며 결제 기능 사용을 위한 api를 제공
- import가 결제를 대행하기 때문에 직접 카드사와 소통할 필요가 없다.
- 일반결제, 정기결제, 결제환불 기능을 제공하며, Rest API를 이용한다.
RRES API ACCESS TOKEN
- 결제 정보와 같은 사적 리소스에 접근권한을 얻으려면, 가맹점은 accesstoken을 발급받아서 아임포트 REST API요청에 포함해야 하며 토큰 발급은 서버사이드에서 진행되어야 한다.
사용예시
- 반드시 imp_key 와 imp_secret 는 환경변수 파일에 저장해야한다.(보안)
async getAccessToken() {
try {
const getToken = await axios({
url: 'https://api.iamport.kr/users/getToken',
method: 'post', // POST method
headers: { 'Content-Type': 'application/json' }, // "Content-Type": "application/json"
data: {
imp_key: process.env.IAMPORT_APIKEY, // REST API키
imp_secret: process.env.IAMPORT_APISECRET,
},
});
const { access_token } = getToken.data.response;
return access_token;
} catch (error) {
console.log(error);
}
}
async inquiryPaymentDetails({ imp_uid, access_token }) {
// imp_uid로 아임포트 서버에서 결제 정보 조회
try {
const getPaymentData = await axios({
url: `https://api.iamport.kr/payments/${imp_uid}`, // imp_uid 전달
method: 'get', // GET method
headers: { Authorization: access_token }, // 인증 토큰 Authorization header에 추가
});
const paymentData = getPaymentData.data.response; // 조회한 결제 정보
return paymentData;
} catch (error) {
console.log(error);
}
}
async cancelPayment({ impUid, accessToken, reason, amount, checksum }) {
try {
// imp_uid로 아임포트 서버에서 결제 취소 요청
const getCancelData = await axios({
url: 'https://api.iamport.kr/payments/cancel',
method: 'post',
headers: {
'Content-Type': 'application/json',
Authorization: accessToken, // 아임포트 서버로부터 발급받은 엑세스 토큰
},
data: {
reason, // 가맹점 클라이언트로부터 받은 환불사유
imp_uid: impUid, // imp_uid를 환불 `unique key`로 입력
amount: amount, // 가맹점 클라이언트로부터 받은 환불금액
checksum: checksum, // [권장] 환불 가능 금액 입력
},
});
console.log(getCancelData.data);
return getCancelData.data; // 환불 결과
} catch (error) {
console.log(error);
}
}
Iamport 간단 결제 시스템 flow
- 클라이언트에서 직접 iamport 결제 시스템을 호출
- 호출된 결과를 클라이언트에서 im_Uid와 결제된 금액을 매개변수로 서버에 api요청
- 서버단에서 iamport 토큰 발급 후 해당 im_Uid와 토큰을 이용하여 결제 내역 검증
- 검증된 내용을 DB에 저장