요청한 LGD_PAYKEY가 존재하지 않습니다. 오류발생!
안녕하세요. 에전에 크롬 samesite 관련 이슈 이후에 결제시 이런 오류가 간헐적으로 발생하고 있습니다.
이 문제가 브라우저의 cookie 기본 정책이 none에서 lex로 바뀌면서 야기된 문제로 들었는데요.
기존 소스코드 수정 없이 웹서버 단에서 옛날 방식으로 일괄 적용이 가능하다고 해서
사이트에 https를 적용하고 apache에서
<IfModule headers_module> Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure </IfModule> 를 설정하였고 브라우저 개발자 도구에서 쿠키를 확인해보면 PHPSESSID에 Secure가 체크되고 Samesite에는 None로 적용된것 까지 확인했습니다. 여전히 동일한 증상이 발생되고 있습니다. 어떤 부분이 문제일까요?
<IfModule headers_module> Header always edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure </IfModule> 를 설정하였고 브라우저 개발자 도구에서 쿠키를 확인해보면 PHPSESSID에 Secure가 체크되고 Samesite에는 None로 적용된것 까지 확인했습니다. 여전히 동일한 증상이 발생되고 있습니다. 어떤 부분이 문제일까요?
70 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
상점ID가 어떻게 되실까요? 주문번호 있으면 같이 알려주시면 좋습니다.
말씀하신 오류 메세지는 결제 승인 요청할 때 xpay 모듈에서 키값으로 쓰이는 LGD_PAYKEY 값이 없는 값이거나
또는 간혹 해당 값이 빈값으로 요청이 되면 발생합니다.
잘못된 값으로 요청하기 보다는 PaymentByKey 로 승인 요청할 때 LGD_PAYKEY 값이 빈값인 경우가 대부분이긴 합니다.
상점아이디는 m4study입니다. 토스상점관리자에는 실패 건이 안잡히는걸 보면 저희 서버쪽 결제모듈에서 바로 출력시켜주는 오류가 아닐까요?
승인까지 오지 않았기 때문에 상점관리자에 안나오는게 맞습니다.
그럼 토스쪽 서버에 다른 기록은 남나요?
m4study 로 한번 확인해볼게요
넵
LGD_PAYKEY 를 빈 값으로 넣어서 보내시고 있습니다.

다른 값들도 없는게 아니라 LGD_PAYKEY 하나만 값이 없다는 거죠?
PaymentByKey 일 때 LGD_PAYKEY 가 필수 값입니다.
amountcheckyn 이나 amount 는 옵셔널한 값이구요.
인증까지 완료되어 LGD_PAYKEY 값을 받고서, 이후에 승인을 해야하는 LGD_PAYKEY 가 누락되어 승인 요청할 거래를 특정할 수 없는거라고 보시면 됩니다.
저희 쪽에서 올바로 설정이 안되었다는 건가요?
아니면 저희쪽에서 설정을 했어도 진행되면서 누락될 수 있다는 건가요?
설정이 아니라 승인 요청시 파라미터 값이 누락된거에요.
저 위에 요청 페이로드는 저희쪽으로 주신거구요.
혹시 어떤 결제창 사용중이세요?
웹에서 결제하기 버튼 클릭시 카드결제 창이 뜨는데요.
버튼 클릭전에 LGD_PAYKEY가 올바로 설정이 안되었다는 건가요?
구 XPay이듯 합니다. return_url 사용하는
Google Docs
XPAY[PC]통합결제창-카드_v.1.0.3
Xpay-PC-통합결제창-카드결제 Protocol and Core Function Specification Version 1.0.3 2022.09 목차 XPay 연동 샘플 파일 구조 3 XPay 결제 서비스 파라미터 4 ▪ 통합결제창 호출 요청 파라미터 4 ▪ 통합결제창 인증 응답 파라미터 7 ▪ 결제 승인 요청 파라미터 7 ▪ 결제 승인 응답 파라미터 8 ▪ 간편결제 유형별 응답파라미터 정의 9 XPay 연동 샘플 파일 구조 TossPayments에서 제공되는 샘플파일은 X...
결제창에서 인증종료후 LGD_RETURNURL에서 LGD_PAYKEY를 받습니다. 이 값을 승인요청페이지인 payres 로 넘긴후, payres 에서 승인요청을 하는 구조인데, payres 에서 셋팅되서 같이 넘어와야 하는 LGD_PAYKEY가 누락되어 발생한 에러입니다.
LGD_RETURNURL 쪽 소스가 지금 어떻게 되어 있는지 여기 공유해주실수 있으실까요?
예전에 로그인이 풀리는 문제때문에 로그인 정보를 디비에 저장했다 다시 살리는 로직이 추가되서 좀 복잡하네요.
혹시 returnurl 소스에서 세션을 사용하고 있을까요?
그런것 같아요
그렇군요. nosession 버전이 있는데 변경해주시면 될 것 같습니다.
잠시만요
최근 결제 버전 말씀이시죠?
https://drive.google.com/drive/u/0/folders/1XytZZ1sdWFxT5SiRVtjgov1xVix83RSb
네, 최신이라고 하기에는 유플러스때 수년전에 나온 nosession 버전이긴 한데
xpay 모듈은 위 링크에 가장 최신 버전으로 관리하고 있습니다.
위 기대리님이 공유주신 샘플소스를 기반으로 수정해주시면 가장 좋고,
아래 링크 매뉴얼을 참고하셔서 세션부분만 제거 수정해서 확인부탁드립니다.
https://docs.google.com/document/d/1TU3isbNuyOIxcXQZDb153drpvX0CAlZv/edit?usp=drive_link&ouid=102910184933088943289&rtpof=true&sd=true
Google Docs
Tosspayments Xpay 결제창 변경가이드(Session-Non Session).docx
개요 2020년 이후 강화된 크롬 브라우져의 보안정책에 따라, xpay결제창을 호출하는 가맹점 페이지에 https를 적용하지 않을 경우, 종전에 session 으로 처리하던 결제요청 파라미터가 유실되어 정상적인 결제진행이 어려울 수 있습니다. (관련 공지 : https://www.tosspayments.com/notice/57 ) 따라서, session 방식으로 결제요청 파라미터를 처리하는 기존 가맹점은 결제요청 파리미터 전송시 session을 사용하지 않는 Non-Session ...
GitHub
tosspayments-sample-v1/payment/payment-window/php at main · tosspay...
토스페이먼츠 SDK v1 샘플 프로젝트입니다. . Contribute to tosspayments/tosspayments-sample-v1 development by creating an account on GitHub.
이곳의 연동모듈과 같은 건가요?
전화로 안내받은 링크가 저거긴 했거든요.
session 안쓰는 최신 버전이라고 하더라고요
그 문서는 신규 SDK 이고, XPay 모듈은 위 구글 드라이브 링크를 사용해주셔야해요
지금 사용하시는것이 XPAY이기 때문에 XPAY기반의 세션제거가이드가 맞을것 같습니다
아 위에꺼는 XPay에서 조금 수정한 것이라는거죠?
네 맞습니다
네 알겠습니다. 감사합니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
PC 쪽은 일단 적용해 보았는데요.
혹시 Mobile 모듈은 변경사항이 없는건가요?
모바일은 따로 세션처리를 안합니다. 모바일도 동일에러가 나나요?
아니요. 모바일 쪽으론 returnurl로 값이 아무것도 전달이 안되는것 같아요.
모바일은 모듈이 비슷한듯 일부가 다른듯 한데 저희가 사용중인 모바일 모듈 버전을 그쪽에서 알 수 있나요?
소스 코드에 설정된 값으련
$LGD_CUSTOM_SKIN = "SMART_XPAY2"; //상점정의 결제창 스킨
$LGD_VERSION = "PHP_SmartXPay_1.0"; // 버전정보 (삭제하지 마세요)
이런게 있습니다. 서버에 연동모듈 원소스들이 아래 폴더 이름들로 있는데요. 각자 모듈의 용도가 아래 코멘트 적은것이 맞을까요? LGU+SmartXPay_PHP : 모바일용 연동모듈 LGU+XPay_Crossplatform_PHP : PC용 연동모듈 LGU+XPayClient_SmartXpayBilling_PHP-new : 모바일용 정기결제(자동결제) 모듈 LGU+XPayCrossplatform_CardBilling_PHP-new : 모바일용 정기결제(자동결제) 모듈 구현된 부분과 원래 연동샘플과 비교해 보려고요. 일반결제(PC), 일반결제(Mobile), 정기결제(PC), 정기결제(Mobile)을 한 코드에서 쓸수 있게 통합해 두었는데요. 앞서 returnurl 수정후에 PC에서는 일반결제와 정기결제 둘다 정상적인데 모바일에서는 저희가 구현하면서 방식 자체가 달라졌는지 제대로 안되고 있네요. 그래서 저희가 사용했던 샘플 연동 소스가 어떤것인지 확인되면 먼저 비교부터 해보려고요.
이런게 있습니다. 서버에 연동모듈 원소스들이 아래 폴더 이름들로 있는데요. 각자 모듈의 용도가 아래 코멘트 적은것이 맞을까요? LGU+SmartXPay_PHP : 모바일용 연동모듈 LGU+XPay_Crossplatform_PHP : PC용 연동모듈 LGU+XPayClient_SmartXpayBilling_PHP-new : 모바일용 정기결제(자동결제) 모듈 LGU+XPayCrossplatform_CardBilling_PHP-new : 모바일용 정기결제(자동결제) 모듈 구현된 부분과 원래 연동샘플과 비교해 보려고요. 일반결제(PC), 일반결제(Mobile), 정기결제(PC), 정기결제(Mobile)을 한 코드에서 쓸수 있게 통합해 두었는데요. 앞서 returnurl 수정후에 PC에서는 일반결제와 정기결제 둘다 정상적인데 모바일에서는 저희가 구현하면서 방식 자체가 달라졌는지 제대로 안되고 있네요. 그래서 저희가 사용했던 샘플 연동 소스가 어떤것인지 확인되면 먼저 비교부터 해보려고요.
위에 적어주신 샘플파일과 연동종류는 맞습니다.
모바일과 PC는 소스가 많이 유사하기는 한데,
PC : iframe 방식으로 처리
모바일 : submit 방식으로 처리
가 다릅니다. 그래서 returnurl을 PC와 모바일 똑같은 소스로 구현하면 둘중 하나는 결제요청이 넘어가지 않습니다.
(PC쪽은 parent. 로 해서 결제창을 띄운 페이지를 submit 시킴)
LGU+SmartXPay_PHP 과 LGU+XPay_Crossplatform_PHP 를 비교해보시고, 특히 returnUrl 쪽 처리를 확인해보시기 바랍니다.
LGU+SmartXPay_PHP의 returnurl.php를 보면
<?php
/*
payreq_crossplatform ���� ���ǿ� �����ߴ� �Ķ���� ���� ��ȿ���� üũ
���� ���� �ð�(�α��� �����ð�)�� ������ ���� �ϰų� ������ ������� �ʴ� ��� DBó�� �Ͻñ� �ٶ��ϴ�.
/
session_start();
if(!isset($_SESSION['PAYREQ_MAP'])){
echo "������ ���� �Ǿ��ų� ��ȿ���� ���� ��û �Դϴ�.";
return;
}
$payReqMap = $_SESSION['PAYREQ_MAP'];//���� ��û��, Session�� �����ߴ� �Ķ���� MAP
?>
<html>
<head>
<script type="text/javascript">
function setLGDResult() {
document.getElementById('LGD_PAYINFO').submit();
}
</script>
</head>
<body onload="setLGDResult()">
<?php
$LGD_RESPCODE = $_REQUEST['LGD_RESPCODE'];
$LGD_RESPMSG = $_REQUEST['LGD_RESPMSG'];
$LGD_PAYKEY = "";
if($LGD_RESPCODE == "0000"){
$LGD_PAYKEY = $_REQUEST['LGD_PAYKEY'];
$payReqMap['LGD_RESPCODE'] = $LGD_RESPCODE;
$payReqMap['LGD_RESPMSG'] = $LGD_RESPMSG;
$payReqMap['LGD_PAYKEY'] = $LGD_PAYKEY;
?>
<form method="post" name="LGD_PAYINFO" id="LGD_PAYINFO" action="payres.php">
<?php
foreach ($payReqMap as $key => $value) {
echo "<input type='hidden' name='$key' id='$key' value='$value'>";
}
?>
</form>
<?php
}
else{
echo "LGD_RESPCODE:" + $LGD_RESPCODE + " ,LGD_RESPMSG:" + $LGD_RESPMSG; //���� ���п� ���� ó�� ���� �߰�
}
?>
</body>
</html>
이렇게 session_start()가 있는데 맞을까요?
LGU+XPayClient_SmartXpayBilling_PHP-new 의 returnurl.php도
<?php
/
payreq_crossplatform 에서 세션에 저장했던 파라미터 값이 유효한지 체크
세션 유지 시간(로그인 유지시간)을 적당히 유지 하거나 세션을 사용하지 않는 경우 DB처리 하시기 바랍니다.
*/
session_start();
if(!isset($_SESSION['PAYREQ_MAP'])){
echo "세션이 만료 되었거나 유효하지 않은 요청 입니다.";
return;
}
$payReqMap = $_SESSION['PAYREQ_MAP'];//결제 요청시, Session에 저장했던 파라미터 MAP
?>
<html>
<head>
<script type="text/javascript">
function setLGDResult() {
document.getElementById('LGD_PAYINFO').submit();
}
</script>
</head>
<body onload="setLGDResult()">
<?php
$LGD_RESPCODE = $_REQUEST['LGD_RESPCODE'];
$LGD_RESPMSG = $_REQUEST['LGD_RESPMSG'];
$LGD_BILLKEY = "";
if($LGD_RESPCODE == "0000"){
$LGD_BILLKEY = $_REQUEST['LGD_BILLKEY'];
$payReqMap['LGD_RESPCODE'] = $LGD_RESPCODE;
$payReqMap['LGD_RESPMSG'] = $LGD_RESPMSG;
$payReqMap['LGD_BILLKEY'] = $LGD_BILLKEY;
?>
<form method="post" name="LGD_PAYINFO" id="LGD_PAYINFO" action="SmartXpay_CardBillingAuth_payres.php">
<?php
foreach ($payReqMap as $key => $value) {
echo "<input type='hidden' name='$key' id='$key' value='$value'>";
}
?>
</form>
<?php
}
else{
echo "LGD_RESPCODE:" + $LGD_RESPCODE + " ,LGD_RESPMSG:" + $LGD_RESPMSG; //인증 실패에 대한 처리 로직 추가
}
?>
</body>
</html>
요렇게 되어 있어요.
아..혹시 샘플은 어디서 받으셨나요? 지금 주신것을 보면 전부 세션처리를 하네요
엄청 오래전이라 잘 모르겠어요.
그리고 기존 구현에서 return_url에서
모바일인 경우만 다음처럼 처리해 주었습니다.
<script type="text/javascript">
function setLGDResult() {
<?php if ( $field['is_mobile'] == 'Yes' ) { ?>
document.getElementById('LGD_RETURNINFO').action = "<?php echo $script_path.'/step-02.process.php';?>";
document.getElementById('LGD_RETURNINFO').submit();
<?php } else { ?>
parent.payment_return(); // from에 정의된 payment_return함수 (PC전용)
try {
} catch (e) {
alert( e.message );
}
<?php } ?>
}
</script>
submit로 넘겼네요
아래 샘플로 확인해주실수 있으실까요?
LGU+SmartXPay_PHP
https://drive.google.com/file/d/177tVX-EE24Qnsz8_UNzecsj5Rb3G7JVZ/view?usp=drive_link
Google Docs
TossPayments_MobileXPay_no_session_PHP.zip
저 링크에서 다운로드 하신 returnurl.php 대로, 기존 모바일쪽을 수정해서 테스트해보세요
넵 감사합니다.
혹시 정기 결제 관련도 있을까요? 모바일 쪽이요.
정기결제 모바일도 session_start()코드가 있어요
LGU+XPayCrossplatform_CardBilling_PHP-new : PC용 정기결제(자동결제) 모듈
https://drive.google.com/file/d/1sQx7BYczfhqCtGMhb2ZinhAH8TLZ3ZhD/view?usp=drive_link
Google Docs
TossPayments_CardBilling_PHP.zip
이걸 쓰시면 될것 같구요
모바일은 패키징을 다시 해야 할것 같습니다. 이건 괜찮으시면 내일 오전중에 다시 회신드리겠습니다.
넵 감사합니다.
저도 내일 다시 적용해서 확인해 볼게요.
안녕하세요 모바일 빌링 nossion 버전 전달드립니다. 아래 링크에서 다운로드해서 확인해보시기 바랍니다.
https://drive.google.com/file/d/1Q5Z1nr4Kc1kcGZG7hUjd3ZJ13pUqv-SF/view?usp=drive_link
안녕하세요.
이 소스코드를 설치해서 테스트 해보고 있는데요.
이 소스코드가 올바로 작동하지 않는것 같아요.
결제하기 클릭시 아무런 반응이 없어요.
참고로
<script language="javascript" src="https://pretest.tosspayments.com:9443/xpay/js/xpay_crossplatform.js" type="text/javascript"></script>
이 코드를 아래 코드로 변경하면 결제 팝업이 실행됩니다.
<script language="javascript" src="https://xpay.uplus.co.kr/xpay/js/xpay_crossplatform.js" type="text/javascript"></script>
로 변경시 결페 화면이
service 모드는 정상 작동하네요.
service 모드로 테스트 해볼게요.
그리고
PC용 Xpay
스마트폰용 Xpay
PC용 정기결제
스마트폰용 정기결제
모듈들의 폴더 하에 있는
lgdacom/XpayClient.php를 사용해야 하는거죠?
예전엔 PC용 xpay의 lgdacom/XpayClient.php를 공통으로 써도 문제가 없었거든요.
아,
아래와 같이 변경해주시기 바랍니다.
url = https://xpayvvipclient.tosspayments.com/xpay/Gateway.do
test_url = https://xpay-gateway-sandbox.tosspayments.com/xpay/Gateway.do
그리고 결제창 호출 js 주소도 아래와 같이 변경해주시기 바랍니다.
운영 :
https://xpayvvip.tosspayments.com/xpay/js/xpay_crossplatform.js
테스트 :
https://js.tosspayments.com/xpay_crossplatform/sandbox/v1
url = https://xpayvvipclient.tosspayments.com/xpay/Gateway.do
test_url = https://xpay-gateway-sandbox.tosspayments.com/xpay/Gateway.do
이건 무엇에 대한 url인가요?
그리고 payreq_crossplatform.php의
</form> 위에
<input type="text" id="custom_001" name="custom_001" value="사용자 값 1"/>
<input type="text" id="custom_002" name="custom_002" value="사용자 값 2"/>
<input type="text" id="custom_003" name="custom_003" value="사용자 값 1"/>
를 추가한 다음
payres.php에서
페이지 상단에
print_r( $_REQUEST);
를 추가했습니다.
이때 payres.php에는 custom_001, custom_002, custom_003 값이 전달이 안되는데요.
이러한 값들이 전달되게 하려면 어떻게 해야하나요?
참고로 PC용 Xpay에는 지난번에 returnurl.php을 nosession으로 변경한 다음 테스트 해 보았을 때에는 위와 같은 사용자 값들이 payres.php 쪽으로도 전달이 되었습니다.
모바일만 전달이 안되서
샘플파일로 다시 테스트 중인데 위와 같이 테스트용 코드를 집어넣어서 테스트를 해보았는데 역시 전달이 안되네요.
추가로 PC모듈에서도 returnurl.php에는 사용자 정의 값들이 전달되지 않지만
returnurl.php이후 호출되는 payres.php에서는 $_REQUEST 값안에 출력됩니다.
제 추측으로는 PC는 iframe방식을 쓰는거라
payreq에 설정된 값이 returnurl이 실행되더라도
결국엔 payreq -> payres로 폼이 전송되서 가능한 것이고
모바일은 submit 방식을 쓰는거라
payreq -> returnurl -> payres로 진행되면서 사용자 정의 form 요소 값이 전달이 안되는것 같은데요.
핵심은 모바일에서도 사용자 정의 값들이 payres까지 전달되도록 하는 방법입니다.
안녕하세요. 혹시 아직 확인이 안되었을까요?
답변만 기다리고 있어요. ㅜㅜ
핵심은 모바일에서도 사용자 정의 값들이 payres까지 전달되도록 하는 방법입니다.말씀하신 방식으로 처리 되기 때문에 전달을 할수가 없습니다. 세션등을 이용해서 보관해 주셔야 합니다.
별도의 사용자용 값을 위한 필드는 없는건가요?
예를들어 LGD_CUSTOM 같은 종류의 것처럼요.
<input type="hidden" id="LGD_RETURN_MERT_CUSTOM_PARAM" name="LGD_RETURN_MERT_CUSTOM_PARAM" value="Y"/>
이렇게 하시고 동시에
<input type="hidden" id="CUSTOM_PARAMETER2" name="CUSTOMPARAMETER2" value="상점정의 파라미터 값 2번입니다" />
이런식으로 CUSTOM 로 시작하는 이름으로 보내시면 returnURL 에 post 로 전달될겁니다. 그걸 받아서 직접 payres 로 보내주시면 될거에요.
아 그럼 CUSTOM_ 로 시작하는 것들은 다 전달되는거죠?
추가 질문 드립니다.
1. 이 기능이 PC쪽 모듈도 동일하게 사용가능한가요?
2. 정기결제 모듈도 동일하게 사용이 가능한가요? (PC, Mobile)
모두 사용이 가능한 것으로 알고 있습니다.
넵 감사합니다.
참고로 지난주에 XPay no-session버전으로
일반결제-모바일
정기결제-모바일
정기결제-PC
모듈을 주셔서 받았는데요.
PC는 no-session용 returnurl만 받아서 비교해보며 수정했습니다.
일반결제-PC 샘플 코드도 주실 수 있을 까요?
그리고 각 모듈(4개)에 대한 연동메뉴얼도 부탁드립니다.
지금 제공해 드린게 정기결제-모바일 아니신가요?
아.. 일반 결제 PC 샘플을 요청하시는 거군요.
넵
https://drive.google.com/drive/folders/1XytZZ1sdWFxT5SiRVtjgov1xVix83RSb?usp=share_link
https://drive.google.com/drive/folders/1uvvFmoyHRgg-x4KOiH2qwklAa6IuDAx3?usp=share_link
https://drive.google.com/drive/folders/1IEnJeixz6SCk2QT7vAumZXnM5KgBDzXT?usp=share_link
https://drive.google.com/drive/folders/1k_oXzOtvLsH076BlBQC7zPRX6Z8GJ4-o?usp=share_link
순서대로 일반-PC
빌링-PC
일반 - 모바일, 빌링 - 모바일순입니다.
일반결제 PC, Mobile은 연동 메뉴얼이 문서가 없네요. 빌링 모듈은 구글 문서로 있는듯 하고요.
카드 폴더에 들어가시면 없으신가요?
찾았어요. 감사합니다.
아 그리고 이 4개의 모듈 안에
lgdacom/XPayClient.php가 있는데요.
이 모듈은 각 연동모듈 안에 있는걸 사용해야 하나요?
아니면 일반결제-PC 폴더 안에 있는걸 같이 써도 무방하나요?
같이 사용하셔도 됩니다.
감사합니다.
안녕하세요.
Mobile 정기결제 모듈 테스트 중인데요.
신용카드가 아니거나, 카드번호를 잘못 입력하셨습니다. (Invalid card number) (C001)
alert 실행 후에 첨부파일과 같은 화면이 표시됩니다.

그리고 이 화면의 링크 주소는 https://payment-gateway.tosspayments.com/billing/mobile/sms-authentication/confirm?token=45331a6fb4844de1bc1a5c768cf28b52df28b83eedb9491a96d203451e6ec6bf>id=a2408270a5cbe8c878c479c8327196920442975 입니다.
카드 번호는 정상적이고요. 모바일에서 4번 정도 시도 해보았지만 동일한 상황입니다.
참고로 PC에서 정기결제 진행시에는 정상 결제 되었습니다. 카드 문제가 아니라 값 전달 문제일듯 한데
로그에서 어떤 값이 제대로 전달이 안된 것인지 확인 가능할까요?
추가로 위 화면처럼 실제 결제는 안된 상황인데 위와 같은 오류페이지 내부에
"이미 결제가 완료되었습니다" 란 문구가 고객들에게 큰 오해를 줄 것 같아요.
지금 신용카드가 아니거나, 카드번호를 잘못 입력하셨습니다. (Invalid card number) (C001) 에러를 빌키로 결제 할때 에러 나시는 걸까요?
지금 로그를 보면 빌링키를 안보내고 계십니다.
<html>
<head>
<script type="text/javascript">
function setLGDResult() {
document.getElementById('LGD_PAYINFO').submit();
}
</script>
</head>
<body onload="setLGDResult()">
<?php
$LGD_RESPCODE = $_REQUEST['LGD_RESPCODE'];
$LGD_RESPMSG = $_REQUEST['LGD_RESPMSG'];
$LGD_BILLKEY = "";
if($LGD_RESPCODE == "0000"){
$LGD_BILLKEY = $_REQUEST['LGD_BILLKEY']; ?> <form method="post" name="LGD_PAYINFO" id="LGD_PAYINFO" action="SmartXpay_CardBillingAuth_payres.php"> <input type="hidden" id="LGD_RESPCODE" name="LGD_RESPCODE" value="<?= $LGD_RESPCODE ?>"/> <input type="hidden" id="LGD_RESPMSG" name="LGD_RESPMSG" value="<?= $LGD_RESPMSG ?>"/> <input type="hidden" id="LGD_PAYKEY" name="LGD_PAYKEY" value="<?= $LGD_BILLKEY ?>"/> </form> <?php } else{ echo "LGD_RESPCODE:" + $LGD_RESPCODE + " ,LGD_RESPMSG:" + $LGD_RESPMSG; //인증 실패에 대한 처리 로직 추가 } ?> </body> </html> TossPayments_MobileXpayBilling_NOSESSION_PHP 의 returnurl.php 샘플인데요. 앞서 결제가 안되서 이 코드로 적용해서 확인중인데요. 이 코드도 좀 이상합니다. PC용 모듈과 통일성이 없는 부분이 PC용 정기결제 모듈은 LGD_PAYKEY가 아닌 LGD_BILLKEY가 사용되는데 이 예시에서는 input에 LGD_PAYKEY가 넘기도록 되어 있는데 이 코드가 잘못 된거죠? 모바일 정기결제 문제가 해결되었습니다. 그런데 모바일용 정기결제 샘플로 보내주신 코드가 잘못된듯 하네요. . 한번 확인해 보시는게 좋을듯 합니다.
$LGD_BILLKEY = $_REQUEST['LGD_BILLKEY']; ?> <form method="post" name="LGD_PAYINFO" id="LGD_PAYINFO" action="SmartXpay_CardBillingAuth_payres.php"> <input type="hidden" id="LGD_RESPCODE" name="LGD_RESPCODE" value="<?= $LGD_RESPCODE ?>"/> <input type="hidden" id="LGD_RESPMSG" name="LGD_RESPMSG" value="<?= $LGD_RESPMSG ?>"/> <input type="hidden" id="LGD_PAYKEY" name="LGD_PAYKEY" value="<?= $LGD_BILLKEY ?>"/> </form> <?php } else{ echo "LGD_RESPCODE:" + $LGD_RESPCODE + " ,LGD_RESPMSG:" + $LGD_RESPMSG; //인증 실패에 대한 처리 로직 추가 } ?> </body> </html> TossPayments_MobileXpayBilling_NOSESSION_PHP 의 returnurl.php 샘플인데요. 앞서 결제가 안되서 이 코드로 적용해서 확인중인데요. 이 코드도 좀 이상합니다. PC용 모듈과 통일성이 없는 부분이 PC용 정기결제 모듈은 LGD_PAYKEY가 아닌 LGD_BILLKEY가 사용되는데 이 예시에서는 input에 LGD_PAYKEY가 넘기도록 되어 있는데 이 코드가 잘못 된거죠? 모바일 정기결제 문제가 해결되었습니다. 그런데 모바일용 정기결제 샘플로 보내주신 코드가 잘못된듯 하네요. . 한번 확인해 보시는게 좋을듯 합니다.
감사합니다. 저희도 확인해보겠습니다. 특이사항은 또 문의주세요