토스 페이먼츠 문서에 있는 내용으로 개발 환경에서 테스트하고 있는데, 오류가 발생합니다.
빌링키 발급 관련해서 테스트를 진행하고 있는데, 403 오류가 발생해서 문의 드립니다.
POST /v1/billing/authorizations/issue
1. 문서 상에 있는 테스트 키를 사용하고 있습니다.
2. 로컬 환경에서는 문제 없이 동작하는데, 개발 환경에서 문제가 발생합니다.
3. 403 오류임을 확인했으나, 응답 페이로드가 문서에 존재하지 않습니다.
아래는 403 오류 응답의 페이로드 내용입니다.
'<html>\r\n' +
'<head><title>403 Forbidden</title></head>\r\n' +
'<body>\r\n' +
'<center><h1>403 Forbidden</h1></center>\r\n' +
'</body>\r\n' +
'</html>\r\n'
추가적으로 필요한 정보는 바로 제공해드리겠습니다. 해당 문제에 관해서 안내 부탁드립니다.
51 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
1. 참고하고 계시는 저희쪽 docs 페이지 링크 알려주시구요
2. 보내셨던 request body 알려주세요
1. 링크는 아래와 같습니다.
https://docs.tosspayments.com/reference#authkey%EB%A1%9C-%EC%B9%B4%EB%93%9C-%EC%9E%90%EB%8F%99%EA%B2%B0%EC%A0%9C-%EB%B9%8C%EB%A7%81%ED%82%A4-%EB%B0%9C%EA%B8%89-%EC%9A%94%EC%B2%AD
2. 아래는 요청 관련 정보입니다.
{
"headers": {
"Accept": "application/json, text/plain, /",
"Content-Type": "application/json",
"Authorization": "Basic dGVzdF9za196WExrS0V5cE5BcldtbzUwblgzbG1lYXhZRzVSOg==",
"User-Agent": "axios/1.4.0",
"Content-Length": "82",
"Accept-Encoding": "gzip, compress, deflate, br"
},
"baseURL": "https://api.tosspayments.com",
"method": "post",
"url": "/v1/billing/authorizations/issue",
"data": "{"customerKey":"9fe95f90-7e2b-445c-8320-1e284c32d339","authKey":"bln_RW1qwDLJwMY"}"
}
코어 API | 토스페이먼츠 개발자센터
토스페이먼츠 API 엔드포인트(Endpoint)와 객체 정보, 파라미터, 요청 및 응답 예제를 살펴보세요.
해당 요청이 저희 서버로 들어온 로그가 확인되지 않습니다.
개발서버에서 api.tosspayments.com 으로 통신이 가능한상태인지 확인부탁드릴께요
GET /v1/payments/{paymentKey} 요청으로 테스트해봤는데 통신이 되지 않는 것 같습니다.
아래는 테스트에 사용한 코드입니다.
// tosspayments 관련 코드
import axios from "axios";
const { TOSS_PAYMENT_SECRET_KEY } = process.env;
const request = axios.create({
baseURL: "https://api.tosspayments.com",
headers: {
Authorization:
Basic ${TOSS_PAYMENT_SECRET_KEY}
,
},
});
export const getPayment = ({ paymentKey }) =>
request({ method: "GET", url: /v1/payments/${paymentKey}
});
// 테스트용 서비스 로직
import { getPayment } from "...";
export default async (req, res) => {
const { paymentKey } = req.params;
if (!paymentKey)
return res.status(400).json({ message: "결제키는 필수 입력값입니다." });
try {
const { data: payment } = await getPayment({ paymentKey });
console.log("payment :", payment);
res.json(payment);
} catch (error) {
console.log(error);
const {
response: {
status,
data: { message },
},
} = error;
res.status(status).json({ message });
}
};
다른 외부 API(알림톡 송신용) 는 문제 없이 동작합니다.통신이 안되는건 방화벽 이슈일것이라 네트워크 담당자나 방화벽 담당자에게 문의 드립니다.
알림톡 API 만 허용이 되어 있을수도 있습니다.
귀사 네트워크 담당자분께 아래페이지 안내해주시면 됩니다
https://docs.tosspayments.com/reference/using-api/firewall
방화벽 설정 | 토스페이먼츠 개발자센터
토스페이먼츠 API를 안전하게 사용할 수 있는 방화벽 설정을 알아봅니다. 방화벽은 외부의 신뢰할 수 없는 네트워크가 내부 네트워크에 접근하지 못하도록 하는 보안 시스템입니다. 특정 포트나 IP에서 들어오는 요청을 필터링하거나, 사용자 인증 요청, 프록시, 주소변환기능(NAT) 등의 방법이 있습니다.
이부분 입니다.
지난 주 금요일까지는 정상적으로 동작했었고, 이후에 인프라 구성을 변경한 이력이 없기에 해당 문제는 아닌 것 같습니다.
서버 도메인은 devapi.semutong.com 을 사용 중인데, 해당 도메인으로 요청된 이력이 있는지 확인해봐주실 수 있나요?
저희쪽은 타 가맹점이 문제 없이 사용중이고 현재 서버 오류도 없는 상태입니다.
해당서버가 외부로 나갈때 사용하는 public ip 를 알려주실수 있을까요?
혹시라도 해당 IP 에서 공격패턴이 인입된 경우 저희가 IP 를 차단할수 있습니다.
말씀해주신 서버가 devexpert.semutong.com 와는 다른 서버인가요? 여기에서는 정상통신하시는 것으로 보입니다.
devexpert.semutong.com 도메인으로 들어온 거래가 있구요
devexpert.semutong.com 에서는 requestBillingAuth 로 authKey 만 발급받고, 나머지 동작은 전부 서버에서 처리하고 있어요.
authKey 를 받으시는 단계는 backend 통신이 아니라서... 방화벽과 무관하겠네요
authKey 발급까지는 문제가 없는데, authKey 발급 이후에 빌링키를 요청하는 단계에서 막힙니다.
935f_2023/08/22/10:17:09_1_100
이 주문번호로 결제 테스트도 하신거같은데요 여기는 어떤 서버일까요?
해당 요청은 로컬 서버에서 테스트한 내용이에요
authKey 발급이후에 빌링키 요청하는 단계가 backend 통신입니다
방화벽에서 막힐 수 있는 내용이구요
로컬에서는 방화벽을 안타고 통신해서 되시는거같네요
서버 to 서버가 안되는 상태라고 봐주심됩니다
이전까지 동일 서버에서 잘되셨고 가맹점측 인프라나 방화벽 설정이 변경되신게 없다면 저희쪽에서 막았을 가능성도 있습니다.
지난주 금요일 이전까지는 스케쥴러로 정기결제 테스트하는 것까지 됐었는데, 금요일 10시 테스트에서 문제가 발생한 이후로 계속 현상이 유지되고 있어요..
아까 요청드린대로 devapi.semutong.com 의 public IP 를 알려주세요.
해당 IP 의 차단 내역이 있는지 확인해 보겠습니다.
| 금요일 10시 테스트에서 문제
이 부분을 더 자세하게 설명해주실 수 있을까요?
1. 현재 서버 전체 구성은 serverless, express 로 구성되어 있습니다.
2. REST API 동작을 수행하는 index handler, 정기 결제 동작을 수행하는 scheduler handler 로 구성되어 있습니다.
3. 정기 결제 동작을 수행하는 scheduler handler 에서는
/v1/billing/${billingKey}
로 요청을 보내, 정기 결제를 수행합니다.
4. 고객 유입 스케일이 파악되지 않아 1000건 기준으로 정기 결제 테스트를 진행하고 있었습니다.
5. 지난 주 금요일(8/18) 정기 결제 시점에서 일부 결제 작업을 처리하던 도중 문제가 발생했습니다.
문제가 발생했던 결제 작업에 사용되었던 orderId 중 일부는 아래와 같습니다.
- 2023/08/18/10:00:41_706_100
- 2023/08/18/10:00:41_591_100
- ...
public ip 는 당장 확인이 힘들어서, 식사 후 오후 중으로 최대한 빠르게 공유드리겠습니다.설명 감사합니다. public ip 수신 후 저희쪽 내용도 점검해보겠습니다.
@ensia96 빌링키 발급에 사용하던 키가 test key셨죠?
저희 이력을 확인해 보니 메일 아침 테스트 키로 5초에 1000건 테스트 빌링 결제를 시도하는 것이 확인되어 테스트 환경에대한 공격으로 판단하고 해당 IP 를 차단했습니다.
테스트 키를 이용해서 5초에 1000건을 동시에 매일 빌링하시는 이유가 있으실까요?
네 맞아요.
고객 유입 스케일이 파악되지 않아서, 예상되는 최대 수치로 테스트하고 있었어요.
원래 중간에 스케일을 줄였어야 하는데, 업무 진행하다가 까먹어서 매일 요청을 보내게 됐습니다.
techsupport@tosspayments.com 으로 조치 사항을 간단하게 보내주실수 있을까요? 그 내용이 있어야 IP 해제가 가능합니다.
메일 보냈습니다.
차단 해제 했습니다. 확인 부탁드립니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
다른 업무 때문에 답장이 늦어져서 죄송합니다.
아직 제대로 적용되지 않은 것 같아요.
메일로 관련 내용 공유드렸습니다. 확인 부탁드립니다.
네 확인중입니다
혹시 각 서버에서
telnet api.tosspayments.com 443
으로 테스트 가능하실까요?서버리스 인프라여서 조금 힘들 것 같은데요.. ㅜㅠ
네.. 메일로 전달주신 18.64~ 로 시작되는 IP는 막혀있지 않습니다
저희쪽 API 통신시도시에 받으시는 http 응답이 403으로 똑같으신가요?
일단 NAT 게이트웨이에 있는 public ip 주소는 13.124. 으로 시작해요
네
추가로 PG 계약은 완료되셨을까요?
라이브키 발급된거 보면 추가 계약도 완료된 것 같아요.
저희쪽 해제가 덜되어서 조치중입니다
지금 다시 확인가능하실까요?
@ensia96 시간되실때 확인부탁드려요
앗; 기다리는 동안 다른 작업하다가 바로 못 봤네요;; 바로 할게요 죄송합니다!
괜찮습니다 🥰
아직 403 오류가 발생하네요..
axios error 객체도 메일로 첨부해드릴게요
네, 확인을 더 해봐야겠군요.. 메일 부탁드립니다
좀전에 보냈습니다
넵 메일 잘 받았습니다. 확인하고 다시 알려드릴게요
@ensia96
다시 해제했습니다. 확인부탁드려요! 🙏
오 됐어요!
감사합니다 ㅜㅠㅠㅜㅜㅠㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜㅠㅜ
👍
다행입니다
감사합니다 ㅜㅠ
오늘도 고생 많으셨고, 올해 남은 기간도 좋은 일만 가득하시길 바라요 ㅜㅠ