김솔
김솔2mo ago

success.php 문의

결제 호출 후 success.php로 넘어갔을 때 $paymentKey = $_GET['paymentKey']; $orderId = $_GET['orderId']; $amount = $_GET['amount']; $url = 'https://api.tosspayments.com/v1/payments/confirm'; $data = ['paymentKey' => $paymentKey, 'orderId' => $orderId, 'amount' => $amount]; data 부분에서 에러가 나고 넘어가지 않습니다. 무엇이 문제일까요 ㅠ
14 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Kimoon Lee
Kimoon Lee2mo ago
php 버전이 어떻게 되시나요? 아마도 php 버전이 낮아서 생기는 이슈이실겁니다. 가능하면 php 버전을 올려주시면 좋을것 같아요.
김솔
김솔OP2mo ago
좀 낮은걸로 알고있습니다 혹시 낮은 php 버전에서 해결 할 수 있는 방법은 없을까요? 디비 이슈도 있어서 최소 몇정도를 써야하는지도 함께 확인 부탁 드릴게요
유부장
유부장2mo ago
TLS 1.2로 업그레이드하는 방법 | 토스페이먼츠 개발자센터
토스페이먼츠는 안전하지 않은 TLS 1.0, TLS 1.1 보안 채널에 대한 지원을 종료하기로 결정했습니다.
유부장
유부장2mo ago
권장하는 최소는 PHP 5.6.0 이상 - OpenSSL version 1.0.1 이상 - cURL version 7.34.0 이상 이고요 [ => ] 이거 처리를 다르게 바꾸셔야 하는데요 PHP 버전 알려주세요 chatgpt 통해서 질문하면 아래와 같이 답변 합니다. 오래된 PHP 버전에서는 짧은 배열 표기법 ([])이 지원되지 않으므로, 기존의 array() 구문을 사용해야 합니다. 따라서 아래와 같이 대체할 수 있습니다: $data = array('paymentKey' => $paymentKey, 'orderId' => $orderId, 'amount' => $amount); 가능하다면 최신 PHP 버전으로 업그레이드하여 새로운 문법과 보안 개선 사항을 활용하는 것을 권장합니다.
김솔
김솔OP2mo ago
네 감사합니다. 우선 결제가 되는게 중요해서 주신 방법으로 진행해보겠습니다.
유부장
유부장2mo ago
3월 까지 대응 하지 않으시면 결제가 안되실 거에요 ( 너무 낮은 PHP 버전을 사용하고 있어서 TLS 1.2 미만일 경우)
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
김솔
김솔OP2mo ago
$curlHandle = curl_init($url); curl_setopt_array($curlHandle, [ CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => [ 'Authorization: Basic ' . $credential, 'Content-Type: application/json' ], CURLOPT_POSTFIELDS => json_encode($data) ]); 이 부분 array도 확인 부탁 드릴게요
Kimoon Lee
Kimoon Lee2mo ago
<?php session_start(); $key = 'secret key'.':'; $apiKey = base64_encode($key); $orderId = $_GET['orderId']; $paymentKey = $_GET['paymentKey']; $amount = $_GET['amount']; $url = 'https://api.tosspayments.com/v1/payments/'.$paymentKey; $param = array('amount' => $amount , 'orderId' => $orderId); $postField= json_encode($param,1); if($_GET['code'] == 'PAY_PROCESS_CANCELED') { echo("<script>alert('사용자가 결제를 취소하였습니다');</script>"); echo("<script>window.location.href='./startSDK.html';</script>"); exit; } $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $postField, CURLOPT_HTTPHEADER => [ "Authorization: Basic $apiKey", "Content-Type: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else {
$result = json_decode($response,1); $result['message'] = iconv('utf-8','euc-kr',$result['message']); $result['card']['company'] = iconv('utf-8','euc-kr',$result['card']['company']); $result['card']['cardType'] = iconv('utf-8','euc-kr',$result['card']['cardType']); $result['card']['ownerType'] = iconv('utf-8','euc-kr',$result['card']['ownerType']); $result['method'] = iconv('utf-8','euc-kr',$result['method']);
print_r($response); } ?> 이코드 참고하시기 바랍니다. $url = 'https://api.tosspayments.com/v1/payments/'.$paymentKey; $param = array('amount' => $amount , 'orderId' => $orderId); $postField= json_encode($param,1); 이부분은 $url = 'https://api.tosspayments.com/v1/payments/confirm'; $param = array('paymentKey' =>$paymentKey, 'amount' => $amount , 'orderId' => $orderId); $postField= json_encode($param,1); 이렇게 수정해주시면 될거에요.
김솔
김솔OP2mo ago
흠 주신 소스대로 해도 적용이 되지 않네요 ㅠ
유부장
유부장2mo ago
확인되는 에러가 무엇인가요?
김솔
김솔OP2mo ago
페이지 자체가 표시가 안되서 우선 php 버전 올리는 쪽으로 확인해보고 있습니다
박의원
박의원2mo ago
이걸로 한번 확인부탁드립니다. <?php header('Content-Type: text/html; charset=utf-8'); $key = 'secretkey 입력'.':'; $apiKey = base64_encode($key); $orderId = $_GET['orderId']; $paymentKey = $_GET['paymentKey']; $amount = $_GET['amount']; $url = 'https://api.tosspayments.com/v1/payments/confirm'; $param = array('paymentKey' => $paymentKey, 'amount' => $amount , 'orderId' => $orderId); $postField= json_encode($param,1); $headers[] = 'Authorization: Basic '.$apiKey; $headers[] = 'Content-Type: application/json'; if($_GET['code'] == 'PAY_PROCESS_CANCELED') { echo("<script>alert('사용자가 결제를 취소하였습니다');</script>"); echo("<script>window.location.href='결제창호출페이지';</script>"); exit; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch,CURLOPT_POSTFIELDS, $postField); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //헤더 $result = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { echo "cURL Error #:" . $err; } else {
echo($result); } ?> secretkey는 직접 설정하셔야 합니다. 그리고 만약 저걸로 아래와 같은 에러가 나오면 회신주시기 바랍니다. {"code":"UNSUPPORTED_TLS_VERSION","message":"TLS 버전 1.2 이상을 사용해주세요. 1.2 미만의 버전은 지원하지 않습니다.","data":null}

Did you find this page helpful?