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
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
php 버전이 어떻게 되시나요?
아마도 php 버전이 낮아서 생기는 이슈이실겁니다. 가능하면 php 버전을 올려주시면 좋을것 같아요.
좀 낮은걸로 알고있습니다
혹시 낮은 php 버전에서
해결 할 수 있는 방법은 없을까요?
디비 이슈도 있어서
최소 몇정도를 써야하는지도
함께 확인 부탁 드릴게요
TLS 1.2로 업그레이드하는 방법 | 토스페이먼츠 개발자센터
토스페이먼츠는 안전하지 않은 TLS 1.0, TLS 1.1 보안 채널에 대한 지원을 종료하기로 결정했습니다.
권장하는 최소는
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 버전으로 업그레이드하여 새로운 문법과 보안 개선 사항을 활용하는 것을 권장합니다.
네 감사합니다. 우선 결제가 되는게 중요해서 주신 방법으로 진행해보겠습니다.
3월 까지 대응 하지 않으시면 결제가 안되실 거에요
( 너무 낮은 PHP 버전을 사용하고 있어서 TLS 1.2 미만일 경우)
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
$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도 확인 부탁 드릴게요
<?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); 이렇게 수정해주시면 될거에요.
$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); 이렇게 수정해주시면 될거에요.
흠 주신 소스대로 해도 적용이 되지 않네요 ㅠ
확인되는 에러가 무엇인가요?
페이지 자체가 표시가 안되서 우선 php 버전 올리는 쪽으로 확인해보고 있습니다
이걸로 한번 확인부탁드립니다.
<?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}
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}