ZIP/X2/shop/lg/taxsave_result.php
<?php
include_once('./_common.php');

require_once(G5_SHOP_PATH.'/settle_lg.inc.php');

$od_id = isset($_REQUEST['od_id']) ? safe_replace_regex($_REQUEST['od_id'], 'od_id') : '';
$tx = isset($_REQUEST['tx']) ? clean_xss_tags($_REQUEST['tx'], 1, 1) : '';

if($tx == 'personalpay') {
    $od = sql_fetch(" select * from {$g5['g5_shop_personalpay_table']} where pp_id = '$od_id' ");
    if (!$od)
        die('<p id="scash_empty">개인결제 내역이 존재하지 않습니다.</p>');

    // IDOR 방지: 본인 개인결제거나 정당한 세션 uid 보유 시에만 허용
    if (function_exists('is_shop_order_owner') && !is_shop_order_owner($od, 'personalpay')) {
        alert('해당 개인결제 정보에 접근 권한이 없습니다.', G5_SHOP_URL);
    }

    $od_tno      = $od['pp_tno'];
    $goods_name  = $od['pp_name'].'님 개인결제';
    $settle_case = $od['pp_settle_case'];
    $order_price = $od['pp_receipt_price'];
    $od_casseqno = $od['pp_casseqno'];
} else {
    $od = sql_fetch(" select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' ");
    if (!$od)
        die('<p id="scash_empty">주문서가 존재하지 않습니다.</p>');

    // IDOR 방지: 본인 주문이거나 정당한 세션 uid 보유 시에만 허용
    if (function_exists('is_shop_order_owner') && !is_shop_order_owner($od, 'order')) {
        alert('해당 주문 정보에 접근 권한이 없습니다.', G5_SHOP_URL);
    }

    $od_tno      = $od['od_tno'];
    $goods       = get_goods($od['od_id']);
    $goods_name  = $goods['full_name'];
    $settle_case = $od['od_settle_case'];
    $order_price = $od['od_tax_mny'] + $od['od_vat_mny'] + $od['od_free_mny'];
    $od_casseqno = $od['od_casseqno'];
}

switch($settle_case) {
    case '가상계좌':
        $pay_type = 'SC0040';
        break;
    case '계좌이체':
        $pay_type = 'SC0030';
        break;
    case '무통장':
        $pay_type = 'SC0100';
        break;
    default:
        die('<p id="scash_empty">현금영수증은 무통장, 가상계좌, 계좌이체에 한해 발급요청이 가능합니다.</p>');
        break;
}

$LGD_METHOD                 = 'AUTH';                                   //메소드('AUTH':승인, 'CANCEL' 취소)
$LGD_OID                    = $od_id;                                   //주문번호(상점정의 유니크한 주문번호를 입력하세요)
$LGD_PAYTYPE                = $pay_type;                                //결제수단 코드 (SC0030:계좌이체, SC0040:가상계좌, SC0100:무통장입금 단독)
$LGD_AMOUNT                 = $order_price;                             //금액("," 를 제외한 금액을 입력하세요)
$LGD_PRODUCTINFO            = $goods_name;                              //상품명
$LGD_TID                    = $od_tno;                                  //LG유플러스 거래번호
$LGD_CUSTOM_MERTNAME        = $default['de_admin_company_name'];        //상점명
$LGD_CUSTOM_CEONAME         = $default['de_admin_company_owner'];       //대표자명
$LGD_CUSTOM_BUSINESSNUM     = $default['de_admin_company_saupja_no'];   //사업자등록번호
$LGD_CUSTOM_MERTPHONE       = $default['de_admin_company_tel'];         //상점 전화번호
$LGD_CASHCARDNUM            = $_POST['id_info'];                        //발급번호(주민등록번호,현금영수증카드번호,휴대폰번호 등등)
$LGD_CASHRECEIPTUSE         = $_POST['tr_code'];                        //현금영수증발급용도('1':소득공제, '2':지출증빙)

$xpay = new XPay($configPath, $CST_PLATFORM);

// Mert Key 설정
$xpay->set_config_value('t'.$LGD_MID, $config['cf_lg_mert_key']);
$xpay->set_config_value($LGD_MID, $config['cf_lg_mert_key']);

$xpay->Init_TX($LGD_MID);
$xpay->Set("LGD_TXNAME", "CashReceipt");
$xpay->Set("LGD_METHOD", $LGD_METHOD);
$xpay->Set("LGD_PAYTYPE", $LGD_PAYTYPE);

if ($LGD_METHOD == "AUTH") {                 // 현금영수증 발급 요청
    $xpay->Set("LGD_OID", $LGD_OID);
    $xpay->Set("LGD_AMOUNT", $LGD_AMOUNT);
    $xpay->Set("LGD_CASHCARDNUM", $LGD_CASHCARDNUM);
    $xpay->Set("LGD_CUSTOM_MERTNAME", $LGD_CUSTOM_MERTNAME);
    $xpay->Set("LGD_CUSTOM_CEONAME", $LGD_CUSTOM_CEONAME);
    $xpay->Set("LGD_CUSTOM_BUSINESSNUM", $LGD_CUSTOM_BUSINESSNUM);
    $xpay->Set("LGD_CUSTOM_MERTPHONE", $LGD_CUSTOM_MERTPHONE);
    $xpay->Set("LGD_CASHRECEIPTUSE", $LGD_CASHRECEIPTUSE);
    $xpay->Set("LGD_ENCODING",    "UTF-8");

    if(isset($od['od_tax_flag']) && $od['od_tax_flag'] && $od['od_free_mny'] > 0) {
        $xpay->Set("LGD_TAXFREEAMOUNT", $od['od_free_mny']); //비과세 금액
    }

    if ($LGD_PAYTYPE == "SC0030"){              //기결제된 계좌이체건 현금영수증 발급요청시 필수
        $xpay->Set("LGD_TID", $LGD_TID);
    }
    else if ($LGD_PAYTYPE == "SC0040"){         //기결제된 가상계좌건 현금영수증 발급요청시 필수
        $xpay->Set("LGD_TID", $LGD_TID);
        $xpay->Set("LGD_SEQNO", $od_casseqno);
    }
    else {                                      //무통장입금 단독건 발급요청
        $xpay->Set("LGD_PRODUCTINFO", $LGD_PRODUCTINFO);
    }
}

/*
 * 1. 현금영수증 발급/취소 요청 결과처리
 *
 * 결과 리턴 파라미터는 연동메뉴얼을 참고하시기 바랍니다.
 */
if ($xpay->TX()) {
    //1)현금영수증 발급/취소결과 화면처리(성공,실패 결과 처리를 하시기 바랍니다.)
    /*
    echo "현금영수증 발급/취소 요청처리가 완료되었습니다.  <br>";
    echo "TX Response_code = " . $xpay->Response_Code() . "<br>";
    echo "TX Response_msg = " . $xpay->Response_Msg() . "<p>";

    echo "결과코드 : " . $xpay->Response("LGD_RESPCODE",0) . "<br>";
    echo "결과메세지 : " . $xpay->Response("LGD_RESPMSG",0) . "<br>";
    echo "거래번호 : " . $xpay->Response("LGD_TID",0) . "<p>";

    $keys = $xpay->Response_Names();
    foreach($keys as $name) {
        echo $name . " = " . $xpay->Response($name, 0) . "<br>";
    }
    */

    if($xpay->Response_Code() == '0000') {
        $LGD_OID = $xpay->Response("LGD_OID",0);
        $cash_no = $xpay->Response("LGD_CASHRECEIPTNUM",0);

        $cash = array();
        $cash['LGD_TID']        = $xpay->Response("LGD_TID",0);
        $cash['LGD_TIMESTAMP']  = $xpay->Response("LGD_TIMESTAMP",0);
        $cash['LGD_RESPDATE']   = $xpay->Response("LGD_RESPDATE",0);
        $cash_info = serialize($cash);

        if($tx == 'personalpay') {
            $sql = " update {$g5['g5_shop_personalpay_table']}
                        set pp_cash = '1',
                            pp_cash_no = '$cash_no',
                            pp_cash_info = '$cash_info'
                      where pp_id = '$LGD_OID' ";
        } else {
            $sql = " update {$g5['g5_shop_order_table']}
                        set od_cash = '1',
                            od_cash_no = '$cash_no',
                            od_cash_info = '$cash_info'
                      where od_id = '$LGD_OID' ";
        }

        $result = sql_query($sql, false);

        if(!$result) { // DB 정보갱신 실패시 취소
            $xpay->Set("LGD_TXNAME", "CashReceipt");
            $xpay->Set("LGD_METHOD", "CANCEL");
            $xpay->Set("LGD_PAYTYPE", $LGD_PAYTYPE);
            $xpay->Set("LGD_TID", $LGD_TID);

            if ($LGD_PAYTYPE == "SC0040"){				//가상계좌건 현금영수증 발급취소시 필수
                $xpay->Set("LGD_SEQNO", $od_casseqno);
            }

            if ($xpay->TX()) {
                /*
                echo "현금영수증 취소 요청처리가 완료되었습니다.  <br>";
                echo "TX Response_code = " . $xpay->Response_Code() . "<br>";
                echo "TX Response_msg = " . $xpay->Response_Msg() . "<p>";

                echo "결과코드 : " . $xpay->Response("LGD_RESPCODE",0) . "<br>";
                echo "결과메세지 : " . $xpay->Response("LGD_RESPMSG",0) . "<br>";
                echo "거래번호 : " . $xpay->Response("LGD_TID",0) . "<p>";
                */
            } else {
                $msg = '현금영수증 취소 요청처리가 정상적으로 완료되지 않았습니다.';
                if(!$is_admin)
                    $msg .= '쇼핑몰 관리자에게 문의해 주십시오.';

                alert_close($msg);
            }
        }
    }

} else {
    //2)API 요청 실패 화면처리
    /*
    echo "현금영수증 발급/취소 요청처리가 실패되었습니다.  <br>";
    echo "TX Response_code = " . $xpay->Response_Code() . "<br>";
    echo "TX Response_msg = " . $xpay->Response_Msg() . "<p>";
    */

    $msg = '현금영수증 발급 요청처리가 정상적으로 완료되지 않았습니다.';
    $msg .= '\\nTX Response_code = '.$xpay->Response_Code();
    $msg .= '\\nTX Response_msg = '.$xpay->Response_Msg();

    alert($msg);
}

$g5['title'] = '';
include_once(G5_PATH.'/head.sub.php');

if($default['de_card_test']) {
    echo '<script language="JavaScript" src="'.SHOP_TOSSPAYMENTS_CASHRECEIPT_TEST_JS.'"></script>'.PHP_EOL;
} else {
    echo '<script language="JavaScript" src="'.SHOP_TOSSPAYMENTS_CASHRECEIPT_REAL_JS.'"></script>'.PHP_EOL;
}

switch($LGD_PAYTYPE) {
    case 'SC0030':
        $trade_type = 'BANK';
        break;
    case 'SC0040':
        $trade_type = 'CAS';
        break;
    default:
        $trade_type = 'CR';
        break;
}
?>

<div id="lg_req_tx" class="new_win">
    <h1 id="win_title">현금영수증 - 토스페이먼츠 eCredit</h1>

    <div class="tbl_head01 tbl_wrap">
        <table>
        <colgroup>
            <col class="grid_4">
            <col>
        </colgroup>
        <tbody>
        <tr>
            <th scope="row">결과코드</th>
            <td><?php echo $xpay->Response_Code(); ?></td>
        </tr>
        <tr>
            <th scope="row">결과 메세지</th>
            <td><?php echo $xpay->Response_Msg(); ?></td>
        </tr>
        <tr>
            <th scope="row">현금영수증 거래번호</th>
            <td><?php echo $xpay->Response("LGD_TID",0); ?></td>
        </tr>
        <tr>
            <th scope="row">현금영수증 승인번호</th>
            <td><?php echo $xpay->Response("LGD_CASHRECEIPTNUM",0); ?></td>
        </tr>
        <tr>
            <th scope="row">승인시간</th>
            <td><?php echo preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/", "\\1-\\2-\\3 \\4:\\5:\\6",$xpay->Response("LGD_RESPDATE",0)); ?></td>
        </tr>
        <tr>
            <th scope="row">현금영수증 URL</th>
            <td>
                <button type="button" name="receiptView" class="btn_frmline" onClick="javascript:showCashReceipts('<?php echo $LGD_MID; ?>','<?php echo $LGD_OID; ?>','<?php echo $od_casseqno; ?>','<?php echo $trade_type; ?>','<?php echo $CST_PLATFORM; ?>');">영수증 확인</button>
                <p>영수증 확인은 실 등록의 경우에만 가능합니다.</p>
            </td>
        </tr>
        <tr>
            <td colspan="2"></td>
        </tr>
        </tbody>
        </table>
    </div>

</div>

<?php
include_once(G5_PATH.'/tail.sub.php');