/home/mjc1/public_html/j3demo/shopm/xpay/payres.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?php
    
include("./_common.php");

    
$cont json_encode($_POST);
    
payment_log("lg_m_payres"$cont""); // 결제시 로그 저장
    
$od_id $_POST['LGD_OID'];

    
$od_info order_info_get_od_id($od_id);
    
//_pr($od_info);
    /*
     * [최종결제요청 페이지(STEP2-2)]
     *
     * 매뉴얼 "5.1. Smart XPay 결제 요청 페이지 개발"의 "단계 5. 최종 결제 요청 및 요청 결과 처리" 참조
     *
     * LG유플러스으로 부터 내려받은 LGD_PAYKEY(인증Key)를 가지고 최종 결제요청.(파라미터 전달시 POST를 사용하세요)
     */
    
    /* ※ 중요
    * 환경설정 파일의 경우 반드시 외부에서 접근이 가능한 경로에 두시면 안됩니다.
    * 해당 환경파일이 외부에 노출이 되는 경우 해킹의 위험이 존재하므로 반드시 외부에서 접근이 불가능한 경로에 두시기 바랍니다. 
    * 예) [Window 계열] C:\inetpub\wwwroot\lgdacom ==> 절대불가(웹 디렉토리)
    */

    
$configPath "{$j3_shopm_path}/xpay/lgdacom"//LG유플러스에서 제공한 환경파일("/conf/lgdacom.conf,/conf/mall.conf") 위치 지정. 

    /*
     *************************************************
     * 1.최종결제 요청 - BEGIN
     *  (단, 최종 금액체크를 원하시는 경우 금액체크 부분 주석을 제거 하시면 됩니다.)
     *************************************************
     */
    
$CST_PLATFORM               $_POST["CST_PLATFORM"];
    
$CST_MID                    $_POST["CST_MID"];
    
$LGD_MID                    = (("test" == $CST_PLATFORM)?"t":"").$CST_MID;
    
$LGD_PAYKEY                 $_POST["LGD_PAYKEY"];

    
// PHP용 XpayClient 모듈
    
require_once("{$j3_shop_path}/xpay/lgdacom/XPayClient.php");

    
// (1) XpayClient의 사용을 위한 xpay 객체 생성
    // (2) Init: XPayClient 초기화(환경설정 파일 로드) 
    // configPath: 설정파일
    // CST_PLATFORM: - test, service 값에 따라 lgdacom.conf의 test_url(test) 또는 url(srvice) 사용
    //                - test, service 값에 따라 테스트용 또는 서비스용 아이디 생성
    
$xpay = &new XPayClient($configPath$CST_PLATFORM);
    
    
// (3) Init_TX: 메모리에 mall.conf, lgdacom.conf 할당 및 트랜잭션의 고유한 키 TXID 생성
    
$xpay->Init_TX($LGD_MID);    
    
$xpay->Set("LGD_TXNAME""PaymentByKey");
    
$xpay->Set("LGD_PAYKEY"$LGD_PAYKEY);
    
    
//금액을 체크하시기 원하는 경우 아래 주석을 풀어서 이용하십시요.
    
$DB_AMOUNT $_SESSION['DBAMOUNT']; //반드시 위변조가 불가능한 곳(DB나 세션)에서 금액을 가져오십시요.
    
if($od_info['wdeposit_price']!=$DB_AMOUNT){ $DB_AMOUNT ""; } // 세션과 DB의 결제금액이 같은지 확인한다.
    
$xpay->Set("LGD_AMOUNTCHECKYN""Y");
    
$xpay->Set("LGD_AMOUNT"$DB_AMOUNT);
        
    
/*
     *************************************************
     * 1.최종결제 요청(수정하지 마세요) - END
     *************************************************
     */

    /*
     * 2. 최종결제 요청 결과처리
     *
     * 최종 결제요청 결과 리턴 파라미터는 연동메뉴얼을 참고하시기 바랍니다.
     */
    // (4) TX: lgdacom.conf에 설정된 URL로 소켓 통신하여 최종 인증요청, 결과값으로 true, false 리턴
    
if ($xpay->TX()) {
        
//1)결제결과 화면처리(성공,실패 결과 처리를 하시기 바랍니다.)
        /*echo "결제요청이 완료되었습니다.  <br>";
        echo "TX Response_code = " . $xpay->Response_Code() . "<br>";            //통신 응답코드("0000" 일 때 통신 성공)
        echo "TX Response_msg = " . $xpay->Response_Msg() . "<p>";
            
        echo "거래번호 : " . $xpay->Response("LGD_TID",0) . "<br>";
        echo "상점아이디 : " . $xpay->Response("LGD_MID",0) . "<br>";
        echo "상점주문번호 : " . $xpay->Response("LGD_OID",0) . "<br>";
        echo "결제금액 : " . $xpay->Response("LGD_AMOUNT",0) . "<br>";
        echo "결과코드 : " . $xpay->Response("LGD_RESPCODE",0) . "<br>";        //LGD_RESPCODE 결제요청 응답코드
        echo "결과메세지 : " . $xpay->Response("LGD_RESPMSG",0) . "<p>";*/
            
        
$keys $xpay->Response_Names();
        foreach(
$keys as $name) {
             
$res_array[] = $name " = " $xpay->Response($name0) . ", ";
        }
          
        
//echo "<p>";
        
        // (5) DB에 요청 결과 처리
        
if( "0000" == $xpay->Response_Code() ) {
             
// 통신상의 문제가 없을시
            // 최종결제요청 결과 성공 DB처리(LGD_RESPCODE 값에 따라 결제가 성공인지, 실패인지 DB처리)
           
$LGD_PAYTYPE $xpay->Response("LGD_PAYTYPE",0);
           
$deposit_price $xpay->Response("LGD_AMOUNT",0);

            if(
$LGD_PAYTYPE=='SC0010'){ 
                
$pay_type "카드";
            } else if(
$LGD_PAYTYPE=='SC0030'){
                
$pay_type "계좌이체";
            } else if(
$LGD_PAYTYPE=='SC0040'){
                
$pay_type "가상계좌";
            } else if(
$LGD_PAYTYPE=='SC0060'){
                
$pay_type "핸드폰";
            }
            if(
$LGD_PAYTYPE=='SC0040'){ // 가상계좌일때는 그냥 패스한다.
                
$rtn_val "ok";
            } else {
                
$s_tno $xpay->Response("LGD_TID",0);
                
$s_app_no $xpay->Response("LGD_FINANCEAUTHNUM",0);
                
$s_app_info $xpay->Response("LGD_FINANCENAME",0)." ".$xpay->Response("LGD_CARDNUM",0)." ".$xpay->Response("LGD_RESPMSG",0);
                
$deposit_time $xpay->Response("LGD_PAYDATE",0);
                
$s_escrow "0";

                
$rtn_val payment_deposit_do($od_id$pay_type$s_tno$s_app_no$s_app_info$s_escrow$deposit_time$deposit_price$res_array); // 입금처리 작업
            
}

            if(
$rtn_val=='ok'){ // DB 성공시
                
$isDBOK true
            } else {
                
$isDBOK false
            }            

            
//최종결제요청 결과를 DB처리합니다. (결제성공 또는 실패 모두 DB처리 가능)
            //상점내 DB에 어떠한 이유로 처리를 하지 못한경우 false로 변경해 주세요.

              
if( !$isDBOK ) {
                   echo 
"<p>";
                   
$xpay->Rollback("상점 DB처리 실패로 인하여 Rollback 처리 [TID:" $xpay->Response("LGD_TID",0) . ",MID:" $xpay->Response("LGD_MID",0) . ",OID:" $xpay->Response("LGD_OID",0) . "]");                                        
                    
                echo 
"TX Rollback Response_code = " $xpay->Response_Code() . "<br>";
                echo 
"TX Rollback Response_msg = " $xpay->Response_Msg() . "<p>";
                    
                if( 
"0000" == $xpay->Response_Code() ) {
                      echo 
"자동취소가 정상적으로 완료 되었습니다.<br>";
                }else{
                      echo 
"자동취소가 정상적으로 처리되지 않았습니다.<br>";
                }
              } else {

                if(
$LGD_PAYTYPE=='SC0040'){ // 가상계좌일때는 그냥 패스한다.

                
} else {
                    
// 입금완료 메일 처리
                    
$oinfo order_info_get($od_info['midx']);
                    
ob_start();
                    include_once (
"{$j3_shop_path}/mail/order_mail.php");
                    
$ma_content ob_get_contents();
                    
ob_end_clean();

                    
$ma_subject "{$oinfo['od_id']} 입금이 완료 되었습니다.";

                    
$snd_email $config['admin_email'];
                    
$rcv_email $oinfo['s_email'];
                    
$mail = new PHPMailer;
                    
$rtn email_send($mail$ma_subject$ma_content$snd_email$rcv_email);

                    if(
$config['shop_sms_use4']=='1'){ // 입금완료시 SMS 전송
                        
$sms_msg sms_send_msg_conv("4"$oinfo); // 입금완료시 메시지 변환
                        
$rtn call_sms_send($oinfo['s_hpno'], $config['send_hp'], $sms_msg);
                    }

                    if(
$config['shop_kakao_use4']=='1'){ // 입금완료시 알림톡 전송
                        
$rtn call_kakako_send($oinfo['s_hpno'], $config['kakao_sender'], $oinfo'4');
                    }
                }

                echo 
"
                    <script>
                        document.location.href='
{$j3_shop_url}/orderview.php?idx={$od_info['midx']}';            
                    </script>
                "
;
                exit;
            }               
        }else{
              
//최종결제요청 결과 실패 DB처리
             
echo "최종결제요청 결과 실패 DB처리하시기 바랍니다.<br>";                            
        }
    }else {
        
//2)API 요청실패 화면처리
        
echo "결제요청이 실패하였습니다.  <br>";
        echo 
"TX Response_code = " $xpay->Response_Code() . "<br>";
        echo 
"TX Response_msg = " $xpay->Response_Msg() . "<p>";
            
        
//최종결제요청 결과 실패 DB처리
        
echo "최종결제요청 결과 실패 DB처리하시기 바랍니다.<br>";                                        
    }
?>