자동결제 환불 문의드립니다
자동결제를 잘 이용하고 있습니다.
그런데 환불을 하려고
https://api.tosspayments.com/v1/payments/${paymentKey}/cancel
, 이 엔드 포인트로 요청하고 있는데, 자동결제와 같이 헤더에 인증키를 실어 보냈는데도 unauthroized, 인증되지 않은 키라고 응답이 와서요! 혹시 또 다른 계약사항이 필요한가요?36 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
paymentKey 전달 주시면 로그 확인 해보겠습니다
ZDBYqJLQ1GKNbdOvk5rkDGPYLBAp4z8n07xlzmj6R9e4oPpE
paymentKey입니다!
요청한 날짜가 언제 인가요?
다른 계약이 필요한 것은 아니고 결제가 발생했을 때와 취소할 때 서로 다른 키를 사용하고 있습니다.
결제 발생했던 키와 동일한 키를 이용하여 취소하셔야 합니다.
거래는 2/20일 발생한 것이군요.
아네네! 어떤 키를 말씀하시는걸까요??

이 건을 결제하고, 응답으로 온 paymentKey인 ZDBYqJLQ1GKNbdOvk5rkDGPYLBAp4z8n07xlzmj6R9e4oPpE 걸로 환불을 진행하는 게 아닌건가요??
맞습니다.
해당 결제가 발생한 mid의 secretKey를 이용하시면 됩니다.
다른 secretKey를 이용하여 취소 하기 때문에 취소 요청시 에러 발생한거에요.
아 이해했습니다!
secretKey가 달랐나보네요...
늦은 시간에 감사합니다!
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
방금 새로 다시 결제하고 테스트를 해봤는데 동일한 secretKey임에도 에러가 나네요...어디가 잘못된걸까요... @박수습
결제에 사용된 주문번호 전달부탁드립니다
toss_9638-202403041948-9f659295
입니다!
k0A2Ga1QqXjExPeJWYVQqa7oO1eAgqV49R5gvNLdzZwO6oKl
결제는 잘 되었구요
취소가 실패하셨나요?
네네 그렇습니다!
paymentKey는 k0A2Ga1QqXjExPeJWYVQqa7oO1eAgqV49R5gvNLdzZwO6oKl
https://api.tosspayments.com/v1/payments/${paymentKey}/cancel
, 여기로 포스트 요청했습니다!취소들어온게 없는데요, 취소시 request body 알려주시겠어요?
curl 형태로 주셔도 좋습니다
'POST /v1/payments/k0A2Ga1QqXjExPeJWYVQqa7oO1eAgqV49R5gvNLdzZwO6oKl/cancel
body는 "data":{"cancelReason":"구독취소","cancelAmount":32900}}'
응답은 data: {
code: 'UNAUTHORIZED_KEY',
message: '인증되지 않은 시크릿 키 혹은 클라이언트 키 입니다.',
data: null
}
이렇게 왔습니다!
헤더에 키는 아래 가이드대로 하셨나요?
https://docs.tosspayments.com/resources/glossary/basic-auth
Basic 인증 | 토스페이먼츠 개발자센터
Basic 인증 방식은 가장 기본적인 HTTP 인증 방식이에요. 인증 정보로 사용자 ID, 비밀번호를 사용해요.
Authorization: Basic base64({USERNAME}:{PASSWORD})
USERNAME 부분에 secretKey를 넣으셔서 base64인코딩을 해주셔야 합니다.
네네 노드 js환경에서 const key =
${envs.tossSecretKey}:
;
const base64 = new (Buffer as any).from(key).toString('base64');
이렇게 해서 결제는 성공했거든요
키가 잘못되었다면, 결제도 안되어야하지 않나요?키가 잘못되었다면 결제도 안되는게 맞아요, 로그를 좀 더 찾아볼게요
네네 감사합니다!
상점아이디는 bill_pwolr87vl 입니다!
로그 찾기가 어렵네요
이전에 있었던 취소는 상점관리자에서 하셨나요?
네네 그렇습니다
응답도 왔는데 로그가 왜 없을까요,,?
응답은 지금도
code: 'UNAUTHORIZED_KEY',
로 받으시나요?
네 맞습니다! 401이에요
header 에 어떤 것들이 있는지 전부 알려주시겠어요
status: 401,
statusText: 'Unauthorized',
headers: Object [AxiosHeaders] {
date: 'Mon, 04 Mar 2024 11:27:20 GMT',
'content-type': 'application/json',
'content-length': '123',
connection: 'keep-alive',
vary: 'Origin,Access-Control-Request-Method,Access-Control-Request-Headers',
'x-tosspayments-trace-id': '9cd5ba0ca8a3585f71395d2bc50868dc',
'x-envoy-upstream-service-time': '2',
server: 'istio-envoy'
},
이게 응답헤더이고
찾았습니다
아 넵넵
{"headers":{"Authorization":"Basic XXXXXXXXXXXXXXXXXXXXXX"},"data":{"cancelReason":"구독취소","cancelAmount":32900}}
이런식으로 body 에 들어왔어요
header 값을 header 에 배치 해주셔야해요
아 헐...
제가 바보였네요...ㅠㅠㅠㅠ 죄송합니다
힘내시고 다시한번 ㅎㅎ
아주 잘되었습니다...
늦은시간까지 정말 감사합니다^^
좋은 서비스 만드시길 바랍니다. !!