ÿØÿà JFIF  ` ` ÿþš 403 WEBHELL REBORN
403 WEBHELL REBORN
Server : Apache
System : Linux ruga7-004.fmcity.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : tkt_travelbus ( 1137)
PHP Version : 7.0.0p1
Disable Function : mysql_pconnect
Directory :  /tkt_travelbus/www/Lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

Buat Folder Baru:
Buat File Baru:

Current File : /tkt_travelbus/www/Lib/to_ticket.lib.php
<?
/******************************************************************************
*
* 티켓 라이브러리
*
******************************************************************************/

// 티켓 목록 가저오기
function TO_list_ticket($rsv_no, $sql_where="")
{
	$table = "TB_TICKET";

	$data = array();

	if (!$rsv_no) return $data;

	$sql = "select * from {$table} where rsv_no='{$rsv_no}' and del_flag = 'N'";
	$sql .= " {$sql_where} ";

	// 정렬
	$sql .= " order by group_code, field(ti_generation, 'A', 'C', 'B') asc";

	$rs = db_query($sql);

	while($row = db_fetch_array($rs)) {

		// 티켓 상태 (미사용 / 발송완료 / 사용완료 / 취소)
		$code_res = base_codec("PRD","TIST",$row['ticket_status']);
		$row['ticket_status_str'] =  _e($code_res[0]['cd_nm']);

		// 성인/아동/유아/유아
		switch($row['ti_generation']) {
			case "A": $row['generation_str'] = _e("성인"); break;
			case "C": $row['generation_str'] = _e("아동"); break;
			case "B": $row['generation_str'] = _e("유아"); break;
			case "I": $row['generation_str'] = _e("영아"); break;
		}

		// 발송방법
		switch($row['ti_send_method']) {
			case "SMS": $row['ti_send_method_str'] = _e("SMS"); break;
			case "MMS": $row['ti_send_method_str'] = _e("MMS"); break;
			case "AT": $row['ti_send_method_str'] = _e("알림톡"); break;
			case "FT": $row['ti_send_method_str'] = _e("친구톡"); break;
			default : $row['ti_send_method_str'] = ""; break;
		}

		$data[] = $row;
	}

	return $data;
}

// 예약건에 티켓 발권처리
function TO_issue_ticket($res_no, $disp_error = 'N', $generation = '', $count = 0)
{
	Log::save(sprintf("%s(%d) TO_issue_ticket START %s", __FILE__, __LINE__, $res_no), '', date('Ym'));

	// 예약정보
	$res_data = res_good_master(" and res_no='{$res_no}' ");
	$row_res = res_good_master_replace($res_data[0]);
	$rsv_no = $row_res['rsv_no'];
	$g_uid = $row_res['g_uid'];
	if(!$row_res){
		error_msg("예약 정보가 없습니다.","end");
	}

	// 행사 정보
	$row_package = db_fetch("
		select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 
		from TB_RES_GOOD_DATE as GD 
		left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid
		where 
			GD.g_uid = '{$g_uid}' and 
			GD.res_no ='{$res_no}' and 
			GT.del_flag = 'N'
	");

//	$sqltb = "select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 from TB_RES_GOOD_DATE as GD left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid where GD.g_uid = '{$g_uid}' and GD.res_no ='{$res_no}' and GT.del_flag = 'N' ";

	/*
	if(devCookie()){
		p($sqltb);
		//select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 from TB_RES_GOOD_DATE as GD left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid where GD.g_uid = '1852' and GD.res_no ='T1665548775B2C57D2' and GT.del_flag = 'N'
		exit;
	}
	*/

	//select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 from TB_RES_GOOD_DATE as GD left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid where GD.g_uid = '2037' and GD.res_no ='T16617489134E69056' and GT.del_flag = 'N'

	/*$viewTy = "select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 from TB_RES_GOOD_DATE as GD left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid where GD.g_uid = '{$g_uid}' and GD.res_no ='{$res_no}' and GT.del_flag = 'N'";
	if(devCookie()){
		p($viewTy);
		exit;
	}*/

	$ticketSQL = "
		select GT.api_item_code_a, GT.api_item_code_a2, GT.api_item_code_c, GT.api_item_code_c2 
		from TB_RES_GOOD_DATE as GD 
		left join TB_GOOD_DATE_TYPE GT on GT.dtid = GD.dtid
		where 
			GD.g_uid = '{$g_uid}' and 
			GD.res_no ='{$res_no}' and 
			GT.del_flag = 'N'
	";

	Log::save(sprintf("%s(%d) 티켓연동코드 호출 SQL {$ticketSQL}", __FILE__, __LINE__), '', date('Ym'));

	if(!$row_package){
		$error_msg = "행사 정보가 없습니다. 1";
		if($disp_error=='Y') error_msg($error_msg);
	}

	$api_item_code_a = $row_package['api_item_code_a']; // 성인 기본
	$api_item_code_a2 = $row_package['api_item_code_a2']; // 성인 복합
	$api_item_code_c = $row_package['api_item_code_c']; // 소인 기본
	$api_item_code_c2 = $row_package['api_item_code_c2']; // 소인 복합

	Log::save(sprintf("%s(%d) 티켓연동코드 %s %s", __FILE__, __LINE__, $api_item_code_a, $api_item_code_c), '', date('Ym'));

	// 연동코드 있을 경우에만 진행
	if($api_item_code_a != '' || $api_item_code_c != ''){

		// 상품 정보
		$arr_good = good_list(" and g_uid='{$g_uid}' ");
		$row_good = $arr_good[0];
		$producer_id = $row_good['producer_id'];
		if(!$row_good){
			$error_msg = "상품 정보가 없습니다.";
			if($disp_error=='Y') error_msg($error_msg);
		}

		if($generation && $count > 0) {

			// 지정된수량 강제발권
			switch($generation){
				case 'A':
					$adult_inwon = $count;
					break;
				case 'C':
					$child_inwon = $count;
					break;
			}

		} else {
			// 이미 발행된 티켓 확인
			$row_ticket = TO_list_ticket($rsv_no, $sql_where="");
			if($row_ticket){
				$error_msg = "이미 발행된 바코드가 있습니다.";
				if($disp_error=='Y') error_msg($error_msg);
			}

			// 발권정보 세팅
			$adult_inwon = $row_res['adult_inwon'];
			$child_inwon = $row_res['child_inwon'];
		}

		// 성인(대인)
		if($adult_inwon > 0){
			if($api_item_code_a){
				$ticket_data[] = array(
					'ticket_no'		=> $api_item_code_a,
					'quantity'		=> $adult_inwon,
					'generation'	=> 'A',
				);
			}
			if($api_item_code_a2){
				$ticket_data[] = array(
					'ticket_no'		=> $api_item_code_a2,
					'quantity'		=> $adult_inwon,
					'generation'	=> 'A',
				);
			}
		}

		// 유아(소인)
		if($child_inwon > 0){
			if($api_item_code_c){
				$ticket_data[] = array(
					'ticket_no'		=> $api_item_code_c,
					'quantity'		=> $child_inwon,
					'generation'	=> 'C',
				);
			}
			if($api_item_code_c2){
				$ticket_data[] = array(
					'ticket_no'		=> $api_item_code_c2,
					'quantity'		=> $child_inwon,
					'generation'	=> 'C',
				);
			}
		}

		Log::save(sprintf("%s(%d) ticket_data : %s", __FILE__, __LINE__, json_encode($ticket_data)), '', date('Ym'));

		if(!$ticket_data){
			$error_msg = "바코드 발권 가능한 인원이 없습니다";
			if($disp_error=='Y') error_msg($error_msg);
		}

		// 발권 API 연동 (정상 시 0000 리턴)
		if(!$api) 	$api = new ApiManager($producer_id);
		foreach($ticket_data as $k => $v) {
			$vToJsonData = json_encode($v,JSON_UNESCAPED_UNICODE);

			Log::save(sprintf("%s(%d) ticketing vToJsonData : {$vToJsonData}", __FILE__, __LINE__), '', date('Ym'));
			Log::save(sprintf("%s(%d) ticketing argument - res_cust_nm : {$row_res['res_cust_nm']}, ", __FILE__, __LINE__), '', date('Ym'));
			Log::save(sprintf("%s(%d) ticketing argument - res_cust_hp : {$row_res['res_cust_hp']}, ", __FILE__, __LINE__), '', date('Ym'));
			Log::save(sprintf("%s(%d) ticketing argument - rsv_no : {$rsv_no}, ", __FILE__, __LINE__), '', date('Ym'));
			Log::save(sprintf("%s(%d) ticketing argument - ev_start : {$row_res['ev_start']}, ", __FILE__, __LINE__), '', date('Ym'));

			$voucher = $api->ticketing($v['ticket_no'], $v['quantity'], '', $row_res['res_cust_nm'], $row_res['res_cust_hp'], $rsv_no, $v['generation'], $row_res['ev_start']);

			if(devCookie()){

				p($v['ticket_no']);
				p($v['quantity']);
				p('');
				p($row_res['res_cust_nm']);
				p($row_res['res_cust_hp']);
				p($rsv_no);
				p($v['generation']);
				p($row_res['ev_start']);
				p($voucher);
//				exit;

			}


			Log::save(sprintf("%s(%d) ticketing Result : %s", __FILE__, __LINE__, json_encode($voucher)), '', date('Ym'));

			if($voucher['resultCode'] != '0000') {
				$error_msg = "API 연동 오류 : " . $voucher['resultMsg'];
				if($disp_error=='Y') error_msg($error_msg);
			}


			if(count($voucher['data']) != $v['quantity']) {
				$vd = count($voucher['data']);
				$vq = $v['quantity'];

				$error_msg = "일부 티켓을 가저오지 못하였습니다. 티켓을 확인해주세요. {$vd},{$vq} ";
				if($disp_error=='Y') error_msg($error_msg);
			}

			if($result) {
				$result = array_merge($result, $voucher['data']);
			} else {
				$result = $voucher['data'];
			}
		}




		//야놀자 티켓 번호 매칭

		//yanolja
		$b2b_api_data = $row_res['b2b_api_data'];
		$b2b_voucher = $row_res['b2b_voucher'];
		$b2b_api_data_arr = json_decode($b2b_api_data,true);

		$ticketMatchData = "";

		if($voucher['resultCode'] == '0000'){
			$ticketSeq = 0;
			foreach($voucher['data'] as $item){
				$orderCdYanolja = $b2b_api_data_arr[$b2b_voucher]['passengers'][$ticketSeq]['orderCd'];
				$ticketMatchData .= $orderCdYanolja.":::".$item['ticket_number'].'||';
				$ticketSeq++;
			}
		}

		$sqlTm = "UPDATE TB_RES_GOOD SET api_ticket_match = '{$ticketMatchData}' WHERE res_no = '{$res_no}'";
		db_query($sqlTm);
		Log::save(sprintf("%s(%d) ticketing Match Data : %s", __FILE__, __LINE__, $sqlTm), '', date('Ym'));




		Log::save(sprintf("%s(%d) ticket_cnt : %s", __FILE__, __LINE__, count($result)), '', date('Ym'));
		Log::save(sprintf("%s(%d) error_msg : %s", __FILE__, __LINE__, $error_msg), '', date('Ym'));
	} else {
		$error_msg = "공급처 연동코드가 설정되어 있지 않습니다.";
		if($disp_error=='Y') error_msg($error_msg);
	}

	return $result;
}

// 티켓 알림톡 발송
function TO_send_ticket($res_no, $disp_error = 'N')
{
	global $ppurio;

	Log::save(sprintf("%s(%d) ADMIN TO_send_ticket res_no=%s", __FILE__, __LINE__, $res_no), '', 'ppurio/'.date('Ym'));

	if(!$res_no) {
		$error_msg = "예약번호가 없습니다.";
		if($disp_error=='Y') error_msg($error_msg,"end");
	}

	// 예약정보
	$res_data = res_good_master(" and res_no='{$res_no}' ");
	$res_row = res_good_master_replace($res_data[0]);
	if(!$res_row) {
		$error_msg = "예약정보가 없습니다.";
		if($disp_error=='Y') error_msg($error_msg,"end");
	}

	// 티켓목록
	$ticket_data = TO_list_ticket($res_row['rsv_no'], "AND ticket_status != 'C'");
	if(!$ticket_data){
		$error_msg = "손님에게 배정된 티켓이 없습니다.";
		if($disp_error=='Y') error_msg($error_msg,"end");
	}

	// 입장권티켓
	switch($res_row['g_uid']){
		case '1669' : // 소노 비발디파크 스노위랜드 이용권
			$templete = "SEND_TICKET_1669";
			break;
		case '1699' : // [특가]비발디파크 리프트 + 장비렌탈PKG  단일권(기간한정 ~12.06 까지)
			$templete = "SEND_TICKET_1699";
			break;
		case '1708' : // [특가]소노호텔&리조트 워터파크 통합권(대명리조트) - 미사용
			$templete = "SEND_TICKET_1708";
			break;
		case '1671' : // 소노 비발디파크 오션월드 입장권(~4월 30일 까지)
			$templete = "SEND_TICKET_1671";
			break;
		default : 
			$templete = "SEND_TICKET";
			break;
	}
	//$templete = "SEND_TICKET";
	$recever = str_replace("-", "", $res_row['res_cust_hp']); // 수신핸드폰
	$keyword = array(
		'접수번호'		=> $res_no
	);

	// Macro data
	$data = to_macro_list(array('mtype'=>$templete,'disp_yn'=>'Y'));
	$macro = $data[0];

	// 알림톡 발송
	if(!$ppurio) {
		include PARTNER_DIR . "/ppurio/class.Ppurio.php";
		$ppurio = new Ppurio();
	}

	$result = $ppurio->sendAT($recever, $macro['midx'], $keyword);

	Log::save(sprintf("%s(%d) at_result : %s", __FILE__, __LINE__, json_encode($result)), '', date('Ym'));
	Log::save(sprintf("%s(%d) error_msg : %s", __FILE__, __LINE__, $error_msg), '', date('Ym'));

	return $result;
}

/**
 * author : taeyoung
 * 2022.06.13
 * 티켓 초기화
*/
function To_del_ticket($seq)
{

	$table = "TB_TICKET";

	if (!$seq) return false;

	$mb_id = $_COOKIE['MemberID'];
	if(!$mb_id){
		$mb_id = '';
	}

	$sql = "SELECT ti_cust_nm, ti_memo FROM {$table} WHERE seq = '{$seq}'";
	$rs = db_query($sql);
	$row = db_fetch_array($rs);
	$row['ti_memo'] .= '\n'.$row['ti_cust_nm'].' 취소';

	$ti_memo = $row['ti_memo'];

	$sql = "UPDATE {$table} SET ti_memo = '{$ti_memo}', ti_send_hp = '', rsv_no = '', ti_reserve_dt = '',ti_use_dt = '', ti_send_dt = '', ti_cust_nm = '', ti_cust_hp = '', ticket_status = 'W', edit_id = '{$mb_id}', edit_dt = now() WHERE seq = '{$seq}'";

	// 티켓 이력관리 추가
	TO_ticket_history_ins($seq, "티켓 삭제(취소)");

	// 티켓 이력관리2 추가 (삭제 전 기록)
	TO_ticket_history_status_ins($seq, 'C');

	if(db_query($sql)){
		return true;
	}else{
		return false;
	}
}

/**
 * author : taeyoung
 * 2022.06.13
 * 티켓 전체 초기화
 */
function To_del_total_ticket($rsv_no = ''){

	$table = "TB_TICKET";

	if (!$rsv_no) return false;

	$sql = "SELECT * FROM {$table} WHERE rsv_no = '{$rsv_no}'";
	$rs = db_query($sql);

	$mb_id = $_COOKIE['MemberID'];

	if(!$mb_id){
		$mb_id = '';
	}

	$data = array();

	while($row = db_fetch_array($rs)) {
		$ti_memo = '\n'.$row['ti_cust_nm'].' 취소';
		$seq = $row['seq'];
		$ticket_number = $row['ticket_number'];

		if(!$seq) exit;

		$sql = "UPDATE {$table} SET ti_memo = CONCAT(ti_memo,'{$ti_memo}'), rsv_no = '', ti_reserve_dt = '',ti_use_dt = '', ti_send_dt = '', ti_cust_nm = '', ti_cust_hp = '', ticket_status = 'W', edit_id = '{$mb_id}', edit_dt = now() WHERE seq='{$seq}'";

		// 티켓 이력관리 추가
		TO_ticket_history_ins($seq, "티켓 삭제(취소)");

		// 티켓 이력관리2 추가
		TO_ticket_history_status_ins($seq, 'C');

		if(!db_query($sql)){
			echo "<script>alert('삭제 실패 관리자문의 티켓 SEQ : {$seq}');</script>";
		}else{
			array_push($data,$ticket_number);
		}
	}

	return $data;
}
?>

Anon7 - 2021