paymentkey 오류
안녕하세요 nextjs + django로 결제 구현을 하던 중에
respaymentKey = resjson["paymentKey"]
KeyError: 'paymentKey'
와 같은 오류를 만났습니다. 해결 방법을 알고 싶습니다..
nextjs 결제 로직은 아래와 같습니다.
const router = useRouter()
const [res, setRes] = useState() const {mutate: success, isLoading, isSuccess } = useFetchOrderSuccess()
useEffect(()=>{ const param = router?.query const data = { amount : param.amount, orderId : param.orderId, paymentKey : param.paymentKey, paymentType : param.paymentType, } const result = success(data) setRes(result) },[router]) django view는 아래와 같이 작성 하였습니다. def success(request): orderId = request.data['orderId'] amount = request.data['amount'] paymentKey = request.data['paymentKey'] url = "https://api.tosspayments.com/v1/payments/confirm" secertkey = "test_sk_D4yKeq5bgrpKRd0JYbLVGX0lzW6Y" userpass = secertkey + ':' encoded_u = base64.b64encode(userpass.encode()).decode()
headers = { "Authorization" : "Basic %s" % encoded_u, "Content-Type": "application/json" }
params = { "orderId" : orderId, "amount" : amount, "paymentKey": paymentKey, }
res = requests.post(url, data=json.dumps(params), headers=headers) resjson = res.json() pretty = json.dumps(resjson, indent=4) respaymentKey = resjson["paymentKey"] resorderId = resjson["orderId"] rescardcom = resjson["card"]["company"]
reuslt = { "res" : pretty, "respaymentKey" : respaymentKey, "resorderId" : resorderId, "rescardcom" : rescardcom, } return Response(reuslt) 감사합니다.
const [res, setRes] = useState() const {mutate: success, isLoading, isSuccess } = useFetchOrderSuccess()
useEffect(()=>{ const param = router?.query const data = { amount : param.amount, orderId : param.orderId, paymentKey : param.paymentKey, paymentType : param.paymentType, } const result = success(data) setRes(result) },[router]) django view는 아래와 같이 작성 하였습니다. def success(request): orderId = request.data['orderId'] amount = request.data['amount'] paymentKey = request.data['paymentKey'] url = "https://api.tosspayments.com/v1/payments/confirm" secertkey = "test_sk_D4yKeq5bgrpKRd0JYbLVGX0lzW6Y" userpass = secertkey + ':' encoded_u = base64.b64encode(userpass.encode()).decode()
headers = { "Authorization" : "Basic %s" % encoded_u, "Content-Type": "application/json" }
params = { "orderId" : orderId, "amount" : amount, "paymentKey": paymentKey, }
res = requests.post(url, data=json.dumps(params), headers=headers) resjson = res.json() pretty = json.dumps(resjson, indent=4) respaymentKey = resjson["paymentKey"] resorderId = resjson["orderId"] rescardcom = resjson["card"]["company"]
reuslt = { "res" : pretty, "respaymentKey" : respaymentKey, "resorderId" : resorderId, "rescardcom" : rescardcom, } return Response(reuslt) 감사합니다.
13 Replies
3/12 이후에 결제 연동을 해보신 분들을 찾습니다!🔎
제품 발전을 위해 설문에 참여해주세요! 추첨을 통해 선물을 드립니다. (1분 소요)
resjson 이 json 데이터라는 가정을 갖고계신거 같은데요
통신결과는 장담해서는 안됩니다.
통신 이후에 나오는 모든 것들을 print() 해보세요
{"code":"INVALID_API_KEY","message":"잘못된 시크릿키 연동 정보 입니다."} 오류가 발생한것으로 확인됩니다.
결제창을 띄울때 사용하신 clientkey 와 승인API 를 호출하신 secretkey 가 매칭되는지 확인해 보세요.
{'code': 'INVALID_API_KEY', 'message': '잘못된 시크릿키 연동 정보 입니다.'}라고 뜨네용 ㅠ
clientkey 와 secretkey 가 서로 같아야 하나요??
아뇨 두개가 페어로 되어 있습니다.
지금 보면 서로 다른 key를 이용하신것 같아요.
아아 그렇군요.. 내 개발정보에 있는 테스키와 클라이언트키를 사용하니까 로드가 안되서 디스코드에서 다른 키를 받았는데 그 정보가 사라졌네요 ㅠ 페어를 다시 알고 싶어요 ㅠㅠ
로드가 어떻게 안났던것인지 알수 있을까요?
디스코드에서 키를 받으신거면 https://docs.tosspayments.com/guides/payment-widget/integration
결제위젯 연동하기 | 토스페이먼츠 개발자센터
내 상점의 주문서 웹 페이지에 결제위젯을 연동하세요. JavaScript SDK 이용 가이드입니다.
내개발정보에 있는 클라이언트 키를 사용하면 NEXT.JS에서
const paymentWidget = await loadPaymentWidget(clientKey, customerKey)
이 위젯 코드가 작동을 안하네요ㅠ
여기를 참고하시면 될겁니다.
아하! 감사합니다
말씀해주신대로 키를 바꿧더니 정상적으로 resjson 결과가 반환 되는데
rescardcom = resjson["card"]["company"] 이부분에서 에러가 나네요
print 해보니 company라는 키가 없는 것 같습니다.. 깃헙에서 가져온 코드인데.. 어떤점이 문제일까요 ㅠ
보내주신 링크 도큐먼트를 보니 원래 company가 없는 것 같군요! company 부분을 지우면 될 것 같습니다! 정말 감사합니다!
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
네 company 가 없어지고 매입사 코드, 발급사 코드가 생겼습니다.