Shini
Shini2y ago

일반결제

결제 관련으로 문의 드립니다. 테스트로 현재 진행하고 있는데 지금 계속 response code가 다음과 같이 나옵니다. {"code":null,"message":null,"data":null} response.status 프린트 했을때도 500으로 나오는데 혹시 왜 이렇게 되는지 알 수 있을까요?
32 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
이실장
이실장2y ago
어떤 SDK 혹은 API를 호출하셨을까요
Shini
ShiniOP2y ago
SDK는 <script src="https://js.tosspayments.com/v1/payment"></script> 넣어서 기본 결제 SDK를 불러왔고 API는 결제 승인 API 부분입니다
이실장
이실장2y ago
사용한 paymentKey말씀해주세요
Shini
ShiniOP2y ago
paymentKey는 결제창에서 리다이렉트 해올때 query param에서 받아온걸 넣었습니다 예를 들어 이런식으로 /success?planet=1003&orderId=PFD6qnKIk1ZXKJzeTkPn5&paymentKey=lqNRYD097kZLKGPx4M3MG1eQ9DjoWRrBaWypv1o6bemnOJz2&amount=1000 리다이렉트 됬을때 해당 paymentKey를 불러와서 넣었습니다
Kimoon Lee
Kimoon Lee2y ago
해당 paymentkey 로 승인 요청이 저희쪽으로 들어온적이 없습니다. 방화벽 등에 막힌게 아닐지 확인 부탁드립니다.
Shini
ShiniOP2y ago
지금 현재 로컬로 테스트를 진행하는데 로컬로 진행할 경우에는 안 들어가거나 그런 경우도 있나요? 만약 그렇다면 dev 서버 내에서 다시 해보겠습니다
Kimoon Lee
Kimoon Lee2y ago
아뇨 그런것은 없습니다. 혹시 저희쪽 승인 API 호출하는 코드를 공유해 주실수 있을까요?
Shini
ShiniOP2y ago
var clientKey = '{{ client_key }}' // 클라이언트 키 var tossPayment = TossPayments(clientKey); var button = document.getElementById('payment-button') // 결제하기 버튼 button.addEventListener('click', function () { tossPayment.requestPayment('카드', { amount: 1000, orderId: '{{ order_id }}', orderName: '비공개(비밀글) 기능 추가', customerName: '{{ current_planet.ans_dp_name }}', successUrl: '{{ host_url }}success?planet={{ current_planet.ans_id }}', failUrl: '{{ host_url }}failed', }) }) 이쪽이 스크립트쪽이고
Kimoon Lee
Kimoon Lee2y ago
스크립트 쪽은 문제가 없으신것 같아요.
Shini
ShiniOP2y ago
url = request.url parsed_url = urlparse(url) payment_key = parse_qs(parsed_url.query)['paymentKey'][0] order_id = parse_qs(parsed_url.query)['orderId'][0] amount = parse_qs(parsed_url.query)['amount'][0] planet_id = parse_qs(parsed_url.query)['planet'][0] conn = http.client.HTTPSConnection("api.tosspayments.com") payload = "{"paymentKey":"" + payment_key + "","amount":" + amount + ","orderId":"" + order_id + ""}" print(payload) headers = { 'Authorization': "Basic dGVzdF9za19HS05iZE92azVya2JKRE1STWtFVm4wN3hsem1q==", 'Content-Type': "application/json" } conn.request("POST", "/v1/payments/confirm", payload, headers) response = conn.getresponse() data = response.read() 이쪽은 파이썬 내에서 승인 요청입니다 하단에 Authorization에 있는건 시크릿 코드 인코딩도 진행해서 넣은것입니다
Kimoon Lee
Kimoon Lee2y ago
payload 가 빈값으로 들어온것 같습니다.
Shini
ShiniOP2y ago
{"paymentKey":"oYwn6qbDZOAQ92ymxN34lo6QjMDnv3ajRKXvdk4El1Bp0J5L","amount":1000,"orderId":"7YCVTjeRTA5WbAOb9mbxN"}
이실장
이실장2y ago
json encoding해서 보내주시겠어요?
Shini
ShiniOP2y ago
이쪽이 방금전에 payload 프린트 한거입니다 어떤 부분은 인코딩 하면 되나요?
Kimoon Lee
Kimoon Lee2y ago
json_data = json.dumps(payload) 로 하신후에 conn.request("POST", "/v1/payments/confirm", json_data, headers) 이렇게 해보실수 있을까요?
DreamCatch
DreamCatch2y ago
저는 request 모듈을 애용하는 편 입니다 url = "https://api.tosspayments.com/v1/payments/confirm" secertkey = "" 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)
Shini
ShiniOP2y ago
이쪽이 json_data로 한 내용이고 "{"paymentKey":"OR1ZwdkQD5GePWvyJnrK2kBXPg7xYaVgLzN97EoqYA60XKx4","amount":1000,"orderId":"bKTqORIqXol8wXU2u9Rnn"}" response는 똑같이 {"code":null,"message":null,"data":null} 이렇게 나옵니다
Kimoon Lee
Kimoon Lee2y ago
지금도 body가 전달되지 않았습니다.
Shini
ShiniOP2y ago
이쪽도 한번 시도 해보겠습니다 공유 감사합니다
DreamCatch
DreamCatch2y ago
같은 Python 쓰셔서 반가워서 글 남겨 드렸어요 ㅎㅎ 파이팅!
Shini
ShiniOP2y ago
@냥과장 혹시 지금 해당 paymentKey로 body가 전해진게 있나요? OR1ZwdkQD5GePWvyJnrK4voZYxQYAO8gLzN97EoqYA60XKx4 luckyhyun님의 방법으로 해봤는데..
Kimoon Lee
Kimoon Lee2y ago
저희 내부 로그를 보다보니 IllegalArgumentException: Input byte array has wrong 4-byte ending unit
Shini
ShiniOP2y ago
그러면 디코딩에서 문제가 생기는건가요?
Kimoon Lee
Kimoon Lee2y ago
혹시 실제 코드에 이렇게 캐리지 리턴이 들어가 있으신가요? 'Authorization': "Basic dGVzdF9za19HS05iZE92azVya2JKRE1STWtFVm4wN3hsem1q==",
Shini
ShiniOP2y ago
캐리지 리턴이라고 하면 \r 이거 말씀하시는건가요? 캐리지 리턴은 안 들어가있는거 같습니다 headers = { 'Authorization': "Basic dGVzdF9za19HS05iZE92azVya2JKRE1STWtFVm4wN3hsem1q==", 'Content-Type': "application/json" }
유부장
유부장2y ago
dGVzdF9za19HS05iZE92azVya2JKRE1STWtFVm4wN3hsem1qOg== 이거로 한번 해보시겠어요? 시크릿키 base64 인코딩 시에, 특정 값 누락등이 있는것이 아닐까 생각됩니다
Shini
ShiniOP2y ago
필수 파라메터가 누락 되었다고 왔습니다 "{\"paymentKey\":\"k2WNa0EMg4Gv6LjeKD8azDDdj9GDzN3wYxAdXy19qpobJmB7\",\"amount\":1000,\"orderId\":\"1Qu6xCgC9cAnrOHy2rOfZ\"}"
유부장
유부장2y ago
그럼 이제 인증은 성공 하셨네요! 다음은 body payload 부분입니다 luckyhyun 님 방식 기준으로 params = { "orderId" : orderId, "amount" : amount, "paymentKey": paymentKey, } data = json.dumps(params) res = requests.post(url, data=json.dumps(params), headers=headers)
Shini
ShiniOP2y ago
payload = "{\"paymentKey\":\"" + payment_key + "\",\"amount\":" + amount + ",\"orderId\":\"" + order_id + "\"}" 알겠습니다 오 됬습니다 감사합니다!
유부장
유부장2y ago
👍
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.

Did you find this page helpful?