토스 테스트 결제 완료 후 success.php로 와서 fail.php로 에러가 떨어져요. 해결 문의드립니다. URL로 직접 테스트해 보실 수도 있어요
22 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
저희 서버에다 토스페이 결제 폴더는 /shop/tosspay/에 넣어 놓았어요
https://github.com/tosspayments/tosspayments-sample 에서 받아서 저희 서버에 놓고 진행하니 결제는 성공 되었는데 success.php에서 무언가 받아올 때 실패하면서 fail.php로 떨어져요
GitHub
GitHub - tosspayments/tosspayments-sample: 토스페이먼츠 결제연동 샘플 프로젝트입니다.
토스페이먼츠 결제연동 샘플 프로젝트입니다. Contribute to tosspayments/tosspayments-sample development by creating an account on GitHub.
해결좀 부탁좀 드릴께요~
success.php 이동후 fail.php로 이동하고 있는데 success.php에서 승인 API가 정상 호출안되고 있는 것으로 보여요. success.php의 각 기능별로 정상 처리되는지 디버깅 해보시면 될 것 같아요.
success.php에서 토스페이먼츠 서버로 요청을 못하고 있는 것 같은데
그런데 그누보드영카트 이용하시는 것 같은데 직접 위젯을 구현하고 계신건가요?
아뇨 직접 위젯 구현하지는 못하고 기존 것을 이용해서 경로 변경 수정만 했어요
https://github.com/tosspayments/tosspayments-sample 다운 받아서 수정 해서 반영했어요
GitHub
GitHub - tosspayments/tosspayments-sample: 토스페이먼츠 결제연동 샘플 프로젝트입니다.
토스페이먼츠 결제연동 샘플 프로젝트입니다. Contribute to tosspayments/tosspayments-sample development by creating an account on GitHub.
tosspay.zip에는 현제 저희 결제 서버에 놓고 테스트 작업한 소스들이에요
해당 코드의 widget/success.php를 보시면 승인 API 호출하는 부분이 있어요.
confirm()
.then(function (data) {
// TODO: 결제 승인에 성공했을 경우 UI 처리 로직을 구현하세요.
document.getElementById("response").innerHTML =
<pre>${JSON.stringify(data, null, 4)}</pre>
;
})
.catch((err) => {
// TODO: 결제 승인에 실패했을 경우 UI 처리 로직을 구현하세요.
window.location.href = /shop/tosspay/public/fail.php?message=${err.message}&code=${err.code}
;
});
const response = await fetch("/confirm/widget", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(requestData),
});
여기서 /confirm/widget 이 제대로 동작하지 않아서 그런데
해당 코드의 README.md 문서를 보고 테스트 해보세요.
해당 코드 문제가 있는 것으로 보여 확인하고 다시 답변 드릴게요.네
저도 말씀 주신거 까지은 생각 해서 상단 이미지에도 표시 드렸고요
추가로
success.php에서
const response = await fetch("/confirm/widget", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(requestData), }); 잘 안되는 거 같아 보여서 문의를 드렸어요 index.php에서 받는 거 같은데 $requestUri = $_SERVER['REQUEST_URI']; $requestMethod = $_SERVER['REQUEST_METHOD']; switch ($requestUri) { case '/confirm/widget': if ($requestMethod === 'POST') { confirmPayment($encryptedWidgetSecretKey); } break;
case '/confirm/payment': if ($requestMethod === 'POST') { confirmPayment($encryptedApiSecretKey); } break;
case '/confirm/brandpay': if ($requestMethod === 'POST') { confirmBrandPay($encryptedApiSecretKey); } break;
case '/callback-auth': if ($requestMethod === 'GET') { getAuthToken($encryptedApiSecretKey); } break; case '/issue-billing-key': if ($requestMethod === 'POST') { issueBillingKey($encryptedApiSecretKey); } break;
case '/confirm-billing': if ($requestMethod === 'POST') { confirmBilling($encryptedApiSecretKey, $billingKeyMap); } break; default: echo json_encode(["error" => "Route not found"]); http_response_code(404); break; } 어떻게 처리 해야 할지 문의 드리는 거고요^^ 말씀 주신 README.md 문서에는 저희 상점에 맞추어 API 키를 변경하라고만 나와 있는데 클라이언트 키와 시크릿키를 바꾸면 과연 이 에러가 해결 될까? 의문이네요
const response = await fetch("/confirm/widget", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(requestData), }); 잘 안되는 거 같아 보여서 문의를 드렸어요 index.php에서 받는 거 같은데 $requestUri = $_SERVER['REQUEST_URI']; $requestMethod = $_SERVER['REQUEST_METHOD']; switch ($requestUri) { case '/confirm/widget': if ($requestMethod === 'POST') { confirmPayment($encryptedWidgetSecretKey); } break;
case '/confirm/payment': if ($requestMethod === 'POST') { confirmPayment($encryptedApiSecretKey); } break;
case '/confirm/brandpay': if ($requestMethod === 'POST') { confirmBrandPay($encryptedApiSecretKey); } break;
case '/callback-auth': if ($requestMethod === 'GET') { getAuthToken($encryptedApiSecretKey); } break; case '/issue-billing-key': if ($requestMethod === 'POST') { issueBillingKey($encryptedApiSecretKey); } break;
case '/confirm-billing': if ($requestMethod === 'POST') { confirmBilling($encryptedApiSecretKey, $billingKeyMap); } break; default: echo json_encode(["error" => "Route not found"]); http_response_code(404); break; } 어떻게 처리 해야 할지 문의 드리는 거고요^^ 말씀 주신 README.md 문서에는 저희 상점에 맞추어 API 키를 변경하라고만 나와 있는데 클라이언트 키와 시크릿키를 바꾸면 과연 이 에러가 해결 될까? 의문이네요
GitHub
tosspayments-sample-v1/payment-widget/php at main · tosspayments/to...
토스페이먼츠 SDK v1 샘플 프로젝트입니다. . Contribute to tosspayments/tosspayments-sample-v1 development by creating an account on GitHub.
이게 더 직관적 이실것 같아요
v2 샘플 코드는 확인해보니 php에 적절하지 않은 것 같아요.
위에 유부장님이 올려주신 코드로 확인 부탁드려요.
네 감사합니다.^^ 말씀 주신 거로 진행해 보고 말씀드릴게요~ ㅎㅎㅎ
혹시나 작업이 잘 안되면 다시 메시지 남겨주세요.
참고로 그누보드는 SIR에서 토스페이먼츠 연동 지원하고 있어서, 위젯으로 붙이시는데 어려움이 있으시면 이용하셔도 될 것 같습니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
잘 되네요 ㅎㅎㅎ ^^ 감사합니다.
그다음 결제 취소건에 대해 물어보고 싶은데 여기에 연달아서 물어보아도 되나요? 새 포스트로 작성해야 하나요?
가급적 새 포스트로 진행 부탁 드립니다.
넵