브랜드페이 문의
테스트로 일반결제는 연동 확인이 되어서 부여받은 MID로 브랜드페이 추가했는데 "오류가 발생했습니다. 등록할 수 있는 결제수단이 존재하지 않습니다" 라고 노출됩니다
111 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
테스트한 mid나 주문번호 공유해주세요.
브랜드페이 MID : cp_hubasezil3
다시 확인해보시겠어요?
그리고 브랜드페이 연동을 위해서는 아래 가이드 참고 부탁드려요.
https://docs.tosspayments.com/guides/v2/payment-widget/integration-brandpay
브랜드페이 연동하기 | 토스페이먼츠 개발자센터
결제위젯으로 편리하게 브랜드페이를 연동하세요. 브랜드페이는 자체 간편결제 시스템을 구축하는 결제 서비스예요.
정상작동 확인했습니다. 감사합니다. 위에 MID 말고 3개 더 있는대 이것도 확인부탁드립니다.
cp_hubase01, cp_hubase02, cp_hubase03
모두 확인 부타귿려요.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
카드등록이 안되네요... 카드정보 넣어서 진행하면 'customerToken이 존재하지 않습니다' 라고 나옵니다
- redirectUrl이 등록되었는지
- redirectUrl에서 token발급 api는 호출하고 있는지 확이냏주세요
redirectUrl 등록 되어있고 이미지에 redirectUrl에 등록되어있는 url 넣어줬습니다. customerKey는 예시에 있는대로 넣어줬습니다

현재도 'customerToken이 존재하지 않습니다' 라고 나오네요
redirectUrl 어떻게 구현하셨는지도 보여주시겠어요
access token 발급 부분.

Authorization Base64 인코딩
어떤 키로 하셨어요?
브랜드페이 MID에 있는 시크릿키로 해야되는건가요?

아니요
지

지금 clinetKey가 docs에 공개된 키인데요
이걸로 브랜드페이 사용이 안될텐데요?
clinetKey사용한 위젯키랑 매핑된 위젯시크릿키 사용해주시면되요
const clientKey = "test_gck_Poxy1XQL8Rg0YjegPBgk37nO5Wml"; 키 이거 쓰고있습니다
{"code":"NOT_REGISTERED_REDIRECT_URL","message":"리다이렉트 URL이 등록되지 않았습니다. 개발정보 페이지에서 등록해주세요."}
에러 발생중인데 상점관리자-개발자 센터에서 리다이렉트 URL 등록 하셨을까요?
리다이렉트 URL 등록하셨군요.
아직 에러 발생중인가요?
네 등록은 정상으로 되었고 10분후에 테스트 하니 정상적으로 되는데 다른 오류가 발생했습니다
오류가 발생했습니다
[BRIDGE] Request Timeout. id: X0u2Qlkkm92RxEJgTvSrQ, type: TOSSPAYMENTSREQUEST_RESPONSE, body: {"step":"TOSSPAYMENTSREQUEST","requestName":"GET_PARAMETER","payload":{"name":"customerToken"}}
등록한 리다이렉트URL(/shop/brandpay) 페이지는 로그인이 필수로 걸려있는데 이 부분 확인 부탁드려요.
로그인 부분 제거 해도 같은 오류상태입니다
Request Timeout 이 되는 것으로 보아 콘솔에 에러가 있을것 같은데요.
캡쳐해서 공유해주실수 있을까요?
code: JXmgo28eEZ7eGW1Ggj8LAnGK<br>customerKey: MC4wOTI2OTUzNDY1NTM5실패: {code: "INVALID_REQUEST", message: "잘못된 요청입니다."}
code
:
"INVALID_REQUEST"
message
:
"잘못된 요청입니다."
token 요청하실때
"{"grantType":"AuthorizationCode","customerKey":"MC4wOTI2OTUzNDY1NTM5"
이런식으로 json 을 " 로 감싸시는것으로 보이는데
이거 빼보세요.
body 가 { 으로 시작해야 합니다.
오네! 진행됩니다 감사합니다
네 감사합니다.
브랜드페이에 카드를 추가한 후 바로는 추가된 카드가 보이고 결제 테스트가 가능한대요 새로고침을 하면 등록된 카드가 없어지는데 추가된 카드를 유지하려면 어떻게 해야되는걸까요?
영상으로 찍어서 올려주실수 있을까요?
카드 추가된 화면입니다. 비번까지 완료된 화면

페이지에서 새로고침을 하면 추가된 카드가 없어져버립니다

customerKey는 동일하시죠?
영상으로 올려주시고 customerkey 도 공유 부탁드립니다.
안녕하세요! 테스트서버에서 테스트키로 테스트완료후 live로 키 바꿔서 실서버에 업로드 했는데 customerToken이 존재하지 않습니다 오류발생해서 문의드립니다
라이브로 바꾸실때
- 상점관리자 내에 라이브쪽 redirectURL 설정하셨는지 확인한후
- 변경된 redirectURL 에서 라이브키 이용해서 token 발행요청하는지 확인해주세요.
redirectURL 설정 url 부탁드려도 될까요? 못찾겠네요
아 찾았습니다
등록되어있습니다


운영하시는 모든 MID 에 다 등록 하셨나요?
어떤 것으로 하시는지 우선 모르겠지만,
혹시 몰라 모든 브랜드페이 MID 에 다 등록해서 해보시면 좋을것 같아요.
미리 다른결제마다 MID를 지정해주신거라 현재는 이 cp_hubasezil3 MID로 오류가 없어야 되는거 같습니다
일단은 등록가능한 MID는 전부 등록했습니다
현재도 같은 리다이렉트 URL 이 등록되지 않았습니다 오류네요 ㅠ
test키로는 정상으로 보이는데 live 키로 수정하면 리다이렉트 오류입니다
보니까 라이브랑 테스트랑 도메인, URL 이 다른데
https://hubase.kr 에서 시작된 요청이 맞지요?
라이브에서 요청할때 명시한 redirectUrl 도 알려주시겠어요? (코드에 명시된 부분)
HUBASE
휴베이스가 운영하는 공식 쇼핑몰입니다
네맞습니다. 라이브 에선 https://hubase.kr/shop/order/brandpay
HUBASE
휴베이스가 운영하는 공식 쇼핑몰입니다
라이브에서 요청할때 명시한 redirectUrl 도 알려주시겠어요? (코드에 명시된 부분)
SDK 호출할때 명시한 부분
brandpay:{
// 개발자센터의 브랜드페이 > 리다이렉트 URL에 아래 URL을 추가하세요.
redirectUrl: window.location.origin + "/shop/order/brandpay"
}
이렇게 되어있습니다
지금 어떤 MID 의 키로 요청 하고 계신가요?
variantKey 이거 얘기신걸까요?
variantKey: "hubasebxfm",


https://hubase.kr/
여기 어디로 들어가면 브랜드페이 진행 해볼수 있나요?
HUBASE
휴베이스가 운영하는 공식 쇼핑몰입니다
id: hilink1, pw:1234 로그인후 장바구니 아무상품이나 주문하기 누르시면 하단부에 있습니다
HUBASE
휴베이스가 운영하는 공식 쇼핑몰입니다
일단 재등록했습니다

네 넉넉잡아 10분 정도 후에 다시 시도해주세요.
넵
아 혹시나
referer 두개 다 운영하시는 거면
www 있는것 하고 없는것, 둘다 등록해서 운영하셔도 될것 같아요.
다른 페이지에서 variantKey: "hubasebxfm", 이걸로 똑같은 ui를 호출 할수 없는건가요? 같은 소스로 다른페이지에선 ui가 노출되지 않습니다
다른페이지에서도 호출 가능한데 어떤 에러가 발생하는지 console 로그등 확인해주세요.
variantKey 에 해당하는 위젯을 찾을 수 없습니다. variantKey 값을 다시 확인해주세요. 이렇게 확인됩니다
키는 어떤키 쓰고 계신가요?
그럼 혹시 위젯키도 동일하게 쓰시는지 확인부탁드립니다.
라이브키라 지웁니다
위젯키는 어떻게 확인할수 있죠?
variantKey: "hubasebxfm", 를 설정한 상점관리자에가서 개발자 센터로 이동하면 확인가능합니다.
개발자센터 페이지 보고있는데 위젯키는 안보이는데 어느 메뉴로 가야할까요?
여기 안보이시나요?

이전에 보내드린 클라이언트키 라이브키 말고
뭐 보내드리면 될까요?
테스트 클라이언트키 입니다 test_gck_Poxy1XQL8Rg0YjegPBgk37nO5Wml
이전 결제페이지와 다른 페이지에서 키는 같은키입니다
variantKey 에 해당하는 위젯을 찾을 수 없습니다. variantKey 값을 다시 확인해주세요. 이렇게 확인됩니다이 에러 받으실때 라이브키 사용하셨고 variantKey: "hubasebxfm", 를 쓰셨다는 거죠?
네 맞습니다
아 잠시만요.
동일한 라이브키 동일한 variantkey 로 특정 사이트에서는 잘되시는 거구요?
네 잘되고 있습니다.
기존 페이지에선 정상적으로 잘되고요 다른페이지에선 같은소스로 ui가 보이지 않습니다 결제 버튼만 보입니다
그 다른 페이지는 저희도 접속 할 수 있나요? 직접 보고 싶어요
저희쪽에서 variant 키 오류 받은 케이스에 보내신 키를 확인해 보면
test_gck_docs_Ovk5rk1EwkEbP0W43n07xlzm
이 것으로 확인됩니다.
위젯키를 정상적으로넣으셨는지 확인해보세요.
customer token 이 없다는 건 이제 어떤 상황인지 이해하실 것 같아요
redirectUrl 등록 안된거요
네네
newbase.whitesoft.net 이 도메인으로 등록된 케이스가 테스트 키에서만 등록 하셨어서,
라이브 키로 테스트 하시는 거면 라이브 쪽에도 등록 하셔야 해요. 이 부분도 봐주시고
저 사이트에 어떤키 쓰고 계시는지 볼게요 잠시만요
지금은 잘 뜨는것 같은데, 뭔가 작업 하셨어요?

redirectUrl 넣어줬습니다
모바일 화면에서 ui안보이는 부분에 콘솔로그 보내드려요
Uncaught (in promise) r: customerKey 필수 파라미터가 누락되었습니다.
아까 문의주신 내용이랑 달라지셨어요
에러 상황마다 저희 가이드가 달라지거든요
customerKey 는 비회원이면 ANONYMOUS 를 사용하시면 되요
정리해서 전달드리겠습니다
url -> http://newbase.whitesoft.net/shop/order/order
view/shop/order/order.php
view/mobile/shop/order/order.php
이 파일들에서 토스 결제를 이용하고 싶습니다.
현재 같은 소스이고 위 파일에서는 정상적으로 토스 ui가 보이고
아래 파일에서는 토스 ui가 보이지 않습니다
HUBASE
휴베이스가 운영하는 공식 쇼핑몰입니다
이 두 페이지에서 같은키의 토스결제를 이용하고싶습니다
mobile 에서, customerKey 를 설정하는 member_seq 라는 값이
정상적으로 값 지정이 되었는지 확인 해주세요.
헛... 감사합니다 지정을 안해놨네요
고맙습니다
main();
async function main() {
const button = document.getElementById("payment-button");
//const coupon = document.getElementById("coupon-box");
let priceText = document.querySelector('.settle_amount_disp').innerText;
let total_toss_price = parseInt(priceText.replace(/[^0-9]/g, ''), 10);
member_seq = $("input[name='member_seq']").val();
//alert(member_seq);
const amount = {
currency: "KRW",
value: total_toss_price,
};
amount value 값이 결제 페이지에서 수정이 (적립금이나 예치금 사용 스크립트) 가능한대 변경이 되었을때(함수에서 total_toss_price = 수정된값 ) amount value 값이 변경되어 넘어가지 않고 처음 페이지에서 정의된 값이 넘어갑니다 변경된 가격으로 토스에 전달드릴 방법이 있을까요?
updateamount 쓰시면 됩니다.
관련 설명페이지가 있을까요?
v2에서도 사용이 가능한건가요?
v2 는 이거 쓰시면 될겁니다.
토스페이먼츠 JavaScript SDK | 토스페이먼츠 개발자센터
토스페이먼츠 JavaScript SDK를 추가하고 메서드를 사용하는 방법을 알아봅니다.
결제버튼 click 이벤트 이후에도 사용이 가능한가요?
토스 프로세스중 어디에서 수정이 가능한까요?
coupon.addEventListener("change", async function () {
if (coupon.checked) {
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
return;
}
await widgets.setAmount({
currency: "KRW",
value: total_toss_price,
});
});
여기서만 가능한건가요?
결제하기 버튼은 무조건 가장 마지막에 수행 되어야 하는 액션입니다.
결제위젯 setAmount 는, 해당 금액으로 위젯을 다시 렌더링 하는 기능 입니다.
고로, 금액 변경 로직이 있거나, 고객이 할인을 적용했을때 돌리는 등
해당 액션이 수행될때 해야 겠죠.
변경 함수에서 widgets.setAmount({
currency: 'KRW',
value: amount,
}); amount에 변경된 값을 넣어줘도 변경이 되지 않아 문의드립니다
coupon.addEventListener("change", async function () {
if (coupon.checked) {
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
return;
}
await widgets.setAmount({
currency: "KRW",
value: total_toss_price,
});
});
여기서만 수정이 가능한건가요?
아뇨 원하시는 곳에서 수정하시면되고 await widgets.setAmount({ 하신후 promise 받으신후에 결제하기 진행하셔야 합니다.
promise 어느부분에서 진행되어야 되는건가요?
예제 코드나 다른 설명페이지가 없나요?
setAmount 를 하시고 바로 requestpayment 를 호출하시나요?
라디오 박스가 있어서 체크시 settleAmount() 함수로 페이지에서 보이는 가격이 변경됩니다.
첫 setAmount requestpayment 이전에 호출되고 변경된 가격을 settleAmount()에서 해주려고 하고있습니다.
let priceText = document.querySelector('.settle_amount').innerText;
let total_toss_price = parseInt(priceText.replace(/[^0-9]/g, ''), 10);
main();
async function main() {
const button = document.getElementById("payment-button");
//const coupon = document.getElementById("coupon-box");
member_seq = $("input[name='member_seq']").val();
amount = {
currency: "KRW",
value: total_toss_price,
};
settleAmount() 호출하면 priceText 가격이 수정됩니다. 이 함수 안에서
amount = {
currency: "KRW",
value: 변경된값,
};
이후 결제 요청을 드리면 return 에 amount값이 변경전 값입니다.
여기 샘플코드가 있고 해당 코드 동작하는 부분을 보시면 이해될거에요.
https://github.com/tosspayments/tosspayments-sample/blob/main/express-javascript/public/widget/checkout.html
GitHub
tosspayments-sample/express-javascript/public/widget/checkout.html ...
토스페이먼츠 결제연동 샘플 프로젝트입니다. Contribute to tosspayments/tosspayments-sample development by creating an account on GitHub.
해당 코드는 할인적용을 통해 금액 변경되도록 checkbox를 만들고 checkbox 변화가 있을때 금액 변경하도록 해둔 것이거든요. 위에 계속 설명 드렸던 코드의 전체부분입니다.
보내주신 샘플그대로면 체크박스 체크후에 결제 진행하면 5000원 깍인 가격으로 토스로 전달되야하죠? success 페이지에서 amount 확인할때요/
그리고 변경된값은 coupon.addEventListener("change", async function () {
if (coupon.checked) {
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
return;
}
await widgets.setAmount({
currency: "KRW",
value: total_toss_price,
});
});
여기서 처리 해야한다는 말씀이신거죠?
coupon.addEventListener("change", async function () {
if (coupon.checked) {
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
return;
}
await widgets.setAmount({
currency: "KRW",
value: amount.value -4000,
});
}); 쿠폰 체크하지 않고 테스트로 -4000 이부분이 적용되지 않습니다
amount = {
currency: "KRW",
value: 10000,
}; 쿠폰체크시 success 페이지 amount 는 5000 확인했습니다. 쿠폰 비체크시 success 페이지 amount 는 10000 이네요...
await widgets.setAmount({
currency: "KRW",
value: amount.value -4000,
});
여기 코드가 실제로 실행되는지를 확인해 주세요.
샘플코드 그대로인데 실행이 되지 않아 질문드렸습니다
amount = {
currency: "KRW",
value: 10000,
};
coupon.addEventListener("change", async function () {
alert('33434');
if (coupon.checked) {
alert('coupon');
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
console.log(amount);
return;
}
alert('change');
await widgets.setAmount({
currency: "KRW",
value: 20000,
});
console.log(amount);
});
// ------ '결제하기' 버튼 누르면 결제
alert, log는 잘 찍힙니다
하지만 log에 amount 값은 계산되지 않고 위에 초기값 10000 만 찍힙니다
amount 라는 값을 계산 하셨어요..?
value 라는 걸로 대체 하신것 같은데
예제 그대로 value: amount.value - 5000, 진행이 되는지 확인하려고 해봤습니다
예제 그대로면 log에 체크박스 체크하면 5000 이 나와야 되는거 아닌가요?
console.log 를 amount 로 찍으시는데요?
그럼 setAmount 값은 어떻게 확인할수 있을까요? 체크박스 체크후
function 수행 할때 value 가 필요 한 거니까,
value 값을 미리 계산해서 amount 가 아닌 다른 객체에 넣어두고
그 객체를 console log 로 찍어보면 되지 않을까요?
뭐 이건 구현하는 개발자 마음이라서
if (coupon.checked) {
alert('coupon');
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
console.log(amount); 이렇게 로그를 찍으면 value: amount.value - 5000 {currency: 'KRW', value: 5000} 이렇게 결과값이 나올꺼라 예상했습니다
그니까 여기에
value: amount.value - 5000,
이렇게 넣으셨으니까
콘솔에 원하는 값을 보려면
console.log(amount.value - 5000) 이렇게 찍어야 하는거 아니냐는 말씀을 드리고 있는겁니다
amount 객체 에 -5000 계산해서 넣은적이 없으신 거잖아요?
amount = {
currency: "KRW",
value: 10000,
};
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
});
amount currentcy: "KRW", value: : 5000 setAmount가 다시 값을 넣어주는거 아닌가요?
amount currentcy: "KRW", value: : 5000 setAmount가 다시 값을 넣어주는거 아닌가요?
이건 토스페이먼츠 method 인거고
보고 싶으신건 그 값을 보고 싶으신 거니까
별개로 보셔야 할것 같아요
그 값을 관리하는건 가맹점 이니까요
amount 라는 객체에 값을 지정하고
그 값을 활용하는건 가맹점 인거고
토스페이먼츠 js method 는 그 파람 값을 쓰는 거고요
await widgets.setAmount({
currency: "KRW",
value: amount.value - 5000,
}); 이후 결제를 진행하면 success 파라미터 amount에선 5000이 되겠네요?
그러니까 그 계산값을 보려면
amount 라는 값에 계산을 해서 다시 넣던가
아니면 새롭게 계산되는 객체를 만들던가요
그렇겠죠?