진지한사람
진지한사람13mo ago

자동결제 시 catch 부분이 작동하지 않습니다.

"@tosspayments/payment-sdk": "^1.7.0",
"@tosspayments/payment-sdk": "^1.7.0",
현재 테스트 단계입니다. 리액트를 사용중이고 해당 함수는 컴포넌트 바깥에서 선언하여 컴포넌트 내부 버튼을 누를 시 작동하도록 설계했습니다.
const loadPayment = async (userId: string) => {
const tossPayments = await loadTossPayments(clientKey);

tossPayments
.requestBillingAuth('카드', {
customerKey: userId,
successUrl: `${clientUrl}/credit/purchase?result=success`,
failUrl: `${clientUrl}/credit/purchase?result=fail`,
})
.catch((error: any) => {
// 여기서 사용자가 결제창을 닫았거나, 기타 오류를 처리합니다.
if (error.code === 'USER_CANCEL') {
// 사용자가 결제창을 닫은 경우의 처리 로직
alert('결제창이 닫혔습니다.');
}
});
};
const loadPayment = async (userId: string) => {
const tossPayments = await loadTossPayments(clientKey);

tossPayments
.requestBillingAuth('카드', {
customerKey: userId,
successUrl: `${clientUrl}/credit/purchase?result=success`,
failUrl: `${clientUrl}/credit/purchase?result=fail`,
})
.catch((error: any) => {
// 여기서 사용자가 결제창을 닫았거나, 기타 오류를 처리합니다.
if (error.code === 'USER_CANCEL') {
// 사용자가 결제창을 닫은 경우의 처리 로직
alert('결제창이 닫혔습니다.');
}
});
};
iframe으로 렌더 된 UI 에서 카드 등록 성공 시 successUrl로 잘 이동 되지만, 닫기 버튼을 눌렀을 때 해당 화면에서 리로드 되기만 합니다. (iframe 내부에서인듯) catch 블록에서 cancelPayments를 실행해보려고 시도했으나 error가 해당 catch에서 잡히질 않습니다. 다만, 크롬 개발자 도구에 콘솔은 출력이 됩니다.
{
"code": "4246",
"message": "이미 결제가 완료되었습니다.",
"data": {
"bypassMessage": true
}
}
{
"code": "4246",
"message": "이미 결제가 완료되었습니다.",
"data": {
"bypassMessage": true
}
}
requestPayments 메서드를 사용했을 땐 catch가 잘 작동하는데 제가 뭘 놓친걸까요??
No description
12 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
유부장
유부장13mo ago
빌링 결제창은 promise 지원 하지 않습니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
진지한사람
진지한사람OP13mo ago
해당 화면에서 닫기 버튼을 클릭시 iframe이 계속 리로드 되는 상황입니다. 해당 iframe을 닫을 수 없어 새로고침해야 하는 상황인데 이벤트 감지를 할 수 없는걸까요??
유부장
유부장13mo ago
promise 지원하지 않기 때문에, succesUrl 로 이동 되면 저 화면은 이제 보지 않게 되실것 같은데 그럼에도 이벤트가 필요하실까요? 닫기 버튼이라 함은, 아무것도 수행하지 않고 뭔가 다른 액션을 수행 했다는 의미 이실까요?
진지한사람
진지한사람OP13mo ago
아무런 액션 없이 해당 화면에서 x 버튼을 눌렀을 경우였습니다. 일시적인 오류가 발생했습니다. 이미 결제가 완료되었습니다 라는 UI가 렌더 됩니다 (iframe 내부) 개발자 도구 Elements 탭에서 UI를 확인해보니 `html` <a class="p-button p-button--default p-button--inline p-button--fill p-button--default padding--base" aria-disabled="false" href="/pc/cancel?paymentMethod=CARD&amp;token=a0dd22f2f4ff41d6ad4caf7d2c2e3be4e8efb64948a947ab8a03029aa1a37922&amp;gtid=">닫기</a> 닫기 버튼에 href가 해당 UI 페이지 url를 가리키고 있어 iframe이 닫히지 않고 계속 같은 UI가 렌더되는 것 같습니다. 저는 금방 공유드린 UI에서 x 버튼을 눌렀을 때 iframe이 닫히도록 구현하고싶었습니다.
No description
유부장
유부장13mo ago
음 구현하신 방법을 조금 더 자세히 알아야 제가 재현을 해볼수 있을것 같습니다. 저는 html header 에 script 추가해서 빌링창 호출하고 있는데, X 버튼 누르면 그냥 닫힙니다. 1) jsSDK 추가는 어떻게 하고 있으신가요? html header 에 script 추가 인가요? 아니면 다른 방식을 사용하고 있으신가요? 2) 혹 창 호출은 frame 또는 iframe 태그 위에서 수행하고 있으신가요? 상황 확인 했습니다. 테스트키로 진행 했을때 재현완료 했습니다. 이 내용은 내부팀에 전달 하도록 하겠습니다 라이브키로 했을때는 X 버튼 동작 문제없이 진행되는 것으로 보여서 라이브키로 X 버튼 액션 한번 수행 해보시겠어요? 테스트 환경에서도 X 버튼 동작 하도록 핫픽스 배포 했습니다. 확인 해보시고 문제 있으시면 말씀 주세요!
진지한사람
진지한사람OP13mo ago
아 지금 확인하니 수정 된 부분 적용되어 해결됐습니다! 테스트 클라이언트 키로 진행하고 @tosspayments/payment-sdk 을 설치한 상태로 진행했었습니다. 감사합니다!
Jacob Kim
Jacob Kim13mo ago
저는 아직도 테스트 환경에서 동일한 오류가 납니다. @tosspayments/payment-sdk 1.7.0 버전 사용중입니다.
이실장
이실장13mo ago
확인 후 안내드리겠습니다. 어떤 에러창 발생 중일까요?
유부장
유부장13mo ago
@Jacob Kim 다시 확인 부탁 드립니다.
Jacob Kim
Jacob Kim12mo ago
디스코드가 익숙치 않아 답변이 늦었습니다. 지금은 테스트 환경에서도 잘 동작합니다.

Did you find this page helpful?