ddurrummer
ddurrummer10mo ago

SyntaxError: The string did not match the expected pattern.

php(ver.5.2.17) 로 결제 위젯을 연동하고 있습니다. success.php 통해서 confirm.php를 다녀오면 화면은 결제성공으로 가는데 결제는 정상진행 되지 않고 있으며 아래와 같은 콘솔로그가 발견됩니다. Unhandled Promise Rejection: SyntaxError: The string did not match the expected pattern. 위 오류를 클릭해보면 다음에 소스를 가리키고 있습니다. const json = await response.json(); 여기서 오류내용들을 검색해서 confirm.php 소스의 $data = ['aaa'=>''... 이부분은 버전에 맞게 $data = array('aaa'=>".... 이러한 형식으로 변경하였는데요 동일한 오류가 발견됩니다.ㅠ 소스는 다음과 같습니다. 도움 부탁드립니다. $url = 'https://api.tosspayments.com/v1/payments/confirm'; $data = array('paymentKey' => $paymentKey, 'orderId' => $orderId, 'amount' => $amount); $curlHandle = curl_init($url); curl_setopt_array($curlHandle, array( CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array( 'Authorization: Basic ' . $credential, 'Content-Type: application/json' ), CURLOPT_POSTFIELDS => json_encode($data) )); $response = curl_exec($curlHandle); $httpCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
23 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
ddurrummer
ddurrummerOP10mo ago
No description
ddurrummer
ddurrummerOP10mo ago
주문번호 : 2408221055130001 입니다.
유부장
유부장10mo ago
PHP 버전이 너무 낮으신것 같습니다. 토스페이먼츠는 TLS 1.2 이상의 채널 트래픽만 허용 하고 있는데, 지금 말씀 하신 버전에서는 TLS 1.2 이상으로의 요청이 정상적으로 진행 되지 않을것 같습니다. 저희가 전달드리는 샘플에서 낮은 버전의 PHP 대응 하는 부분 작업 처리도 중요하시겠지만, PHP 버전업을 통해 TLS 1.2 이상의 채널 트래픽을 지원하도록 작업 진행이 필요하십니다.
ddurrummer
ddurrummerOP10mo ago
네 답변 감사합니다. 버전업은 저희가 자체 운영중인 커뮤니티 사이트 전체를 다 바꿔야하는 상황이라 버전업은 현재로써는 어려운 상황입니다.ㅠ 혹시 최소한의 버전업이 몇으로 되어야하는지요? php 버전업 이외 다른 다안은 없는지도 궁금합니다.
유부장
유부장10mo ago
TLS 1.2 대응을 위해서는 OpenSSL 버전 1.1.1 버전 이상으로 업데이트 고려가 되어야 하는데요. 이 버전 이용을 위해서는 최소 PHP 7 이상으로 업데이트가 고려 되어야 합니다. OpenSSL 1.0.2 버전도 이용할 수 있다고는 하는데, 2020 년 부터 더이상 업데이트가 없습니다. (1.0.2u) - 이건 PHP 5.6 이라고는 들었던것 같습니다.
유부장
유부장10mo ago
포기하시고 PHP 7 이상으로 올리시는것을 대체적으로 권장 하시네요
ddurrummer
ddurrummerOP10mo ago
네 답변 감사합니다. 버전업은 사이트 전체를 바꿔야해서 상당기간 걸릴것 같은데.. 이미 pg계약까지 완료된 상태입니다. 다른 되안은 없는지요? 대안은 없는지요
유부장
유부장10mo ago
네, 정말 너무 안타깝게도 TLS 관련해서는 다른 대안이 없을것 같습니다. 원하시는 답변을 드리지 못해 죄송합니다.
ddurrummer
ddurrummerOP10mo ago
네 알겠습니다. 감사합니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
ddurrummer
ddurrummerOP10mo ago
안녕하세요. 서버관리 업체 통해서 확인을 해보았습니다. 현재 저희가 TLS 1.2 OpenSSL 1.0.2a 를 사용하고 있다고 합니다. 그렇다면 트래픽 지원에는 이상이 없는게 아닐까요...
Minsu Kim
Minsu Kim10mo ago
그러면 단계별로 하나하나 짚어봐야겠습니다. 먼저 지금 스크린샷이 사파리같은데 크롬에서 개발자도구를 켜고, Network/네트워크 탭에 가서 Preserve Logs/로그 유지 에 체크하고 다시 결제해보세요. 그 다음 오류가 가르키고 있는 response.json() 이전에 오는 fetch나가는 url이 있을건데 그거랑 동일한 요청을 이 탭에서 찾고 response가 어떻게 오는지 봐주세요. 아마 이때 레스폰스가 php오류로 올겁니다. 이걸 확인해보세요
ddurrummer
ddurrummerOP10mo ago
네 회신드리겠습니다. Uncaught (in promise) SyntaxError: Unexpected token '<', "<br /> <b>"... is not valid JSON <br /> <b>Parse error</b>: syntax error, unexpected '?' in <b>/home/xxxx/public_html/shop2/pay/toss/confirm.php</b> on line <b>6</b><br /> 이런 내용을 발견했습니다.
ddurrummer
ddurrummerOP10mo ago
No description
No description
ddurrummer
ddurrummerOP10mo ago
confirm.php 소스 6라인에는 paymentkey 값밖에 없습니다.
No description
유부장
유부장10mo ago
php 5.3 에서 ?? 라는 operator 를 지원하지 않는다는 의미 입니다. 구 버전의 PHP 는 제가 잘 이해하고 있지는 않지만, isset 으로 동일한 operation 을 수행할 수 있다고 하니 이렇게 해보세요. $paymentKey = isset($jsonObj['paymentKey']) ? $jsonObj['paymentKey'] : '';
ddurrummer
ddurrummerOP10mo ago
네 수정후 결제를 실행해보니 정확한 오류문구가 나옵니다. Call to undefined function http_response_code() 위 함수가 5.4버전부터 지원이 되네요
ddurrummer
ddurrummerOP10mo ago
PHP: Hypertext Preprocessor
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
ddurrummer
ddurrummerOP10mo ago
if (!function_exists('http_response_code')) {.... 이렇 내용이 있던데 어떻게 코드에 따른 text를 구현하면 될까요?
박의원
박의원10mo ago
네 http_response_code 함수자체를 쓸수가 없으니, 1) https://developer.mozilla.org/ko/docs/Web/HTTP/Status 등의 내용을 참고하여 직접 코드별 에러메시지를 구현하거나 2) HTTP 2XX 이외에는, 따로 에러메시지 없이 모두 실패로 처리하거나 하셔야 할것 같습니다.
MDN Web Docs
HTTP 상태 코드 - HTTP | MDN
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고 서버 에러. 상태 코드는 section 10 of RFC 2616에 정의되어 있습니다.
ddurrummer
ddurrummerOP10mo ago
if (!function_exists('http_response_code')) { 이 함수를 사용해서 테스트해보니 잘 구동됩니다. 드디어 해결되었네요 감사합니다 ^^

Did you find this page helpful?