public static function init()
 {
     if (!static::$predefined_tax_classes) {
         static::$predefined_tax_classes = array('Standard', 'Zero Rate');
     }
     if (!static::$predefined_tax_rates) {
         static::$predefined_tax_rates = array(__('부가세율', 'wskl'), __('부가세율', 'wskl'));
     }
     /** 복합과세 옵션 업데이트. 복합과세가 활성화되면 관련 설정을 초기화. */
     add_action('update_option_' . wskl_get_option_name('enable_combined_tax'), array(__CLASS__, 'callback_init_combined_tax_classes'), 10, 3);
     if (wskl_is_option_enabled('hide_display_cart_tax')) {
         /** 부가세 항목이 합계와 같이 출력되는 것을 숨긴다.  */
         add_filter('woocommerce_cart_totals_order_total_html', array(__CLASS__, 'callback_hide_include_tax'));
     }
     if (wskl_is_option_enabled('enable_combined_tax')) {
         /** 결제 단계에서 각 PG 마다 과세 설정에 대한 세부 옵션을 조정한다. */
         add_filter('woocommerce_pay_form_args', array(__CLASS__, 'callback_pay_form_args'), 20);
         // 완전히 다른 세금 클래스인 경우는 이런 필터링을 걸쳐야 하지만,
         // 과세/비과세를 담당하는 클래스를 Standard, Zero Rate 로 잡으면 굳이 필요 없다.
         //			/** 배송비의 부가세를 판단한다. 만일 비과세 상품으로만 쇼핑을 한 경우 배송비에 대해 부가세를 부여한다. */
         //			add_filter( 'woocommerce_package_rates', array(
         //				__CLASS__,
         //				'callback_woocommerce_package_rates',
         //			), 10, 2 );
     }
 }
 public function init_settings()
 {
     parent::init_settings();
     $options_to_import = array('payapp_user_id', 'payapp_link_key', 'payapp_link_val', 'checkout_methods');
     foreach ($options_to_import as $key) {
         $this->settings[$key] = get_option(wskl_get_option_name($key));
     }
     $this->settings['enabled'] = wskl_yes_or_no(wskl_is_option_enabled('enable_sym_pg') && wskl_get_option('pg_agency') == 'payapp' && in_array($this->checkout_method, $this->get_option('checkout_methods')));
 }
function wskl_update_xdebug_session_id()
{
    if (isset($_GET['XDEBUG_SESSION_START'])) {
        $session_id = absint($_GET['XDEBUG_SESSION_START']);
        if ($session_id) {
            update_option(wskl_get_option_name('develop_xdebug_session_id'), $session_id);
        }
    }
}
 /**
  * 이전 버전 기능 호환을 위해
  */
 private static function export_globals()
 {
     global $woocommerce_ver21_less;
     global $pay_gate_agency;
     global $sym_checkout_titles;
     global $sym_checkout_desc;
     global $sym_pg_agency;
     $woocommerce_ver21_less = version_compare(WOOCOMMERCE_VERSION, '2.1', '<') ? true : false;
     $pay_gate_agency = get_option(wskl_get_option_name('pg_agency'));
     $sym_checkout_titles = static::get_checkout_methods();
     $sym_checkout_desc = static::get_checkout_method_postfix();
     $sym_pg_agency = get_option(wskl_get_option_name('pg_agency'));
 }
        /**
         * 메타 박스 렌더링 콜백
         *
         * @param $post
         */
        function woocommerce_order_shipping_details($post)
        {
            $agent_list = WSKL_Agent_Helper::get_agent_list();
            $options = (array) get_option(wskl_get_option_name('shipping_companies'));
            $agents = array('not-available' => __('지정 안됨', 'wskl'));
            $current_agent = esc_html(get_post_meta($post->ID, 'wskl-delivery-agent', TRUE));
            $current_tracking_number = esc_html(get_post_meta($post->ID, 'wskl-tracking-number', TRUE));
            foreach ($options as $o) {
                if ($o) {
                    $agents[$o] = $agent_list[$o];
                }
            }
            ?>
			<ul class="totals">
				<li>
					<label for="wskl-delivery-agent"><?php 
            _e('배송업체:', 'sym-shipping-tracking');
            ?>
</label>
					<select id="wskl-delivery-agent" name="wskl-delivery-agent">
						<?php 
            foreach ($agents as $k => $v) {
                ?>
							<option value="<?php 
                echo $k;
                ?>
" <?php 
                echo $current_agent == $k ? 'selected' : '';
                ?>
><?php 
                echo $v;
                ?>
</option>
						<?php 
            }
            ?>
					</select>
				</li>
				<li>
					<label for="wskl-tracking-number"><?php 
            _e('송장번호:', 'sym-shipping-tracking');
            ?>
</label>
					<input type="text" id="wskl-tracking-number" name="wskl-tracking-number" placeholder="운송장 번호 입력" value="<?php 
            echo $current_tracking_number;
            ?>
">
				</li>
			</ul>
			<?php 
        }
 function test_wskl_get_option()
 {
     $option_name = 'test_option';
     $prefixed_option_name = wskl_get_option_name($option_name);
     update_option($prefixed_option_name, 'yes');
     $this->assertTrue(get_option($prefixed_option_name) === 'yes');
     $this->assertTrue('yes' === wskl_get_option($option_name));
     update_option($prefixed_option_name, 'no');
     $this->assertTrue(get_option($prefixed_option_name) === 'no');
     $this->assertTrue('no' === wskl_get_option($option_name));
     update_option($prefixed_option_name, '0');
     $this->assertTrue(get_option($prefixed_option_name) === '0');
     $this->assertTrue('0' === wskl_get_option($option_name));
     update_option($prefixed_option_name, 'test-value');
     $this->assertTrue(get_option($prefixed_option_name) === 'test-value');
     $this->assertTrue('test-value' === wskl_get_option($option_name));
 }
/**
 * Prepared for CloudFlare Flexible SSL.
 *
 * @return mixed|string|void
 */
function wskl_get_host_api_url()
{
    $cassandra_ip_address = wskl_get_option('cassandra_ip_address', '');
    $override_url = wskl_get_option('develop_cassandra_url');
    if (empty($cassandra_ip_address)) {
        $hostname = parse_url(WSKL_HOST_API_URL, PHP_URL_HOST);
        if ($hostname) {
            $cassandra_ip_address = gethostbyname($hostname);
            update_option(wskl_get_option_name('cassandra_ip_address'), $cassandra_ip_address);
        }
    }
    if (wskl_debug_enabled() && !empty($override_url)) {
        return $override_url;
    }
    if ($cassandra_ip_address == '127.0.0.1') {
        return WSKL_ALTERNATE_HOST_API_URL;
    }
    return WSKL_HOST_API_URL;
}
 public static function callback_save_post($post_id, \WP_Post $post, $update)
 {
     if (!$update || defined('DOING_AJAX') || defined('DOING_AUTOSAVE')) {
         return;
     }
     $is_export_allowed = filter_var(wskl_POST('allow-export'), FILTER_VALIDATE_BOOLEAN);
     if (!$is_export_allowed) {
         return;
     }
     $auth = new WSKL_Auth_Info('marketing');
     if ($auth->is_verified()) {
         $key_type = $auth->get_key_type();
         $key_value = $auth->get_key_value();
         $user_id = $auth->get_oir()->get_user_id();
         $site_url = site_url();
         $remote_post_id = PostAPI::send_post($key_type, $key_value, $site_url, $user_id, $post_id);
         if ($remote_post_id) {
             $metadata = array('post_modified' => $post->post_modified, 'post_modified_gmt' => $post->post_modified_gmt, 'exported' => time(), 'remote_post_id' => $remote_post_id);
             update_post_meta($post_id, wskl_get_option_name('post_export_metadata'), $metadata);
         } else {
             error_log('callback_save_post() finished unsuccessfully!');
         }
     }
 }
/**
 * 해당 옵션을 boolean 으로 해석해 true, false 로 리턴
 *
 * @author changwoo
 *
 * @param $option_name string prefix 문자열을 붙이지 않은 옵션 이름.
 *
 * @return boolean 해당 옵션
 */
function wskl_is_option_enabled($option_name)
{
    $value = get_option(wskl_get_option_name($option_name));
    return filter_var($value, FILTER_VALIDATE_BOOLEAN);
}
function update_test_cassandra_url()
{
    update_option(wskl_get_option_name('develop_cassandra_url'), DEFAULT_CASSANDRA_URL);
}
 public function get_option_name($key)
 {
     return wskl_get_option_name($this->id . '_' . $key);
 }
 public static function set_target_domain($value)
 {
     update_option(wskl_get_option_name('ip_block_target'), site_url());
     return $value;
 }
 public static function service_social_login_naver()
 {
     if (isset($_GET['sym-api']) && $_GET['sym-api'] == 'service-social-login-naver') {
         update_option(WSKL_PREFIX . 'sym-api-' . $_SERVER['HTTP_CLIENT_IP'], 'service-social-login-naver');
     }
     if (isset($_GET['sym-api']) && $_GET['sym-api'] == 'service-social-login-naver' || isset($_GET['code']) && get_option(WSKL_PREFIX . 'sym-api-' . $_SERVER['HTTP_CLIENT_IP']) == 'service-social-login-naver') {
         require 'home-social-login/http.php';
         require 'home-social-login/oauth_client.php';
         $client = new oauth_client_class();
         $client->debug = FALSE;
         $client->debug_http = TRUE;
         $client->server = 'Naver';
         $client->redirect_uri = site_url() . '/index.php';
         $client->client_id = get_option(wskl_get_option_name('naver_client_id'));
         $client->client_secret = get_option(wskl_get_option_name('naver_client_secret'));
         if (strlen($client->client_id) == 0 || strlen($client->client_secret) == 0) {
             wskl_sym__alert('네이버 연동키값을 확인해 주세요.');
         }
         if ($login == 'Y') {
             unset($_SESSION['OAUTH_STATE']);
             $client->ResetAccessToken();
         }
         /* API permissions
          */
         if ($success = $client->Initialize()) {
             if ($success = $client->Process()) {
                 if (strlen($client->access_token)) {
                     $success = $client->CallAPI('https://apis.naver.com/nidlogin/nid/getUserProfile.xml', 'POST', array('mode' => 'userinfo'), array('FailOnAccessError' => TRUE), $user);
                 }
             }
             $success = $client->Finalize($success);
         }
         if ($client->exit) {
             exit;
         }
         if ($success) {
             $xml = simplexml_load_string($user);
             if ($xml->result->resultcode == '00') {
                 $client->GetAccessToken($AccessToken);
                 $mb_gubun = 'naver';
                 $mb_id = $xml->response->enc_id;
                 $mb_name = $xml->response->nickname;
                 $mb_nick = $xml->response->nickname;
                 $mb_email = $xml->response->email;
                 $token_value = $AccessToken['value'];
                 $token_refresh = $AccessToken['refresh'];
                 $token_secret = '';
                 //$client->ResetAccessToken();
                 if (!trim($mb_id) || !trim($token_value)) {
                     wskl_sym__alert("정보가 제대로 넘어오지 않아 오류가 발생했습니다.");
                 }
                 $token_array = urlencode(static::encryptIt($mb_gubun . '|' . substr(str_replace('|', '', $mb_id), 0, 18) . '|' . $mb_name . '|' . $mb_nick . '|' . $mb_email));
                 $redirect_url = '/?sym-api=process-social-login&token=' . $token_array;
                 wp_redirect($redirect_url);
                 exit;
             } else {
                 $error = htmlspecialchars($xml->result->resultcode);
                 alert_close($error);
             }
         } else {
             $error = htmlspecialchars($client->error);
             alert_close($error);
         }
     }
 }
<?php

require_once WSKL_PATH . '/includes/lib/auth/class-wskl-auth-info.php';
require_once WSKL_PATH . '/includes/lib/cassandra-php/class-api-handler.php';
use wskl\lib\cassandra\PostAPI;
if (!defined('LAST_POST_EXPORT')) {
    define('LAST_POST_EXPORT', wskl_get_option_name('last_post_export'));
}
class WSKL_Post_Export
{
    public static function initialize()
    {
        $auth_info = new WSKL_Auth_Info('marketing');
        if (!$auth_info->is_verified()) {
            self::not_authorized_output();
            return;
        }
        /**
         * @see wordpress/wp-admin/includes/meta-boxes.php post_submit_meta_box()
         */
        add_action('post_submitbox_misc_actions', array(__CLASS__, 'callback_post_submitbox_misc_actions'), 99, 1);
        add_action('save_post', array(__CLASS__, 'callback_save_post'), 99, 3);
    }
    public static function not_authorized_output()
    {
    }
    public static function callback_post_submitbox_misc_actions(\WP_Post $post)
    {
        $context = array('last_export' => get_post_meta($post->ID, LAST_POST_EXPORT, TRUE));
        $default_path = __DIR__ . '/templates/';
        wc_get_template('post_submitbox_misc.php', $context, '', $default_path);
 public function test_url_is_expected()
 {
     $opt = get_option(wskl_get_option_name('develop_cassandra_url'));
     $this->assertEquals($opt, 'http://localhost/wrong/api/url/wrong');
 }
    private function settings_fields()
    {
        // specify settings fields
        $pg_agency = get_option(wskl_get_option_name('pg_agency'));
        $settings['preview'] = array('title' => __('일러두기', 'wskl'), 'description' => __('다보리를 만든 목적과 사용 방법 및 구매와 기술지원 방법과 업그레이드 등을 설명합니다.', 'wskl'), 'fields' => array(array('id' => 'dummy_1', 'label' => __('제작 목적', 'wskl'), 'description' => '<ol class="wskl-notice">' . '<li>' . __('워드프레스와 우커머스를 Cafe24나 고도몰처럼" 더 쉽고 더 편리하게 만들었습니다.', 'wskl') . '</li>' . '<li>' . __('쇼핑몰 영업에 꼭 필요한 기능만을 모두 담아서 최소의 비용으로 제공합니다.', 'wskl') . '</li>' . '<li>' . __('"다보리 마케팅 자동화 서버와 연동"하여 중소상공인을 위한 "마케팅 자동화" 서비스를 제공합니다.', 'wskl') . '</li>' . '</ol>', 'type' => 'caption', 'default' => ''), array('id' => 'dummy_2', 'label' => __('사용방법', 'wskl'), 'description' => __('<span class="wskl-notice">플러그인 인증키로 "제품 인증"을 하기 전에는 본플러그인의 기능을 사용할 수 없습니다.<br/></span>
						<a href="https://www.dabory.com/" target="_blank" >"다보리 플러그인 인증키 확인" 페이지로 바로가기</a>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'dummy_5', 'label' => __('업데이트/기술지원', 'wskl'), 'description' => __('
						<a href="http://www.symphonysoft.co.kr/%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8/" target="_blank" >플러그인 다운로드</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://www.dabory.co.kr/cs/service/" target="_blank">기술지원 요청 바로가기</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://www.dabory.com/shoppingmall/webhosting/" target="_blank" >전용관리 웹호스팅 알아보기</a><br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'enable_config_editor', 'label' => __('설정편집', 'wskl'), 'description' => __('간단한 wp-config.php 설정 편집 기능 사용.<br><span class="wskl-notice">이 설정은 wp-config.php 파일을 편집합니다. 유지보수시에만 제한적으로 이용하세요.</span>', 'wskl'), 'type' => 'checkbox', 'default' => '')));
        $payment_description = '';
        //		$essential_description            = '';
        //		$extension_description            = '';
        //		$marketing_automation_description = '';
        if (isset($_GET['tab']) && $_GET['tab'] == 'authentication') {
            $payment_description = sprintf('%s <a href="#" id="payment_license_activation">%s</a><br/><span id="payment_license_status">%s</span>', __('활성화 키를 입력후 기능을 활성화하십시오.', 'wskl'), __('키 인증', 'wskl'), WSKL_Auth::get_license_duration_string('payment'));
            //			$essential_description = sprintf(
            //				'%s <a href="#" id="essential_license_activation">%s</a><br/><span id="essential_license_status">%s</span>',
            //				__( '핵심기능 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '핵심기능 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'essential' )
            //			);
            //
            //			$extension_description = sprintf(
            //				'%s <a href="#" id="extension_license_activation">%s</a><br/><span id="extension_license_status">%s</span>',
            //				__( '확장기능 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '확장기능 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'extension' )
            //			);
            //
            //			$marketing_automation_description = sprintf(
            //				'%s <a href="#" id="marketing_automation_license_activation">%s</a><br/><span id="marketing_automation_license_status">%s</span>',
            //				__( '마케팅자동화 키를 입력후 기능을 활성화하십시오.', 'wskl' ),
            //				__( '마케팅자동화 인증', 'wskl' ),
            //				WSKL_Auth::get_license_duration_string( 'marketing' )
            //			);
        }
        $settings['authentication'] = array('title' => __('제품인증', 'wskl'), 'description' => __('제품 구매 또는 무료 사용시 www.dabory.com에서 부여된 활성화키로 플러그인을 먼저 활성화후 사용 가능합니다.<br/>
						<a href="https://www.dabory.com/my-account/view-order/" target="_blank" ><span class="wskl-notice">"다보리 플러그인 인증키 확인" 페이지로 바로가기</span></a>', 'wskl'), 'fields' => array(array('id' => 'dummy_3', 'label' => __('사이트 주소(URL)', 'wskl'), 'description' => __('
						' . get_option('siteurl') . '<br/>
						<span class="wskl-notice">인증키는 사이트 주소와 다보리 메타(meta) 서버 측과 동기화되어 활성화되므로 <br/>
						관리자모드 "설정"에서 "사이트를 변경하는 경우" 다시 기능 활성화를 하셔야 합니다. </span>
					', 'wskl'), 'type' => 'caption', 'default' => ''), array('id' => 'payment_license', 'label' => __('활성화 키', 'wskl'), 'description' => $payment_description, 'type' => 'longtext', 'default' => '', 'placeholder' => '')));
        $settings['checkout-payment-gates'] = array('title' => __('지불기능(A)', 'wskl'), 'description' => __('국내의 모든 지불 대행 회사의 결제 플러그인을 지원합니다.<br/>
						<span class="wskl-notice">현재 지원되지 않는 플러그인은 무료로 개발해드립니다.</span><br/>
			            결제대행(PG)회사를 추가하기를 원하는 경우  service@econoq.co.kr 로 메일 주시면  1주일이내에 개발해 드리겠습니다.<br/>
						<a href="http://www.symphonysoft.co.kr/" target="_blank">신규 플러그인 개발 요청 하러 가기</a><br/>', 'wskl'), 'fields' => array(array('id' => 'enable_sym_pg', 'label' => __('다보리 PG 사용 설정', 'wskl'), 'description' => __('다보리 PG (Payment Gateway) 기능 사용 여부를 설정합니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'company', 'label' => __('회사명 입력 가능', 'wskl'), 'description' => __('사업자 대상 위주 판매의 경우 회사명을 입력 가능 설정을 합니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'pg_agency', 'label' => __('결제대행업체', 'wskl'), 'description' => __('<span class="wskl-notice">변경시 자동으로 저장됩니다.</span> ', 'wskl'), 'type' => 'select', 'options' => WSKL_Payment_Gates::get_pay_gates(), 'default' => 'payapp')));
        switch ($pg_agency) {
            // 기존 PG Agency (Active-X 기반) 공통 설정 필드 #1
            case 'kcp':
            case 'inicis':
            case 'ags':
                $agencies_common_fields = (include WSKL_PATH . '/includes/admin/settings/structures/checkout-payment-gates/fields/classic-pg-agencies-common-fields-1.php');
                $settings['checkout-payment-gates']['fields'] = array_merge($settings['checkout-payment-gates']['fields'], $agencies_common_fields);
                break;
                // 페이앱 전용 필드 #1
            // 페이앱 전용 필드 #1
            case 'payapp':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'checkout_methods', 'label' => __('결제방식 지정', 'wskl'), 'description' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;사용하실 결제방식을 지정해 주십시오.', 'wskl'), 'type' => 'checkbox_multi', 'options' => WSKL_Payment_Gates::get_checkout_methods(), 'default' => array('credit', '신용카드')));
                break;
                // 아임포트 전용 필드 #1
            // 아임포트 전용 필드 #1
            case 'iamport':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'checkout_methods', 'label' => __('결제방식 지정', 'wskl'), 'description' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;사용하실 결제방식을 지정해 주십시오.', 'wskl'), 'type' => 'checkbox_multi', 'options' => WSKL_Payment_Gates::get_checkout_methods('iamport'), 'default' => array('credit', '신용카드')), array('id' => 'dummy_33', 'label' => __('아임포트 결정방법', 'wskl'), 'description' => __('<span class="wskl-notice">아임포트 결제와 관련된 내용은 아임포트 서버에서 실행되는 내용이므로 다보리에서 책임지지 않습니다. </span><br><a href="https://admin.iamport.kr/settings" target="_blank">아임포트 PG 설정 바로가기</a><br/>
						1. 아임포트에서는 현재 카카오페이, LGU+, KCP, 이니시스, JT-Net, 나이스정보통신이 지원되며 <br>가맹점 설정은 아임포트 사이트에 회원가입/로그인한 후 설정하여야 합니다.', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
        }
        switch ($pg_agency) {
            // 페이앱 전용 필드 #2: 인증사항
            case 'payapp':
                $settings['checkout-payment-gates']['fields'] = array_merge($settings['checkout-payment-gates']['fields'], include WSKL_PATH . '/includes/admin/settings/structures/checkout-payment-gates/fields/payapp/payapp-fields.php');
                break;
            case 'kcp':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'kcp_sitename', 'label' => __('사이트이름', 'wskl'), 'description' => __('자체적으로 정한 사이트 이름을 입력해주십시오. (반드시 영문자로 설정하여 주시기 바랍니다.)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) 다보리 쇼핑몰', 'wskl')), array('id' => 'kcp_sitecd', 'label' => __('Site Code', 'wskl'), 'description' => __('KCP 에서 발급된 Site Code 를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) T0000', 'wskl')), array('id' => 'kcp_sitekey', 'label' => __('Site Key', 'wskl'), 'description' => __('KCP 에서 발급된 Site Key를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) 3grptw1.zW0GSo4PQdaGvsF__', 'wskl')), array('id' => 'dummy_11', 'label' => __('상점등록', 'wskl'), 'description' => __('<span class="wskl-notice">상점등록 과정은 매우 중요한 사항이므로  정확히 숙지하고 실행해주셔야 합니다. </span></br>
						1. KCP와 계약 체결 후 다음의 내용을 발급 받습니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;A.Site Code와 Site Key를 입력하고 저장합니다.</br>
                         2. 당 플러그인의 KCP 홈 폴더중 “bin” 폴더에 있는 pp_cli 화일의 실행권한을 755로 바꾸어 줍니다. 그대로 둘 경우 결제 않됨.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;예)/public_html/wp-content/plugins/wskl/includes/lib/homekcp/bin/pp_cli</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;(1) ssh로 로그인 후, 해당폴더에서 "chmod 755 pp_cli" 실행 또는</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;(2) FTP 로 접속하여 해당 화일에 오른쪽 마우스를 클릭 - "화일 권한" 확인 후 755 로 저장</br>
 						<span class="wskl-info">테스트시에는기본 설치된 테스트용 KCP TEST  상점이 사용되므로 참고하세요</span></br>', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
            case 'inicis':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'inicis_admin', 'label' => __('키패스워드', 'wskl'), 'description' => __('키패스워드입력 - 상점관리자 패스워드와 무관합니다.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) 1111', 'wskl')), array('id' => 'inicis_mid', 'label' => __('상점 아이디', 'wskl'), 'description' => __('이니시스에서 발급된 상점아이디를 대소문자 구분하여 입력해주십시오.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) INIpayTest', 'wskl')), array('id' => 'inicis_url', 'label' => __('상점 URL', 'wskl'), 'description' => __('상점의 홈페이지 주소를 입력해주십시오.( http://포함 )', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) http://www.your_domain.co.kr', 'wskl')), array('id' => 'dummy_11', 'label' => __('상점등록', 'wskl'), 'description' => __('<span class="wskl-notice">상점등록 과정은 매우 중요한 사항이므로  정확히 숙지하고 실행해주셔야 합니다. </span></br>
						1. 이니시스와 계약 체결 후 다음의 내용을 발급 받습니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;A. 키패스워드(숫자 4자리)와  상점 아이디(10자리)를 해당설정에 입력하고 저장합니다.</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;B.키화일 등  4개 (keypass.enc, mcert.pem, mpriv.pem, readme.txt)</br>
                        2. 당 플러그인의 이니페이 홈 폴더중 “key” 폴더에 상점아이디와 동일한 이름의 서브 디렉터리를 만듭니다(대소문자 구별함.).</br>
                        &nbsp;&nbsp;&nbsp;&nbsp;예)/public_html/wp-content/plugins/wskl/includes/lib/homeinicis/key/[상점아이디]</br>
                        3. 발급받은 화일  4개 (keypass.enc, mcert.pem, mpriv.pem, readme.txt)를 2.에서 만든 폴더에 복사합니다.</br>
 						<span class="wskl-info">테스트시에는기본 설치된 테스트용 INIpayTest 상점아이디폴더가 사용되므로 참고하세요</span></br>', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
            case 'lgu+':
                break;
            case 'ags':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'ags_storenm', 'label' => __('상점명', 'wskl'), 'description' => __('올더게이트 상점명을 입력해주십시오', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) 올더게이트', 'wskl')), array('id' => 'ags_storeid', 'label' => __('상점 ID', 'wskl'), 'description' => __('올더게이트에서 발급된 상점ID를 정확히 입력해주십시오.(중요)', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => __('예) aegis', 'wskl')), array('id' => 'ags_mallurl', 'label' => __('상점 URL', 'wskl'), 'description' => __('상점의 홈페이지 주소를 입력해주십시오.( http://포함 )', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => __('예) http://www.allthegate.com', 'wskl')), array('id' => 'ags_hp_id', 'label' => __('CPID(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 CPID로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_hp_pwd', 'label' => __('CP 비밀번호(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 비밀번호로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_hp_subid', 'label' => __('SUB_ID(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상점만 입력', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_prodcode', 'label' => __('상품코드(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상품코드로 변경', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'ags_unittype', 'label' => __('상품종류(모바일결제)', 'wskl'), 'description' => __('올더게이트에서 발급받으신 상품종류로 변경: 디지털컨텐츠=1, 실물(상품)=2', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''));
                break;
            case 'iamport':
                array_push($settings['checkout-payment-gates']['fields'], array('id' => 'iamport_user_code', 'label' => __('가맹점 식별코드', 'wskl'), 'description' => __('아임포트의 가맹점 식별코드를 입력하여 주십시오.', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'iamport_rest_key', 'label' => __('REST API 키', 'wskl'), 'description' => __('아임포트의 REST API 키를 입력하여 주십시오.', 'wskl'), 'type' => 'text', 'default' => '', 'placeholder' => ''), array('id' => 'iamport_rest_secret', 'label' => __('REST API secret', 'wskl'), 'description' => __('아임포트의 REST API secret 입력하여 주십시오.', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'dummy_31', 'label' => __('가맹점 등록', 'wskl'), 'description' => __('
						<span class="wskl-notice">아임포트의 가맹점 등록 과정은 좀 특이하므로 세심한 주의를 요합니다.<br>고객의 결제 진행시 결제 정보를 아임포트 서버로 보내주면 아임포트 서버가 결제 처리를 대행하는<br> 구조이므로 각 결제 업체의 PG 연동 정보가 아임포트 회원 정보에 설정되어야 합니다.</span></br><span class="wskl-info">
						1. 아임포트 회원가입/로그인 후 시스템설정->내정보 에서 확인된 정보를 입력합니다.</br>
                        &nbsp;&nbsp;아임포트 회원로그인 후 확인한 REST API 정보를 입력하고 저장합니다.</br><a href="https://admin.iamport.kr/settings" target="_blank">https://admin.iamport.kr/settings  REST API 정보를 확인하러 가기</a></br>
 						2. <a href="https://admin.iamport.kr/settings" target="_blank">https://admin.iamport.kr/settings</a> 의 "PG연동 설정"에서 <br>각 결제 대행업체에서 발급 받은 PG연동 정보를 설정합니다. </br> </font></br>
  					', 'wskl'), 'type' => 'caption', 'default' => ''));
                break;
        }
        // 페이앱, 아임포트는 추가설정내용 없음.
        if (!in_array($pg_agency, array('payapp', 'iamport'))) {
            array_push($settings['checkout-payment-gates']['fields'], array('id' => 'dummy_1', 'label' => __('추가설정내용', 'wskl'), 'description' => __('<span class="wskl-notice">해당페이지 설정후 반드시 추가해야할 "우커머스 결제설정" 내용입니다.</span><a href="' . esc_url(add_query_arg(array('page' => 'wc-settings', 'tab' => 'checkout'), admin_url('admin.php'))) . '" target="_blank">결제설정 바로가기</a><br/>
						1. "해당 페이지를 설정하면 우커머스->설정->결제 설정"의 하위메뉴에 지정한 결제 방법이 추가됩니다. <br/>
						   &nbsp;&nbsp;&nbsp;각각의 하위메뉴로 들어가서 활성화에 체크하여 주십시오.  <br/>
						2. "우커머스->설정->결제옵션->지불게이트웨이"에서 고객의 결제페이지에 보일 "결제 방법의 순서"를 결정하여 주십시오.<br/>
						3. "우커머스->설정->결제설정"의 각 결제 방식을 선택하면 고객의 결제페이지에 보일 결제방식에 대한 안내문 변경이 가능합니다.<br/>', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        $settings['essential-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/essential-features.php');
        $settings['convenience-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/convenience-features.php');
        $settings['social-login'] = array('title' => __('소셜기능(S)', 'wskl'), 'description' => __('계정관리와  로그인 관련 설정입니다.(소셜 아이콘은 includes/lib/custom 폴더를 참조)', 'wskl'), 'fields' => array(array('id' => 'enable_social_login', 'label' => __('다보리 소셜 로그인 활성화 ', 'wskl'), 'description' => __('다보리에서 제공한 로그인을 사용하게 됩니다.', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'fb_login', 'label' => __('페이스북  계정으로 로그인 활성화 ', 'wskl'), 'description' => __('활성화이후  발급키 입력창이 나타납니다.', 'wskl'), 'type' => 'checkbox', 'default' => '')));
        if (get_option(WSKL_PREFIX . 'fb_login') == 'on') {
            array_push($settings['social-login']['fields'], array('id' => 'fb_app_id', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] App ID', 'wskl'), 'description' => __('페이스북의 App ID 를 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'fb_app_secret', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] App Secret', 'wskl'), 'description' => __('페이스북의 App Secret을 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'fb_login_link_text', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북]링크 텍스트', 'wskl'), 'description' => __('로그인 링크에 보여질 텍스트 또는 이미지 태그를 입력하십시오. 기본 아이콘을 사용하려면 \'[icon]\'으로 입력하세요.', 'wskl'), 'type' => 'textarea', 'default' => '[icon]', 'placeholder' => ''), array('id' => 'dummy_13', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[페이스북] 키발급', 'wskl'), 'description' => __('
						<span class="wskl-notice">반드시 https://developers.facebook.com 에서 키발급을 먼저 받으십시오.</span>   <a href="https://developers.facebook.com" target="_blank" >키발급 바로가기</a><br/>
						1. My App 메뉴에서 Add a New App 을 클릭한 후 Website 를 선택하십시오. <br/>
						2. 해당웹사이트의 이름을 입력하시고 Create New Facebook ID 하십시오. <br/>
						3. 반드시 Site URL에 http://를 포함한 고객의 웹사이트 주소를 입력하십시오. <br/>
						4. App ID 생성이 완료되면 반드시 해당 App의 Settings 로 가셔서 App Domains와 Website에서 <br/>고객의
						    웹사이트 주소가 일치하는 지 확인하세요. <span class="wskl-notice">웹사이트 주소가 바뀔때 반드시 여기와 일치시켜야 합니다.</span><br/>
						5. App ID와 App Secret 을 확인하신 후 다보리 플러그인의 해당 키값을 입력하고 저장하여 주십시오.<br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        array_push($settings['social-login']['fields'], array('id' => 'naver_login', 'label' => __('네이버 계정으로 로그인 활성화 ', 'wskl'), 'description' => __('활성화이후  발급키 입력창이 나타납니다. ', 'wskl'), 'type' => 'checkbox', 'default' => ''));
        if (get_option($this->_prefix . 'naver_login') == 'on') {
            array_push($settings['social-login']['fields'], array('id' => 'naver_client_id', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] Client ID', 'wskl'), 'description' => __('네이버의 Client ID를 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'naver_client_secret', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] Client Secret', 'wskl'), 'description' => __('네이버의 Client Secret 을 입력하십시오', 'wskl'), 'type' => 'longtext', 'default' => '', 'placeholder' => ''), array('id' => 'naver_login_link_text', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] 링크 텍스트', 'wskl'), 'description' => __('로그인 링크에 보여질 텍스트 또는 이미지 태그를 입력하십시오. 기본 아이콘을 사용하려면 \'[icon]\'으로 입력하세요.', 'wskl'), 'type' => 'textarea', 'default' => '[icon]', 'placeholder' => ''), array('id' => 'dummy_14', 'label' => __('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[네이버] 키발급', 'wskl'), 'description' => __('
						<span class="wskl-notice">반드시  http://developer.naver.com/wiki/pages/NaverLogin 에서 키발급을 먼저 받으십시오.</span>   <a href=" http://developer.naver.com/wiki/pages/NaverLogin" target="_blank" >키발급 바로가기</a><br/>
						1. [키발급 관리]를 선택한 후 네이버 로그인을 선택하십시오.. <br/>
						2. 새 애플리케이션을 등록하고 서비스 환경은 [www-Web]으로 선택하십시오.. <br/>
						3. PC웹과 모바일 웹에서 고객의  웹사이트 주소를 입력하시고 콜백도 동일하게 입력하십시오. <br/>
                        4. Client ID 생성이 완료되면 어플리케이션 메뉴의 [일반]메뉴로 고객의  PC웹과 모바일 웹사이트 주소가 일치하는 지 확인하세요. <br/>
						<span class="wskl-notice">웹사이트 주소가 바뀔때 반드시 여기와 일치시켜야 합니다.</span><br/>
						5. Client ID와 Client Secret 을 확인하신 후 다보리 플러그인의 해당 키값을 입력하고 저장하여 주십시오.<br/>
					', 'wskl'), 'type' => 'caption', 'default' => ''));
        }
        $settings['protection-features'] = array('title' => __('차단보안기능(R)', 'wskl'), 'description' => __('특별한 관리없이 악성댓글이나 악성트래픽이 대폭 감소합니다. 한국인 대상 사이트의 경우 한국,미국만 오픈해도 됩니다.', 'wskl'), 'fields' => array(array('id' => 'enable_countryip_block', 'label' => __('국가별 IP 차단', 'wskl'), 'description' => __('국가별 IP를 차단하여 해킹을 미연에 방지합니다.</br>
						활성화시 반드시 아래의 "화이트리스트 국가코드"를 넣어 주십시오', 'wskl'), 'type' => 'checkbox', 'default' => ''), array('id' => 'white_ipcode_list', 'label' => __('화이트 IP 코드 리스트', 'wskl'), 'description' => __('차단하지 않을 국가의 IP 코드를 추가합니다. 컴마로 분리. 자세한 국가코드는 <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank">ISO 3166-1 alpha-2</a>를 참고하세요. </br><span class="wskl-description">예) KR,US,JP,CN => KR-한국 US-미국, JP-일본, CN-중국</span>', 'wskl'), 'type' => 'longtext', 'default' => 'KR,US,JP,CN', 'placeholder' => 'KR,US,JP,CN'), array('id' => 'dummy_1', 'label' => __('작동 상황', 'wskl'), 'description' => site_url() == wskl_get_option('ip_block_target') ? '<span class="wskl-info">' . __('차단 기능이 동작합니다.', 'wskl') . '</span>' : '<span class="wskl-notice">' . __('도메인이 변경되어 기능이 중지되었습니다. 설정 저장 버튼을 눌러 다시 활성화시켜 주세요', 'wskl') . '</span>')));
        $settings['marketing'] = (include WSKL_PATH . '/includes/admin/settings/structures/marketing-automation.php');
        if (wskl_lab_enabled()) {
            $settings['beta-features'] = (include WSKL_PATH . '/includes/admin/settings/structures/beta-features.php');
        }
        if (wskl_debug_enabled()) {
            $settings['developer'] = (include WSKL_PATH . '/includes/admin/settings/structures/developer.php');
        }
        $settings = apply_filters('wskl_settings_fields', $settings);
        return $settings;
    }
 /**
  * 로그인 필드 값이 없는 경우는 크론 작업 시간으로 채워 줌.
  *
  * @used-by WSKL_Inactive_Accounts::do_interval_jobs()
  */
 public function fill_user_login_field()
 {
     $target_role = wskl_get_option('inactive-accounts_target_role');
     if (!$target_role) {
         $message = __METHOD__ . ": Values are net properly set.\n";
         $message .= "  target_role={$target_role}";
         error_log($message);
         return;
     }
     // Get users whose last_login meta keys are missing, or their meta values are 0 or blank.
     $key = wskl_get_option_name('last_login');
     $args = array('role' => $target_role, 'meta_query' => array('relation' => 'OR', array('key' => $key, 'value' => 0, 'type' => 'NUMERIC', 'compare' => 'NOT EXISTS'), array('key' => $key, 'value' => 0, 'type' => 'NUMERIC', 'compare' => '='), array('key' => $key, 'value' => '', 'type' => 'CHAR', 'compare' => '=')));
     $query = new WP_User_Query($args);
     $results = $query->get_results();
     /** @var WP_User $user */
     foreach ($results as $user) {
         update_user_meta($user->ID, $key, $this->cron_job_id);
     }
 }
/**
 * 휴면 처리 전, 통지해야 할 회원의 목록
 * - $min_timestamp <= timestamp < $max_timestamp
 * - 이전에 통지 받지 않은 회원.
 *
 * @param int          $min_timestamp 통지 기준 최소 timestamp
 * @param int          $max_timestamp 통지 기준 최대 timestamp
 * @param string|array $role
 *
 * @return array WP_User 객체의 array
 */
function wskl_get_alert_staged_users($min_timestamp, $max_timestamp, $role)
{
    /** @var \wpdb $wpdb */
    global $wpdb;
    $key_name = wskl_get_option_name('last_login');
    if (is_array($role)) {
        $role_exp = '(' . implode('|', $role) . ')';
    } else {
        $role_exp = "({$role})";
    }
    $query = new WP_User_Query(array('meta_query' => array('relation' => 'AND', array('key' => $key_name, 'value' => $max_timestamp, 'type' => 'NUMERIC', 'compare' => '<'), array('key' => $key_name, 'value' => $min_timestamp, 'type' => 'NUMERIC', 'compare' => '>='), array('key' => wskl_get_option_name('inactive-accounts_alerted'), 'value' => 0, 'type' => 'NUMERIC', 'compare' => 'NOT EXISTS'), array('key' => "{$wpdb->prefix}capabilities", 'value' => $role_exp, 'compare' => 'REGEXP'))));
    return $query->get_results();
}
 public static function get_auth_section_settings()
 {
     $section = array(array('type' => 'title', 'title' => __('서비스 제공자 설정', 'wskl'), 'id' => 'provider_options'), array('id' => wskl_get_option_name('sms_provider_id'), 'type' => 'text', 'title' => '아이디', 'desc' => '', 'default' => ''), array('id' => wskl_get_option_name('sms_provider_password'), 'type' => 'password', 'title' => '패스워드', 'desc' => '', 'default' => ''), array('type' => 'sms_provider_additional'), array('type' => 'sectionend', 'id' => 'provider_options'));
     return apply_filters('dabory_sms_auth_section_settings', $section);
 }
 /**
  * BACS 지불에 대해 계좌 정보 알림
  *
  * @return array
  */
 private static function get_settings_payment_bacs()
 {
     return array(array('id' => 'payment_bacs_options', 'title' => __('BACS 결제', 'wskl') . ' ' . __('설정', 'wskl'), 'desc' => __('무통장입금(BACS)으로 결제시 별도의 문자 메세지를 전송합니다. 예) 입금 계좌 정보 안내.', 'wskl'), 'type' => 'title'), array('id' => wskl_get_option_name('sms_payment-bacs_enabled'), 'title' => __('활성화', 'wskl'), 'desc' => __('고객에게 문자 메시지로 통보합니다.', 'wskl'), 'type' => 'checkbox'), array('id' => wskl_get_option_name('sms_payment-bacs_send_to_managers'), 'title' => __('상점 관리자에게 문자 전송', 'wskl'), 'desc' => __('같은 내용을 상점 관리자에게도 문자 메시지로 통보합니다.', 'wskl'), 'type' => 'checkbox'), array('id' => wskl_get_option_name('sms_payment-bacs_message_title'), 'title' => __('메시지 제목', 'wskl'), 'desc' => __('단문메시지(SMS)에서는 생략됩니다 ', 'wskl'), 'type' => 'text', 'default' => '{site_title} 무통장입금 안내'), array('id' => wskl_get_option_name('sms_payment-bacs_message_content'), 'title' => __('메시지 내용', 'wskl'), 'desc' => __('메시지 본문 템플릿을 작성하세요. 단문메시지(SMS) 1건으로 처리 되지 않는 긴 문자는 장문메시지(LMS)로 전송됩니다.', 'wskl'), 'type' => 'textarea', 'default' => '[{site_title}] 주문 감사드립니다. #{order_number} - {order_date}. 입금정보 **은행 1234-56-7890 예금주', 'custom_attributes' => array('rows' => 7, 'cols' => 80)), array('type' => 'order_magic_text_information'), array('type' => 'sectionend', 'id' => 'payment-bacs_options'));
 }
    function pay_callback()
    {
        global $woocommerce;
        global $woocommerce_ver21_less;
        @ob_clean();
        header('Content-type: text/html; charset=euc-kr');
        foreach ($_POST as $key => $row) {
            $_POST[$key] = iconv("UTF-8", "EUC-KR", $row);
        }
        $order_id = $_POST["oid"];
        $order = new WC_Order($order_id);
        /* INIsecurepay.php
         *
         * 이니페이 플러그인을 통해 요청된 지불을 처리한다.
         * 지불 요청을 처리한다.
         * 코드에 대한 자세한 설명은 매뉴얼을 참조하십시오.
         * <주의> 구매자의 세션을 반드시 체크하도록하여 부정거래를 방지하여 주십시요.
         *
         * http://www.inicis.com
         * Copyright (C) 2006 Inicis Co., Ltd. All rights reserved.
         */
        /****************************
         * 0. 세션 시작             *
         ****************************/
        // session_start();                                //주의:파일 최상단에 위치시켜주세요!!
        $inicis_session_vars = (array) get_user_meta(get_current_user_id(), wskl_get_option_name('inicis_session_vars'), TRUE);
        /**************************
         * 1. 라이브러리 인클루드 *
         **************************/
        require_once dirname(__FILE__) . '/homeinicis/libs/INILib.php';
        /***************************************
         * 2. INIpay50 클래스의 인스턴스 생성 *
         ***************************************/
        $inipay = new INIpay50();
        /*********************
         * 3. 지불 정보 설정 *
         *********************/
        //$inipay->SetField("inipayhome", "/home/ts/www/INIpay50"); // 이니페이 홈디렉터리(상점수정 필요)
        // 이니페이 홈디렉터리(상점수정 필요)
        $inipay->SetField("inipayhome", dirname(__FILE__) . '/homeinicis');
        // 고정 (절대 수정 불가)
        $inipay->SetField("type", "securepay");
        // 고정 (절대 수정 불가)
        $inipay->SetField("pgid", "INIphp" . $pgid);
        // 고정 (절대 수정 불가)
        $inipay->SetField("subpgip", "203.238.3.10");
        // 키패스워드(상점아이디에 따라 변경)
        //$inipay->SetField( "admin", $_SESSION['INI_ADMIN'] );
        // 키패스워드(상점아이디에 따라 변경)
        $inipay->SetField("admin", $inicis_session_vars['INI_ADMIN']);
        // 로그모드("true"로 설정하면 상세로그가 생성됨.)
        $inipay->SetField("debug", "true");
        // INIpay User ID (절대 수정 불가)
        $inipay->SetField("uid", $uid);
        // 상품명
        $inipay->SetField("goodname", $goodname);
        // 화폐단위
        $inipay->SetField("currency", $currency);
        //$inipay->SetField( "mid", $_SESSION['INI_MID'] );        // 상점아이디
        // 상점아이디
        $inipay->SetField("mid", $inicis_session_vars['INI_MID']);
        // 웹페이지 위변조용 RN값
        //$inipay->SetField( "rn", $_SESSION['INI_RN'] );
        // 웹페이지 위변조용 RN값
        $inipay->SetField("rn", $inicis_session_vars['INI_RN']);
        //$inipay->SetField( "price", $_SESSION['INI_PRICE'] );    // 가격
        // 가격
        $inipay->SetField("price", $inicis_session_vars['INI_PRICE']);
        //$inipay->SetField( "enctype",
        //                  $_SESSION['INI_ENCTYPE'] );// 고정 (절대 수정 불가)
        // 고정 (절대 수정 불가)
        $inipay->SetField("enctype", $inicis_session_vars['INI_ENCTYPE']);
        /*----------------------------------------------------------------------------------------
        		  price 등의 중요데이터는
        		  브라우저상의 위변조여부를 반드시 확인하셔야 합니다.
        
        		  결제 요청페이지에서 요청된 금액과
        		  실제 결제가 이루어질 금액을 반드시 비교하여 처리하십시오.
        
        		  설치 메뉴얼 2장의 결제 처리페이지 작성부분의 보안경고 부분을 확인하시기 바랍니다.
        		  적용참조문서: 이니시스홈페이지->가맹점기술지원자료실->기타자료실 의
        						 '결제 처리 페이지 상에 결제 금액 변조 유무에 대한 체크' 문서를 참조하시기 바랍니다.
        		  예제)
        		  원 상품 가격 변수를 OriginalPrice 하고  원 가격 정보를 리턴하는 함수를 Return_OrgPrice()라 가정하면
        		  다음 같이 적용하여 원가격과 웹브라우저에서 Post되어 넘어온 가격을 비교 한다.
        
        		   $OriginalPrice = Return_OrgPrice();
        		   $PostPrice = $_SESSION['INI_PRICE'];
        		   if ( $OriginalPrice != $PostPrice )
        		   {
        			   //결제 진행을 중단하고  금액 변경 가능성에 대한 메시지 출력 처리
        			   //처리 종료
        		   }
        
        		 ----------------------------------------------------------------------------------------*/
        $inipay->SetField("buyername", $buyername);
        // 구매자 명
        // 구매자 연락처(휴대폰 번호 또는 유선전화번호)
        $inipay->SetField("buyertel", $buyertel);
        // 구매자 이메일 주소
        $inipay->SetField("buyeremail", $buyeremail);
        // 지불방법 (절대 수정 불가)
        $inipay->SetField("paymethod", $paymethod);
        // 암호문
        $inipay->SetField("encrypted", $encrypted);
        // 암호문
        $inipay->SetField("sessionkey", $sessionkey);
        // 실제 서비스되는 상점 SITE URL로 변경할것
        // $inipay->SetField( "url", $_SESSION['inicis_url'] );
        $inipay->SetField("url", $inicis_session_vars['inicis_url']);
        $inipay->SetField("cardcode", $cardcode);
        // 카드코드 리턴
        // 보호자 이메일 주소(핸드폰 , 전화결제시에 14세 미만의 고객이 결제하면  부모 이메일로 결제 내용통보 의무, 다른결제 수단 사용시에 삭제 가능)
        $inipay->SetField("parentemail", $parentemail);
        /*-----------------------------------------------------------------*
         * 수취인 정보 *                                                   *
         *-----------------------------------------------------------------*
         * 실물배송을 하는 상점의 경우에 사용되는 필드들이며               *
         * 아래의 값들은 INIsecurepay.html 페이지에서 포스트 되도록        *
         * 필드를 만들어 주도록 하십시요.                                  *
         * 컨텐츠 제공업체의 경우 삭제하셔도 무방합니다.                   *
         *-----------------------------------------------------------------*/
        $inipay->SetField("recvname", $recvname);
        // 수취인 명
        $inipay->SetField("recvtel", $recvtel);
        // 수취인 연락처
        $inipay->SetField("recvaddr", $recvaddr);
        // 수취인 주소
        $inipay->SetField("recvpostnum", $recvpostnum);
        // 수취인 우편번호
        $inipay->SetField("recvmsg", $recvmsg);
        // 전달 메세지
        $inipay->SetField("joincard", $joincard);
        // 제휴카드코드
        $inipay->SetField("joinexpire", $joinexpire);
        // 제휴카드유효기간
        $inipay->SetField("id_customer", $id_customer);
        //user_id
        $inipay->SetField("log", "false");
        // 로깅은 생략합니다.
        /****************
         * 4. 지불 요청 *
         ****************/
        $inipay->startAction();
        /****************************************************************************************************************
         * 5. 결제  결과
         *
         *  1 모든 결제 수단에 공통되는 결제 결과 데이터
         *  거래번호 : $inipay->GetResult('TID')
         *  결과코드 : $inipay->GetResult('ResultCode') ("00"이면 지불 성공)
         *  결과내용 : $inipay->GetResult('ResultMsg') (지불결과에 대한 설명)
         *  지불방법 : $inipay->GetResult('PayMethod') (매뉴얼 참조)
         *  상점주문번호 : $inipay->GetResult('MOID')
         *  결제완료금액 : $inipay->GetResult('TotPrice')
         *
         * 결제 되는 금액 =>원상품가격과  결제결과금액과 비교하여 금액이 동일하지 않다면
         * 결제 금액의 위변조가 의심됨으로 정상적인 처리가 되지않도록 처리 바랍니다. (해당 거래 취소 처리)
         *
         *
         *  2. 신용카드,ISP,핸드폰, 전화 결제, 은행계좌이체, OK CASH BAG Point 결제 결과 데이터
         *      (무통장입금 , 문화 상품권 포함)
         *  이니시스 승인날짜 : $inipay->GetResult('ApplDate') (YYYYMMDD)
         *  이니시스 승인시각 : $inipay->GetResult('ApplTime') (HHMMSS)
         *
         *  3. 신용카드 결제 결과 데이터
         *
         *  신용카드 승인번호 : $inipay->GetResult('ApplNum')
         *  할부기간 : $inipay->GetResult('CARD_Quota')
         *  무이자할부 여부 : $inipay->GetResult('CARD_Interest') ("1"이면 무이자할부)
         *  신용카드사 코드 : $inipay->GetResult('CARD_Code') (매뉴얼 참조)
         *  카드발급사 코드 : $inipay->GetResult('CARD_BankCode') (매뉴얼 참조)
         *  본인인증 수행여부 : $inipay->GetResult('CARD_AuthType') ("00"이면 수행)
         *      각종 이벤트 적용 여부 : $inipay->GetResult('EventCode')
         *
         *      ** 달러결제 시 통화코드와  환률 정보 **
         *  해당 통화코드 : $inipay->GetResult('OrgCurrency')
         *  환율 : $inipay->GetResult('ExchangeRate')
         *
         *      아래는 "신용카드 및 OK CASH BAG 복합결제" 또는"신용카드 지불시에 OK CASH BAG적립"시에 추가되는 데이터
         *  OK Cashbag 적립 승인번호 : $inipay->GetResult('OCB_SaveApplNum')
         *  OK Cashbag 사용 승인번호 : $inipay->GetResult('OCB_PayApplNum')
         *  OK Cashbag 승인일시 : $inipay->GetResult('OCB_ApplDate') (YYYYMMDDHHMMSS)
         *  OCB 카드번호 : $inipay->GetResult('OCB_Num')
         *  OK Cashbag 복합결재시 신용카드 지불금액 : $inipay->GetResult('CARD_ApplPrice')
         *  OK Cashbag 복합결재시 포인트 지불금액 : $inipay->GetResult('OCB_PayPrice')
         *
         * 4. 실시간 계좌이체 결제 결과 데이터
         *
         *  은행코드 : $inipay->GetResult('ACCT_BankCode')
         *  현금영수증 발행결과코드 : $inipay->GetResult('CSHR_ResultCode')
         *  현금영수증 발행구분코드 : $inipay->GetResult('CSHR_Type')
         *                            *
         * 5. OK CASH BAG 결제수단을 이용시에만  결제 결과 데이터
         *  OK Cashbag 적립 승인번호 : $inipay->GetResult('OCB_SaveApplNum')
         *  OK Cashbag 사용 승인번호 : $inipay->GetResult('OCB_PayApplNum')
         *  OK Cashbag 승인일시 : $inipay->GetResult('OCB_ApplDate') (YYYYMMDDHHMMSS)
         *  OCB 카드번호 : $inipay->GetResult('OCB_Num')
         *
         * 6. 무통장 입금 결제 결과 데이터                                      *
         *  가상계좌 채번에 사용된 주민번호 : $inipay->GetResult('VACT_RegNum')                        *
         *  가상계좌 번호 : $inipay->GetResult('VACT_Num')                                          *
         *  입금할 은행 코드 : $inipay->GetResult('VACT_BankCode')                                    *
         *  입금예정일 : $inipay->GetResult('VACT_Date') (YYYYMMDD)                                *
         *  송금자 명 : $inipay->GetResult('VACT_InputName')                                            *
         *  예금주 명 : $inipay->GetResult('VACT_Name')                                            *
         *                            *
         * 7. 핸드폰, 전화 결제 결과 데이터( "실패 내역 자세히 보기"에서 필요 , 상점에서는 필요없는 정보임)             *
         *  전화결제 사업자 코드 : $inipay->GetResult('HPP_GWCode')                                  *
         *                            *
         * 8. 핸드폰 결제 결과 데이터                                        *
         *  휴대폰 번호 : $inipay->GetResult('HPP_Num') (핸드폰 결제에 사용된 휴대폰번호)                *
         *                            *
         * 9. 전화 결제 결과 데이터                                        *
         *  전화번호 : $inipay->GetResult('ARSB_Num') (전화결제에  사용된 전화번호)                  *
         *                            *
         * 10. 문화 상품권 결제 결과 데이터                                      *
         *  컬쳐 랜드 ID : $inipay->GetResult('CULT_UserID')                                      *
         *                            *
         * 11. K-merce 상품권 결제 결과 데이터 (K-merce ID, 틴캐시 아이디 공통사용)                                     *
         *      K-merce ID : $inipay->GetResult('CULT_UserID')                                                                       *
         *                                                                                                              *
         * 12. 모든 결제 수단에 대해 결제 실패시에만 결제 결과 데이터              *
         *  에러코드 : $inipay->GetResult('ResultErrorCode')                                      *
         *                            *
         * 13.현금영수증 발급 결과코드 (은행계좌이체시에만 리턴)              *
         *    $inipay->GetResult('CSHR_ResultCode')                                                                                     *
         *                                                                                                              *
         * 14.틴캐시 잔액 데이터                                              *
         *    $inipay->GetResult('TEEN_Remains')                                                                            *
         *  틴캐시 ID : $inipay->GetResult('CULT_UserID')                          *
         * 15.게임문화 상품권              *
         *  사용 카드 갯수 : $inipay->GetResult('GAMG_Cnt')                                  *
         *                            *
         ****************************************************************************************************************/
        /*******************************************************************
         * 7. DB연동 실패 시 강제취소                                      *
         *                                                                 *
         * 지불 결과를 DB 등에 저장하거나 기타 작업을 수행하다가 실패하는  *
         * 경우, 아래의 코드를 참조하여 이미 지불된 거래를 취소하는 코드를 *
         * 작성합니다.                                                     *
         *******************************************************************/
        /*
        $cancelFlag = "false";
        
        // $cancelFlag를 "ture"로 변경하는 condition 판단은 개별적으로
        // 수행하여 주십시오.
        
        if($cancelFlag == "true")
        {
        	$TID = $inipay->GetResult("TID");
        	$inipay->SetField("type", "cancel"); // 고정
        	$inipay->SetField("tid", $TID); // 고정
        	$inipay->SetField("cancelmsg", "DB FAIL"); // 취소사유
        	$inipay->startAction();
        	if($inipay->GetResult('ResultCode') == "00")
        	{
          $inipay->MakeTXErrMsg(MERCHANT_DB_ERR,"Merchant DB FAIL");
        	}
        }
        */
        //print_r($inipay->GetResult('ResultCode'));
        if ($woocommerce_ver21_less) {
            //			$return_url = add_query_arg( 'key', $order->order_key,
            //			                             add_query_arg( 'order', $order_id,
            //			                                            get_permalink( woocommerce_get_page_id( 'thanks' ) ) ) );
            $return_url = add_query_arg(array('key' => $order->order_key, 'order' => $order_id), get_permalink(woocommerce_get_page_id('thanks')));
        } else {
            $return_url = $this->get_return_url($order);
        }
        if ($inipay->GetResult('ResultCode') == "00") {
            $order->add_order_note(sprintf(__('결제가 성공적으로 처리됨.<br/>결제방법: %s<br/>이니시스 TID: %s. 발생시각: %s.', 'wskl'), $this->method, '111', date('Y-m-d H:i:s')));
            // Complete payment, reduce stock levels & remove cart
            $order->payment_complete();
            $order->reduce_order_stock();
            $woocommerce->cart->empty_cart();
        } else {
            // 결제실패에 따른 상점처리부분
            $res_msg = iconv('euc-kr', 'utf-8', $inipay->GetResult('ResultMsg'));
            $order->update_status('failed', sprintf(__('결제처리 안됨.<br/>-에러메시지 : %s<br/>-발생시각: %s.', 'wskl'), $res_msg, date('Y-m-d H-i-s')));
            //$cart_url = $woocommerce->cart->get_cart_url();
            // wp_redirect($cart_url);
        }
        // inicis_session_vars 제거
        delete_user_meta(get_current_user_id(), wskl_get_option_name('inicis_session_vars'));
        ?>

		<body onload="pay_info.submit();">
		<form name="pay_info" method="post" action="<?php 
        echo $return_url;
        ?>
">
			<input type="hidden" name="order_id" value="<?php 
        echo $order_id;
        ?>
">
			<input type="hidden" name="TID" value="<?php 
        echo $inipay->GetResult('TID');
        ?>
">
			<input type="hidden" name="ResultCode" value="<?php 
        echo $inipay->GetResult('ResultCode');
        ?>
">
			<input type="hidden" name="ResultMsg" value="<?php 
        echo $inipay->GetResult('ResultMsg');
        ?>
">
			<input type="hidden" name="PayMethod" value="<?php 
        echo $inipay->GetResult('PayMethod');
        ?>
">
			<input type="hidden" name="MOID" value="<?php 
        echo $inipay->GetResult('MOID');
        ?>
">
			<input type="hidden" name="TotPrice" value="<?php 
        echo $inipay->GetResult('TotPrice');
        ?>
">
			<input type="hidden" name="MID" value="<?php 
        echo $inipay->GetResult('MID');
        ?>
">

			<!-- 아래는 프로그램에서 값이$inipay에서 값이 넘어오지 않으므로 무시해도 됨-->
			<input type="hidden" name="ResultErrorCode" value="<?php 
        echo $inipay->GetResult('ResultErrorCode');
        ?>
">
			<input type="hidden" name="GoodName" value="<?php 
        echo $inipay->GetResult('GoodName');
        ?>
">
			<input type="hidden" name="BuyerName" value="<?php 
        echo $inipay->GetResult('BuyerName');
        ?>
">
			<input type="hidden" name="BuyerTel" value="<?php 
        echo $inipay->GetResult('BuyerTel');
        ?>
">
			<input type="hidden" name="BuyerEmail" value="<?php 
        echo $inipay->GetResult('BuyerEmail');
        ?>
">
			<input type="hidden" name="HPP_GWCode" value="<?php 
        echo $inipay->GetResult('HPP_GWCode');
        ?>
">

		</form>
		</body>
		<?php 
        ///wp_redirect( $return_url);
        exit;
    }
 /**
  * 특정 테이블 컬럼에 사용자 정의 자료 출력.
  *
  * @param $column
  * @param $post_id
  */
 public static function add_payer_name_column_details($column, $post_id)
 {
     if (self::$bacs_payer_name_in_own_column) {
         if ($column == 'bacs_payer_name') {
             $payer_name = get_post_meta($post_id, wskl_get_option_name('bacs_payer_name'), TRUE);
             echo esc_html($payer_name);
         }
     } else {
         if ($column == 'order_title') {
             $payer_name = get_post_meta($post_id, wskl_get_option_name('bacs_payer_name'), TRUE);
             if (!empty($payer_name)) {
                 echo __('입금자', 'wskl') . ': ' . esc_html($payer_name);
             }
         }
     }
 }
<?php

//print_r (get_option( wskl_get_option_name( 'checkout_methods') ) );
$sym_pg_title = 'Inicis';
$sym_checkout_methods = (array) get_option(wskl_get_option_name('checkout_methods'));
foreach ($sym_checkout_methods as $key => $value) {
    //echo "key=". $key. ":value=". $value. "<br>";
    switch ($value) {
        case 'credit':
            add_action('plugins_loaded', 'init_inicis_credit');
            function init_inicis_credit()
            {
                if (!class_exists('WC_Payment_Gateway')) {
                    return;
                }
                class WC_Inicis_Credit extends WC_Inicis_Common
                {
                    public $method = "credit";
                }
                function add_inicis_credit($methods)
                {
                    $methods[] = 'WC_Inicis_Credit';
                    return $methods;
                }
                add_filter('woocommerce_payment_gateways', 'add_inicis_credit');
            }
            break;
        case 'remit':
            add_action('plugins_loaded', 'init_inicis_remit');
            function init_inicis_remit()
            {
 private static function get_setting_value(array &$assoc, $scenario, $what)
 {
     return wskl_get_from_assoc($assoc, wskl_get_option_name("sms_{$scenario}_{$what}"));
 }