결제위젯 에러
https://docs.tosspayments.com/guides/payment-widget/integration#1-결제위젯-그리기
이 부분 진행 중인데 아래와 같은 에러가 나면서 결제위젯이 그려지지 않습니다. 원인을 알 수 있을까요? 😉
TypeError: Cannot read properties of undefined (reading 'customerKey')
결제위젯 연동하기 | 토스페이먼츠 개발자센터
토스페이먼츠 결제위젯 연동 가이드입니다. 내 상점의 주문서 페이지에 최적의 주문서 UI를 연동하세요. 결제 연동하기 가장 편리한 로우코드(Low-code) 솔루션입니다.
31 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
render하는 부분 소스코드 올려주시겠어요?
저희가보내드린 에러는 아니고 코드상 에러가 발생하는 것 같네요
리액트 코드 그대로 사용해봤다가 안돼서 현재 html 코드로 테스트 해본 상태입니다. 둘 다 같은 에러 발생 했습니다(customerKey)
현재 사용한 코드 입니다!
1. index.html 에 <!-- 결제위젯 SDK 추가 --> <script src="https://js.tosspayments.com/v1/payment-widget"></script>
2. TossPayment.js 파일 생성
export default function TossPayment(props) {
const { price, successUrl, failUrl, TOSS_CLIENT_KEY, customerId } = props;
useEffect(() => {
const script = document.createElement("script");
const scriptText = document.createTextNode(
const paymentWidget = PaymentWidget("${TOSS_CLIENT_KEY}", "${customerId}")
paymentWidget.renderPaymentMethods(
"#payment-method",
{ value: ${price} },
{ variantKey: "DEFAULT" } // 렌더링하고 싶은 결제 UI의 variantKey
)
paymentWidget.renderAgreement('#agreement')
);
script.appendChild(scriptText);
document.body.appendChild(script);
}, []);
return (
<>
<div id="payment-method"></div>
<div id="agreement"></div>
</>
);
}
3. 사용하고자하는 js 파일에 import 후 사용
import TossPayment from "../../Components/Page/TossPayment";
// 자체 서버에서 TOSS_CLIENT_KEY, customerId 등 받아옵니다
const getTossKey = async () => {
await API.get("/toss/request-data")
.then((res) => {
if (res.data.status) {
console.log(res.data);
setTossValues(res.data.results);
setIsLoadedTossData(true);
}
})
.catch(function (error) {});
};
// 컴포넌트 호출
{isLoadedTossData && (
<TossPayment
price={intRechargePoint}
TOSS_CLIENT_KEY={tossValues.TOSS_CLIENT_KEY}
customerId={tossValues.customerId}
/>
)}1. index.html 에
2. TossPayment.js 파일 생성
3. 사용하고자하는 js 파일에 import 후 사용
위에 남겨주신 코드 단순히 코드 블럭으로 감쌌습니다.
@adorable_unicorn_02081 npm으로 설치해서 해보시겠어요?
npm 으로 설치해서 진행한 코드도 공유드릴까요 ?
동일한 에러 발생했었습니다
네 공유주시면 확인에 도움이 될 것 같습니다.
혹시 사용하시는 clientkey 도 공유해 주실수 있을까요?
@adorable_unicorn_02081
코드 공유 드립니다
1. TossPaymentWidget.tsx 파일 생성 (파일첨부)
2. import 후 사용
import TossPaymentWidget from "../../Components/Page/TossPaymentWidget.tsx"; <TossPaymentWidget price={intRechargePoint} />
---
사용하는 clientkey는 16자리 정도의 숫자(string)를 사용하다가 임의의 문자조합으로도 테스트해봤는데 동일한 에러 계속 발생했습니다!
콘솔에 찍히는 경고 또는 에러코드도 첨부드립니다
(경고)payment-widget:1 [Deprecation] Listener added for a synchronous 'DOMNodeRemovedFromDocument' DOM Mutation Event. This event type is deprecated (https://w3c.github.io/uievents/#legacy-event-types) and work is underway to remove it from this browser. Usage of this event listener will cause performance issues today, and represents a risk of future incompatibility. Consider using MutationObserver instead.
(경고)2DevTools failed to load source map: Could not load content for https://static.toss.im/tds/43.3.2/css/tds.min.css.map: HTTP error: status code 403, net::ERR_HTTP_RESPONSE_CODE_FAILURE
(에러)TypeError: Cannot read properties of undefined (reading 'customerKey')
at h (agreement-630e03e38ab0ad39.js:1:987)
at ab (framework-eda8b9c7d07b8e2d.js:9:60868)
at i (framework-eda8b9c7d07b8e2d.js:9:119408)
at oO (framework-eda8b9c7d07b8e2d.js:9:99057)
at framework-eda8b9c7d07b8e2d.js:9:98924
at oF (framework-eda8b9c7d07b8e2d.js:9:98931)
at ox (framework-eda8b9c7d07b8e2d.js:9:95683)
at oS (framework-eda8b9c7d07b8e2d.js:9:94238)
at x (framework-eda8b9c7d07b8e2d.js:33:1364)
at T (framework-eda8b9c7d07b8e2d.js:33:1894)
at Vo.pt.<computed> (index.js:1:44277)
at $o (index.js:1:44025)
at og (index.js:1:44087)
렌더 하시는 시점에 tossValues.customerId! 가 어떤 값으로 찍히는지 알수 있을까요?
737501012345678 으로 찍히고 type은 string 입니다!
제가 NPM 없는 상태(처음에 공유주신 코드) 로 테스트 했을때 문제없이 잘보입니다.
App.js
이렇게 두파일 받아서 해보실수 있을까요?
import Payment from "./components/UI/Payments"; 이 부분에 TossPayment 있는 경로로 대체해서 해보면 되는걸까요??
계속 동일한 에러가 나오긴해요...ㅠ
아뇨 아래 payments.js 파일도 전달드렸습니다.
이걸로 경로만 맞춰서 해주세요.
동일한 에러입니다

혹시 해당 서버를 저희가 접속해 볼수는 없을까요?
잘 뜨는거 아닌가요?

결제 버튼은 연동을 안하신것 같긴한데 위젯은 정상적으로 렌더링되는것으로 보입니다.
현재 제 컴퓨터 크롬에서는 첨부 이미지와 같은 상태+에러가 나고 있고
제 컴퓨터 사파리와 다른 팀원 컴퓨터에선 정상적으로 뜨는 것 확인했습니다
브라우저에 문제가.. 있는걸까요...? ㅠㅠ

저도 확인 했는데 문제 없이 위젯 뜨는것으로 보입니다 (아직 결제창 띄우기는 구현 안하신 것으로 보이네요, 결제하기 하면 바로 다른 창으로 넘어가네요)
네 위젯 뜨는것부터 문제가 있어서 그 후에 과정들은 구현하지 않은 상태입니다..
우선 저희 측 에서는 잘 뜨는 것으로 보여서..
안 뜨는 환경에 뭔가 다른것이 있는지 확인 해보셔야 할것 같습니다.
네... 감도 안 오긴하는데 이런 문제가 있었던 분들은 없었던걸까요..?
특정 환경에서 안뜨는 건 말 그대로 천차만별이라.. 말씀 드리기 쉽지 않네요
해당 브라우저 캐시 초기화, 설치되어 있는 익스텐션 확인 등등을 해보시는 것으로 보통 말씀 드리게 되는것 같습니다.
캐시 초기화는 해봤고.. 익스텐션 한 번 더 확인해보겠습니다 .
답변 감사합니다!
특정 PC 에서만 안된다면 크롬 익스텐션이 있는지 확인부탁드릴께요.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.