최근 결제연동 서비스로 인기를 얻고 있는 아임포트는 결제연동 뿐만 아니라 계좌인증 api도 제공합니다.
현재 프로젝트에서는 수익 정산 기능을 위한 계좌의 진위여부를 파악하기 위해 아임포트의 계좌인증 api를 사용하고 있습니다.
구체적인 스펙은 아임포트 api 문서의 GET /vbanks/holder
를 참고하시면 됩니다.
다음은 api 사용 시 주의사항 및 코드 샘플입니다.
계좌조회 api의 경우 요청 전에 먼저 access_token을 발급받아야하는데, POST /users/getToken
에 api키와 api 시크릿을 전달하면 됩니다.
async function authenticate() {
return axios.post(
`${config.iamport.apiBaseUrl}/users/getToken`,
{
imp_key: config.iamport.impKey,
imp_secret: config.iamport.impSecret,
},
);
}
위와 같이 요청을 보내면,
{
"code": 0,
"message": "string",
"response": {
"access_token": "string",
"expired_at": 0,
"now": 0
}
}
와 같은 응답을 받을 수 있습니다. 우리는 access_token을 얻어서 GET /vbanks/holder
요청을 할 때 넘겨주면 됩니다.
다음은 checkBankHolder
함수입니다.
async function checkBankHolder(
accessToken,
{ bankCode, bankAccountNumber },
) {
// get 요청이므로 querystring으로 넘겨준다.
const query = querystring.stringify({
bank_code: bankCode,
bank_num: bankAccountNumber,
});
return axios.get(
`${config.iamport.apiBaseUrl}/vbanks/holder?${query}`,
{
headers: {
Authorization: `Bearer ${accessToken}`, // 인증 요청이므로 헤더에 토큰을 넘겨준다.
},
},
).catch((error) => {
/**
* handling iamport error
*/
const clientErrors = [400, 404];
// 400, 404 에러는 유저가 값을 누락한 경우이므로 다른 에러 클래스로 처리한다.
if (clientErrors.includes(error.response.status)) {
throw new ApiError(error.response.data.message, 400);
}
throw new ApiError('iamport api 에러');
});
}
몇 가지 주의할 점은 axios를 통해 요청을 할 때 Authorization
헤더를 사용해서 토큰을 넘겨줘야한다는 것과 인증 요청을 하기 전에 access_token을 발급받아야한다는 점입니다.
계좌 인증 혹은 가상 계좌의 진위 여부를 파악할 필요가 있다면 아임포트 서비스를 이용해보는 것도 좋을 것 같습니다.
서비스에 아임포트를 사용하면서 개인적으로 느낀 점은
어쩌다보니 아임포트 찬양으로 끝나긴 했습니다만 협찬을 받지는 않았습니다. 😅
덕분에 계좌 인증 구현 잘 마쳤습니다 :)