trainers
trainers
UNAUTHORIZED_KEY 에러 관련 확인 요청드립니다
결제위젯으로 브랜드페이 연동중입니다. access token 발급받았고 https://api.tosspayments.com/v1/brandpay/payments/confirm 요청을 보내는 상황입니다. 시크릿키는 결제위젯 시크릿키를 사용하였습니다. 응답 {"code":"UNAUTHORIZED_KEY","message":"인증되지 않은 시크릿 키 혹은 클라이언트 키 입니다."} 클라이언트키, 시크릿키 페어는 맞는 것을 확인하였습니다. 주문의 payment key : MKlA4XDvdYoEjb0gm23PNRadWbGzlWrpGwBJn5eya1RPQkx9
9 replies
next.js 에서 https://api.tosspayments.com/v1/brandpay/authorizations/customer-token 무한호출
안녕하세요 문제는 제목과 같구요. 저희 시스템 구성은 다음과 같습니다. 1. next.js 주소 : localhost:3000 2. node.js 로 돌아가는 백엔드 주소: localhost:8081 1 에서 결제위젯 호출을 하고 브랜드페이 연동을 하는 과정입니다. 브랜드페이 redirect url 은 1의 주소인 localhost:3000/cart/payment/brandpay-callback-auth 로 설정되어 있으며 여기서 getServerSideProps 를 사용하여 1 의 서버사이드에서 2로 access token 발급 요청을 하고 있습니다. 위 요청에 대한 응답은 따로 주고 있지 않습니다. 정확히는 2 에서 true 를 내려주지만 1에서 별다른 처리를 하지 않습니다. 2에서 확인해보니 access token 은 발급이 잘 되었으나 1에서 이를 인지하지 못하고 계속해서 https://api.tosspayments.com/v1/brandpay/authorizations/customer-token 를 호출하고 그 response 는 다음과 같습니다. {"status":"PENDING","customerToken":null,"expiresIn":null} 요청량이 초과될 때 까지 계속 요청을 보내고 멈춥니다. 도움 부탁드립니다.
18 replies
brandpay 연동 중 UNAUTHORIZED_KEY
현재 브랜드페이 사용 계약은 완료했고 카드사 심사 진행중인데요. 상점 테스트용 결제위젯 연동 키로 브랜드페이를 띄우고, 사용자가 카드를 등록하는 상황입니다. 백엔드에서 자동결제・API 연동 키 로 grandType authorizationCode 로 accessToken 을 요청하는데 계속해서 UNAUTHORIZED_KEY 에러가 발생합니다.
export async function requestBrandpayAccessToken(
param: RequestBrandpayAccessTokenQuery
): Promise<RequestBrandpayAccessTokenResponse> {
try {
logger.debug('param: ', { data: param });
logger.debug('header: ', { data: `Basic ${Buffer.from(SECRET_KEY + ':', 'utf8').toString('base64')}` });
const result = await axios.post(`https://${HOST_NAME}/v1/brandpay/authorizations/access-token`, {
data: param,
headers: {
Authorization: `Basic ${Buffer.from(SECRET_KEY + ':', 'utf8').toString('base64')}`,
'Content-Type': 'application/json',
},
});

const data = result.data as RequestBrandpayAccessTokenResponse;
return data;
} catch (err: any) {
if (err instanceof AxiosError) {
logger.error('axios error: ', { data: err });
}
throw new CustomError(err.response.data.code, { data: err });
}
}
export async function requestBrandpayAccessToken(
param: RequestBrandpayAccessTokenQuery
): Promise<RequestBrandpayAccessTokenResponse> {
try {
logger.debug('param: ', { data: param });
logger.debug('header: ', { data: `Basic ${Buffer.from(SECRET_KEY + ':', 'utf8').toString('base64')}` });
const result = await axios.post(`https://${HOST_NAME}/v1/brandpay/authorizations/access-token`, {
data: param,
headers: {
Authorization: `Basic ${Buffer.from(SECRET_KEY + ':', 'utf8').toString('base64')}`,
'Content-Type': 'application/json',
},
});

const data = result.data as RequestBrandpayAccessTokenResponse;
return data;
} catch (err: any) {
if (err instanceof AxiosError) {
logger.error('axios error: ', { data: err });
}
throw new CustomError(err.response.data.code, { data: err });
}
}
요청코드는 위와 같습니다. param 에는 {"grantType":"AuthorizationCode","customerKey":"trainers_zONnNzyHAhKwFt9nIF8KZ","code":"G57Eba3GxOQMmb7PEVpWDOxm"} 위와 같은 값이 들어갑니다.
25 replies