Untitled

 avatar
unknown
plain_text
2 years ago
33 kB
11
Indexable
<?php
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

class Multipass{

	public function __construct() {
	    add_action( 'woocommerce_before_checkout_form', array($this,'add_multipass_section') );
	    add_action('wp_head', array($this,'add_custom_script'));
	    add_action('wp_ajax_multipass_form_submit',array($this,'multipass_form_submit'));
	    add_action('wp_ajax_nopriv_multipass_form_submit',array($this,'multipass_form_submit'));
	    add_action('wp_ajax_multipass_getbudget',array($this,'multipass_getbudget'));
	    add_action('wp_ajax_nopriv_multipass_getbudget',array($this,'multipass_getbudget'));
	    add_action('wp_ajax_multipass_refund',array($this,'multipass_refund_function'));
	    add_action('woocommerce_removed_coupon', array($this,'remove_multipass_coupon'));
	    add_filter('woocommerce_cart_totals_coupon_label', array($this, 'custom_coupon_label'), 10, 2);
	   	add_filter('woocommerce_get_order_item_totals', array($this, 'include_multipass_invoice'), 10, 3 );
	   	add_action('woocommerce_order_item_add_action_buttons', array($this,'add_multipass_refund_button'));
	   	add_action('admin_footer', array($this,'add_admin_script'));
	}

	public function multipass_refund_function(){
		if(isset($_POST['order_id']) && !empty($_POST['order_id']) && isset($_POST['transaction_amount']) && !empty($_POST['transaction_amount'])){
			global $wpdb;
			$order_id = $_POST['order_id'];
			$transaction_amount = $_POST['transaction_amount'];

			$results = $wpdb->get_row("SELECT oi.order_item_name,p.ID as coupon_id,pm.meta_value as card_code FROM ".$wpdb->prefix."woocommerce_order_items AS oi INNER JOIN ".$wpdb->prefix."woocommerce_order_itemmeta AS oim ON oim.order_item_id = oi.order_item_id INNER JOIN ".$wpdb->prefix."posts AS p ON p.post_title = oi.order_item_name LEFT JOIN ".$wpdb->prefix."postmeta as pm ON (pm.post_id = p.ID AND pm.meta_key ='card_code') WHERE oi.order_id = ".$order_id." AND oi.order_item_type = 'coupon' AND oim.meta_key = 'coupon_data' AND oim.meta_value LIKE '%multipass%'");

			if(!empty($results)){
				$coupon_id = $results->coupon_id;
				$CardCode = $results->card_code;
				$transaction_sum = '-'.$transaction_amount;
				$OrganizationID = OrganizationID;
				$OrganizationUserName = OrganizationUserName;
				$OrganizationPassword = OrganizationPassword;
				$PosId = PosId;
				//to add transaction
				$soapUrl = "https://wstestsec1.mltp.co.il/GenericTransactionsService.asmx?op=AddTransaction";
				$xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
						<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
						  <soap:Body>
						    <AddTransaction xmlns="https://wsSec1.mltp.co.il/GenericTransactionsService.asmx">
						      <tranInfo>
						        <OrganizationID>'.$OrganizationID.'</OrganizationID>
						        <OrganizationUserName>'.$OrganizationUserName.'</OrganizationUserName>
						        <OrganizationPassword>'.$OrganizationPassword.'</OrganizationPassword>
						        <CardId>0</CardId>
						            <CardCode>'.$CardCode.'</CardCode>
						        <PosId>'.$PosId.'</PosId>
						        <PinNumber>0</PinNumber>
						        <TranType>S</TranType>
						        <IsMaster>N</IsMaster>
						        <MasterAmount>0</MasterAmount>
						        <TranValue>'.$transaction_sum.'</TranValue>
						        <TranSum>'.$transaction_sum.'</TranSum>
						        <PosTranId>'.uniqid(8).'</PosTranId>
						        <PosDateTime>2018-02-27T16:19:00</PosDateTime>
						      </tranInfo>
						    </AddTransaction>
						  </soap:Body>
						</soap:Envelope>'; 
				$headers = array("Content-type: text/xml;charset=\"utf-8\"",
				                        "Accept: text/xml",
				                        "Cache-Control: no-cache",
				                        "Pragma: no-cache",
				                        "SOAPAction: https://wsSec1.mltp.co.il/GenericTransactionsService.asmx/AddTransaction", 
				                        "Content-length: ".strlen($xml_post_string),
				                    );
				$ch = curl_init();
				$url = $soapUrl;
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
				curl_setopt($ch, CURLOPT_URL, $url);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($ch, CURLOPT_USERPWD, $OrganizationUserName.":".$OrganizationPassword); 
				curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
				curl_setopt($ch, CURLOPT_TIMEOUT, 20);
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); 
				curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
				$response = curl_exec($ch); 
				curl_close($ch); 
				libxml_use_internal_errors(true);
				$response1 = str_replace('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>', '', $response);
				$response2 = str_replace('</soap:Body></soap:Envelope>','',$response1);
				$xml = simplexml_load_string($response2); 
				if(isset($xml->AddTransactionResult->ResultId) && $xml->AddTransactionResult->ResultId->__toString() == 0){
					$transaction_amount = $xml->AddTransactionResult->TransactionSum->__toString(); 
					update_post_meta($coupon_id,'refund_amount',$transaction_amount);
					update_post_meta($coupon_id,'refund','success');
					$msg = array('res' => 'success', 'success' => 'multipass card refund successfully','trans_total'=>$transaction_amount);
				}else{
					update_post_meta($coupon_id,'refund','failed');
					$msg = array('res' => 'error', 'error' => 'multipass card refund failed');
				}

			}else{
				$msg = array('res' => 'error', 'error' => 'multipass card details not found');
			}

			echo json_encode($msg);
			exit();	
		}
	}

	public function add_admin_script(){
		?>
		<script type="text/javascript">
			jQuery(document).ready(function(){
				jQuery('#multipass_refund').on('click',function(e){
					e.preventDefault();
					$(this).text('processing');
				  	$(this).prop('disabled', true);
				  	var total = $(this).data('total');
				  	var transaction_sum = prompt("Please enter the amount you want to refund:",total);
				  	console.log(transaction_sum);
				  	if (transaction_sum != null && transaction_sum.trim() !== '') {
				          var numericAmount = parseFloat(transaction_sum);

				          if (numericAmount > total) {
				            alert("Please enter an amount below ₪"+total);
				            $(this).text('Multipass refund');
				  	        $(this).prop('disabled', false);
				          } else {
				            var confirmation = confirm("Are you sure you want to refund with the amount: ₪" + numericAmount + "?");
				          console.log(numericAmount);
				            if (confirmation) {
				              
				              var admin_ajax = "<?php echo admin_url('admin-ajax.php'); ?>"; 
								var order_id = jQuery('#multipass_refund').data('id');
								$.ajax({
					                url: admin_ajax+'?action=multipass_refund',
					                type: 'POST',
						            data: {order_id : order_id,transaction_amount : numericAmount} ,
						            success: function(response) { 
						            	console.log(response);
							            var res = jQuery.parseJSON(response);
							       		if(res.res == 'success'){
							       		  	alert(res.success);
							       		  	window.location.reload();
							       		}else{
							       		  	alert(res.error);
							       		}
									}
						        });

				            } else {
				              $(this).text('Multipass refund');
				  	          $(this).prop('disabled', false);
				            }
				          }
			        } else {
			          $(this).text('Multipass refund');
				  	  $(this).prop('disabled', false);
			        }

					
				});

			});
				

			
		</script>
		<?php
	}

	public function add_multipass_refund_button($order) {
	    global $wpdb;
	    $order_id = $order->get_id(); 
	    $results = $wpdb->get_row("SELECT SUM(pm1.meta_value) as transaction_total,oi.order_item_name,p.ID as coupon_id,pm.meta_value as refund,pm2.meta_value as refund_amount FROM ".$wpdb->prefix."woocommerce_order_items AS oi INNER JOIN ".$wpdb->prefix."woocommerce_order_itemmeta AS oim ON oim.order_item_id = oi.order_item_id INNER JOIN ".$wpdb->prefix."posts AS p ON p.post_title = oi.order_item_name LEFT JOIN ".$wpdb->prefix."postmeta as pm ON (pm.post_id = p.ID AND pm.meta_key ='refund') LEFT JOIN ".$wpdb->prefix."postmeta as pm1 ON (pm1.post_id = p.ID AND pm1.meta_key='transaction_amount') LEFT JOIN ".$wpdb->prefix."postmeta as pm2 ON (pm2.post_id = p.ID AND pm2.meta_key='refund_amount') WHERE oi.order_id = ".$order_id." AND oi.order_item_type = 'coupon' AND oim.meta_key = 'coupon_data' AND oim.meta_value LIKE '%multipass%'"); 

		if(isset($results->coupon_id) && !empty($results->coupon_id)) {
			$refund = $results->refund;	
			$transaction_total = $results->transaction_total;
			$refund_amount = $results->refund_amount;

			if($refund != "success"){ 
				echo '<button type="button" class="button" id="multipass_refund" data-total="'.$transaction_total.'" data-id="'.$order_id.'">רב-מעבר החזר</button>';
			}else{
				echo '<span style="color:red;float:right">מולטיפאס כבר הוחזר ₪'.$refund_amount.'</span>';
			}
 
		} 

	}

	public function include_multipass_invoice($total_rows, $this_obj, $tax_display){
		global $wpdb;
		$order_id = $this_obj->get_id();
		
		//echo "<pre>";print_r("SELECT COUNT(*) AS cnt FROM ".$wpdb->prefix."woocommerce_order_items AS oi INNER JOIN ".$wpdb->prefix."woocommerce_order_itemmeta AS oim ON oim.order_item_id = oi.order_item_id WHERE oi.order_id = ".$order_id." AND oi.order_item_type = 'coupon' AND oim.meta_key = 'coupon_data' AND oim.meta_value LIKE '%multipass%'");exit();

		$num_rows = $wpdb->get_row("SELECT COUNT(*) AS cnt FROM ".$wpdb->prefix."woocommerce_order_items AS oi INNER JOIN ".$wpdb->prefix."woocommerce_order_itemmeta AS oim ON oim.order_item_id = oi.order_item_id WHERE oi.order_id = ".$order_id." AND oi.order_item_type = 'coupon' AND oim.meta_key = 'coupon_data' AND oim.meta_value LIKE '%multipass%'")->cnt;

		if($num_rows>0){
			$results = $wpdb->get_results("SELECT oi.order_item_name,p.ID,pm.meta_value as card_code,pm1.meta_value as transaction_amount FROM ".$wpdb->prefix."woocommerce_order_items AS oi INNER JOIN ".$wpdb->prefix."woocommerce_order_itemmeta AS oim ON oim.order_item_id = oi.order_item_id INNER JOIN ".$wpdb->prefix."posts AS p ON p.post_title = oi.order_item_name LEFT JOIN ".$wpdb->prefix."postmeta as pm ON (pm.post_id = p.ID AND pm.meta_key ='card_code') LEFT JOIN ".$wpdb->prefix."postmeta as pm1 ON (pm1.post_id = p.ID AND pm1.meta_key='transaction_amount') WHERE oi.order_id = ".$order_id." AND oi.order_item_type = 'coupon' AND oim.meta_key = 'coupon_data' AND oim.meta_value LIKE '%multipass%'");
			$multipass_label = "";
			$multipass_value = "";
			if(!empty($results)){
				foreach ($results as $key => $result) {
					$card_code = $result->card_code;
					$transaction_amount = $result->transaction_amount;
					$multipass_label .= 'Multipass : xxxxxx'.substr($card_code,strlen($card_code)-4,strlen($card_code)).'<br>';
				    $multipass_value .= '<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">₪</span>'.$transaction_amount.'</span><br>';
				}
			}
			//$total_rows['discount']['label'] = $total_rows['discount']['label'].'<br>'.'Multipass';
			$total_rows['discount']['label'] = $total_rows['discount']['label'] .'<br>'.$multipass_label;
			$total_rows['discount']['value'] = $multipass_value;
		}

		return $total_rows;
	}

	public function remove_multipass_coupon($coupon_code){ 
		if(str_contains($coupon_code, 'multipass')){
			$coupon_post = get_page_by_title($coupon_code, OBJECT, 'shop_coupon'); 
			if ($coupon_post) {
			    $coupon_id = $coupon_post->ID;
			  	$soapUrl = "https://wstestsec1.mltp.co.il/GenericTransactionsService.asmx?op=DeleteTransaction";
			  	$OrganizationID = OrganizationID;
				$OrganizationUserName = OrganizationUserName;
				$OrganizationPassword = OrganizationPassword;
				$PosId = PosId;
				$transaction_id = get_post_meta($coupon_id,'MltpTransactionId',true);
			  	$xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
				<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
				  <soap:Body>
				    <DeleteTransaction xmlns="https://wsSec1.mltp.co.il/GenericTransactionsService.asmx">
				      <tranInfo>
				        <OrganizationID>'.$OrganizationID.'</OrganizationID>
				        <OrganizationUserName>'.$OrganizationUserName.'</OrganizationUserName>
				        <OrganizationPassword>'.$OrganizationPassword.'</OrganizationPassword>
				        <PosId>'.$PosId.'</PosId>
				        <TransactionId>'.$transaction_id.'</TransactionId>
				      </tranInfo>
				    </DeleteTransaction>
				  </soap:Body>
				</soap:Envelope>'; 
				$headers = array("Content-type: text/xml;charset=\"utf-8\"",
			                        "Accept: text/xml",
			                        "Cache-Control: no-cache",
			                        "Pragma: no-cache",
			                        "SOAPAction: https://wsSec1.mltp.co.il/GenericTransactionsService.asmx/DeleteTransaction", 
			                        "Content-length: ".strlen($xml_post_string),
			                    ); 
				$ch = curl_init();
				$url = $soapUrl;
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
				curl_setopt($ch, CURLOPT_URL, $url);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($ch, CURLOPT_USERPWD, $OrganizationUserName.":".$OrganizationPassword); 
				curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
				curl_setopt($ch, CURLOPT_TIMEOUT, 20);
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); 
				curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
				$response = curl_exec($ch); 
				curl_close($ch); 
				libxml_use_internal_errors(true);
				$response1 = str_replace('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>', '', $response);
				$response2 = str_replace('</soap:Body></soap:Envelope>','',$response1);
				$xml = simplexml_load_string($response2); 
				if(isset($xml->DeleteTransactionResult->ResultId) && $xml->DeleteTransactionResult->ResultId->__toString() == 0){
					update_post_meta($coupon_id,'delete_transaction_response',$response);
				}
			}
		}
	}

	public function custom_coupon_label($label, $coupon) {

		if(isset($coupon->code) && !empty($coupon->code)){
			if(str_contains($coupon->code, 'multipass')){
				$label = 'Multipass coupon : ';
			}
		}
		return $label;
	}

	public function add_multipass_section(){
		global $woocommerce;
		$cart_total = $woocommerce->cart->get_totals();

		echo '
		<style>
		
		.modal .modal-dialog {
				max-width:30%;
			}

		

		#multipass_getbudget {
			width:50%
		}

		@media screen and (max-width: 600px) {
			.modal .modal-dialog {
				max-width:88%;
			}

			#multipass_getbudget {
				width:100%
			}

			.woocommerce form#multipass_getbudget .form-row-first {
				width: 100%;
			}

			.woocommerce form#multipass_getbudget .form-row-last, .woocommerce-page form .form-row-last {
				float: none;
				display: block;
			}

			.g-recaptcha {
				height: 135px;
			}
		}

		
		
		</style>
		<form id="multipass_getbudget" method="post">

			<p>אם יש לך קופון מולטיפאס הוסף כאן.</p>

			<p class="form-row form-row-first">
				<label for="CardCode" class="screen-reader-text">CardCode</label>
					<input type="text" name="CardCode" class="input-text form-control" placeholder="קוד כרטיס" id="CardCode" value="">
			</p>

			<script src="https://www.google.com/recaptcha/api.js"></script>
			<div class="g-recaptcha" data-sitekey="6LcUbnMmAAAAAEHvoDfKvjIhSR7GTvh2G_he1Q8B" style="margin-bottom: 10px; display: none;"></div>

			<p class="form-row form-row-last">
				<button type="submit" id="getbudget" class="button wp-element-button" name="getbudget" value="שליחה" style="color:#fff">להשיג איזון</button>
			</p>

			<div class="clear"></div>
		</form>';

		echo '<div class="modal" id="multipass_modal" tabindex="-1" role="dialog" style="display: none;">
    <div class="modal-dialog " role="document">
        <div class="modal-content ">
            <div class="modal-header">
                <button type="button" class="close js-modal-close" id="modal-close" data-dismiss="modal" aria-label="Close" style="height: 45px;">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            <div class="modal-body" style="margin:10px 20px">

				<p id="multipass_error" style="font-size:20px;color:red;text-align:center;display:none"></p>
				<p id="multipass_success" style="font-size:20px;color:green;text-align:center;display:none"></p>

                <form class="multipass_form" method="post" style="">

					<p class="form-row multipass_balance_text" style="font-size:20px">יתרת הכרטיס שלך היא <span class="woocommerce-Price-currencySymbol">₪</span><span class="multipass_balance"></span></p>
					<p class="form-row" >אנא הזן את סכום העסקה כדי להמשיך</p>
					<input type="hidden" class="balance" name="multipass_balance" value="">
					<p class="form-row">

						<label for="Amount" class="screen-reader-text">Amount</label>
						<input type="number" name="transaction_sum" class="input-text form-control" placeholder="סכום העסקה
	" id="transaction_sum" value="'.$cart_total['total'].'" style="min-width: 350px" min="1" max="'.$cart_total['total'].'">
					</p>

					<p class="form-row">
						<button type="submit" id="multipass_form_submit" class="button wp-element-button" name="multipass_form_submit" value="הוסף עסקה">הוסף עסקה</button>
					</p>

					<div class="clear"></div>
				</form>
            </div>
        </div>
    </div>
</div>';
	}

	public function multipass_getbudget(){ 
		global $woocommerce;

		if(isset($_POST['is_recaptcha_validate']) && !empty($_POST['is_recaptcha_validate']) && ($_POST['is_recaptcha_validate']>=10)) {
			$secretKey = "6LcUbnMmAAAAANdRrJRCnmWtY6x6v7d5SthxC5b3";
			$responseKey = $_POST['g-recaptcha-response'];
			$userIP = $_SERVER['REMOTE_ADDR'];

			$verifyURL = "https://www.google.com/recaptcha/api/siteverify";
			$verifyData = array(
			'secret' => $secretKey,
			'response' => $responseKey,
			'remoteip' => $userIP
			);

			$ch = curl_init($verifyURL);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($ch, CURLOPT_POST, true);
			curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($verifyData));
			$response = curl_exec($ch);
			curl_close($ch);

			$responseData = json_decode($response);
			if ($responseData->success) {
			// reCAPTCHA verification successful, perform your actions here
			//echo "reCAPTCHA verification successful!";
			} else {
			// reCAPTCHA verification failed, handle the error accordingly
			//echo "reCAPTCHA verification failed!";
				$msg = array('res' => 'error', 'error' => 'reCAPTCHA verification failed!');
				echo json_encode($msg);
				exit();	
			}
		}




		if(isset($_POST['CardCode']) && !empty($_POST['CardCode'])){
			$CardCode = $_POST['CardCode'];
			$applied_coupons = WC()->cart->get_applied_coupons(); 
			$card_codes = array();
			if(!empty($applied_coupons)){
				foreach ($applied_coupons as $key => $coupon_code) {
					if(str_contains($coupon_code, 'multipass')){
						$coupon_post = get_page_by_title($coupon_code, OBJECT, 'shop_coupon'); 
						if ($coupon_post) {
						    $coupon_id = $coupon_post->ID;
						    $card_codes[] = get_post_meta($coupon_id,'card_code',true);
						}
					}
				}
			}

			if(!in_array($CardCode, $card_codes)){
				$OrganizationID = OrganizationID;
				$OrganizationUserName = OrganizationUserName;
				$OrganizationPassword = OrganizationPassword;
				$PosId = PosId;
				
				//to get balance 
				$soapUrl = "https://wstestsec1.mltp.co.il/GenericTransactionsService.asmx?op=GetBudget";
			    $xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
	<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	  <soap:Body>
	    <GetBudget xmlns="https://wsSec1.mltp.co.il/GenericTransactionsService.asmx">
	      <tranInfo>
	        <OrganizationID>'.$OrganizationID.'</OrganizationID>
	        <OrganizationUserName>'.$OrganizationUserName.'</OrganizationUserName>
	        <OrganizationPassword>'.$OrganizationPassword.'</OrganizationPassword>
	        <CardId>0</CardId>
	            <CardCode>'.$CardCode.'</CardCode>
	        <PosId>'.$PosId.'</PosId>
	      </tranInfo>
	    </GetBudget>
	  </soap:Body>
	</soap:Envelope>'; 
				$headers = array("Content-type: text/xml;charset=\"utf-8\"",
			                        "Accept: text/xml",
			                        "Cache-Control: no-cache",
			                        "Pragma: no-cache",
			                        "SOAPAction: https://wsSec1.mltp.co.il/GenericTransactionsService.asmx/GetBudget", 
			                        "Content-length: ".strlen($xml_post_string),
			                    );
				$ch = curl_init();
				$url = $soapUrl;
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
				curl_setopt($ch, CURLOPT_URL, $url);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($ch, CURLOPT_USERPWD, $OrganizationUserName.":".$OrganizationPassword); 
				curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
				curl_setopt($ch, CURLOPT_TIMEOUT, 20);
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); 
				curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
				$response = curl_exec($ch); 
				curl_close($ch); 
				libxml_use_internal_errors(true);
				$response1 = str_replace('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>', '', $response);
				$response2 = str_replace('</soap:Body></soap:Envelope>','',$response1);
				$xml = simplexml_load_string($response2);
				if(isset($xml->GetBudgetResult->ResultId) && $xml->GetBudgetResult->ResultId->__toString() == 0){ 
					$balance = $xml->GetBudgetResult->UpdatedBugdet->__toString(); 
					WC()->session->set('card_code', $CardCode);
					$msg = array('res' => 'success','success' => 'success','formatted_balance' => number_format($balance), 'balance' => $balance);
				}else{
					$msg = array('res' => 'error', 'error' => 'You have entered invalid card details!');
				}
			}else{
				$msg = array('res' => 'error', 'error' => 'Card details already exist!');
			}
			
		}else{
			$msg = array('res' => 'error', 'error' => 'Please enter card code');
		}
		echo json_encode($msg);
		exit();	
	}

	public function multipass_form_submit(){ 
		global $woocommerce;
		if(isset($_POST['transaction_sum']) && !empty($_POST['transaction_sum'])){

			$CardCode = WC()->session->get('card_code');
			$balance = $_POST['multipass_balance'];
			$transaction_sum = $_POST['transaction_sum']; 
			$OrganizationID = OrganizationID;
			$OrganizationUserName = OrganizationUserName;
			$OrganizationPassword = OrganizationPassword;
			$PosId = PosId;
			if($balance >= $transaction_sum ){
					//to add transaction
				$soapUrl = "https://wstestsec1.mltp.co.il/GenericTransactionsService.asmx?op=AddTransaction";
				$xml_post_string = '<?xml version="1.0" encoding="utf-8"?>
		<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
		  <soap:Body>
		    <AddTransaction xmlns="https://wsSec1.mltp.co.il/GenericTransactionsService.asmx">
		      <tranInfo>
		        <OrganizationID>'.$OrganizationID.'</OrganizationID>
		        <OrganizationUserName>'.$OrganizationUserName.'</OrganizationUserName>
		        <OrganizationPassword>'.$OrganizationPassword.'</OrganizationPassword>
		        <CardId>0</CardId>
		            <CardCode>'.$CardCode.'</CardCode>
		        <PosId>'.$PosId.'</PosId>
		        <PinNumber>0</PinNumber>
		        <TranType>S</TranType>
		        <IsMaster>N</IsMaster>
		        <MasterAmount>0</MasterAmount>
		        <TranValue>'.$transaction_sum.'</TranValue>
		        <TranSum>'.$transaction_sum.'</TranSum>
		        <PosTranId>'.uniqid(8).'</PosTranId>
		        <PosDateTime>2018-02-27T16:19:00</PosDateTime>
		      </tranInfo>
		    </AddTransaction>
		  </soap:Body>
		</soap:Envelope>'; 
					$headers = array("Content-type: text/xml;charset=\"utf-8\"",
				                        "Accept: text/xml",
				                        "Cache-Control: no-cache",
				                        "Pragma: no-cache",
				                        "SOAPAction: https://wsSec1.mltp.co.il/GenericTransactionsService.asmx/AddTransaction", 
				                        "Content-length: ".strlen($xml_post_string),
				                    );
					$ch = curl_init();
					$url = $soapUrl;
					$ch = curl_init();
					curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
					curl_setopt($ch, CURLOPT_URL, $url);
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					curl_setopt($ch, CURLOPT_USERPWD, $OrganizationUserName.":".$OrganizationPassword); 
					curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
					curl_setopt($ch, CURLOPT_TIMEOUT, 20);
					curl_setopt($ch, CURLOPT_POST, true);
					curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); 
					curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
					$response = curl_exec($ch); 
					curl_close($ch); 
					libxml_use_internal_errors(true);
					$response1 = str_replace('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>', '', $response);
					$response2 = str_replace('</soap:Body></soap:Envelope>','',$response1);
					$xml = simplexml_load_string($response2); 
					if(isset($xml->AddTransactionResult->ResultId) && $xml->AddTransactionResult->ResultId->__toString() == 0){
						$transaction_amount = $xml->AddTransactionResult->TransactionSum->__toString(); 
						$coupon_code = 'Multipass-' . uniqid(); // Generate a unique coupon code
				        $coupon = new WC_Coupon($coupon_code);
				        $coupon->set_amount($transaction_amount);
				        $coupon->set_discount_type('fixed_cart');
				        $coupon->save();
				        $coupon_id = $coupon->get_id();
				        $transaction_id = $xml->AddTransactionResult->MltpTransactionId->__toString();
				        update_post_meta($coupon_id,'card_id',$CardId);
				        update_post_meta($coupon_id,'card_code',$CardCode);
				        update_post_meta($coupon_id,'transaction_amount',$transaction_amount);
				        update_post_meta($coupon_id,'MltpTransactionId',$transaction_id);
				        update_post_meta($coupon_id,'add_transaction_response',$response);
				        WC()->session->__unset('card_code');
				        WC()->cart->apply_coupon($coupon_code);
					    $msg = array('res' => 'success','success' => 'Transaction successfully completed');
					}else{
						$msg = array('res' => 'error', 'error' => 'Something wrong');
					}
				}else{
					$msg = array('res' => 'error', 'error' => 'Insufficient balance');
				}
		}else{
			$msg = array('res' => 'error', 'error' => 'Please enter transaction amount');
		}
		echo json_encode($msg);
		exit();
	}

	public function add_custom_script(){
		?>
		<script type="text/javascript">
			jQuery(document).ready(function($) {
			   
			   $('#multipass_modal').hide();

			  function showPopup() {
			    $('#multipass_modal').show();
			  }

			  function hidePopup() {
			    $('#multipass_modal').hide();
			  }


			  $('#multipass_modal #modal-close').on('click', function(e) {
			    e.preventDefault(); 
			    $('.multipass_form')[0].reset();
			    $('#CardCode').val('');
			    $('#getbudget').text('להשיג איזון');
			    $('#getbudget').prop('disabled', false);
			    hidePopup(); 
			  });

			  var is_recaptcha_validate = 0;

			  $('#multipass_getbudget').submit(function(e){ 
				  	e.preventDefault();
				  	var admin_ajax = "<?php echo admin_url('admin-ajax.php'); ?>"; 
				  	var formData = $( this ).serialize();
				  	$('#getbudget').text('processing');
				  	$('#getbudget').prop('disabled', true);
	    			$.ajax({
		               url: admin_ajax+'?action=multipass_getbudget',
		               type: 'POST',
			            data: formData+'&is_recaptcha_validate='+is_recaptcha_validate,
			            success: function(response) { 
			             console.log(response);
			              var res = jQuery.parseJSON(response);
			       		  if(res.res == 'success'){
			       		  	$('.multipass_balance').text(res.formatted_balance);
			       		  	$('.multipass_balance_text').show();
			       		  	$('.balance').val(res.balance);
			       		  	$('.multipass_form').show();
			       		  	$('#multipass_error').hide();
			       		  	showPopup();
			       		  }else{
			       		  	$('.multipass_balance_text').hide();
			       		  	$('#multipass_success').hide();
			       			$('#multipass_error').text(res.error);
			       			$('#multipass_error').show();
			       		  	$('.multipass_form').hide();
			       		  	showPopup();
			       		  }
			       		  grecaptcha.reset();
						}
			        });
			        is_recaptcha_validate++;

			        if(is_recaptcha_validate>=10){
			        	jQuery('.g-recaptcha').show();
			        }
			    });

			    $('.multipass_form').submit(function(e){
				  	e.preventDefault();
				  	var admin_ajax = "<?php echo admin_url('admin-ajax.php'); ?>"; 
				  	var formData = $( this ).serialize();
				  	$('#multipass_form_submit').text('processing');
				  	$('#multipass_form_submit').prop('disabled', true);
	    			$.ajax({
		               url: admin_ajax+'?action=multipass_form_submit',
		               type: 'POST',
			            data: formData,
			            success: function(response) { 
			            	var res = jQuery.parseJSON(response);
			            	$('#multipass_form_submit').text('הוסף עסקה');
				  			$('#multipass_form_submit').prop('disabled', true);
			       			if(res.res == 'success'){
			       				$('#multipass_error').hide();
			       				$('#multipass_success').text('הַצלָחָה');
			       				$('#multipass_success').show('הַצלָחָה');
			       				window.location.reload();
			       				
			       			}else if(res.res == 'error'){
			       				$('#multipass_success').hide();
			       				$('#multipass_error').text(res.error);
			       				$('#multipass_error').show();
			       			}
						}
			        });
			    });
			});
		</script>

		<script src="https://www.google.com/recaptcha/enterprise.js?render=6LfynHEmAAAAAECENxtISty7UNjGmQVR3tI9hfv3"></script>

		<script>
		  function onClick(e) {
		    e.preventDefault();
		    grecaptcha.enterprise.ready(async () => {
		      const token = await grecaptcha.enterprise.execute('6LfynHEmAAAAAECENxtISty7UNjGmQVR3tI9hfv3', {action: 'LOGIN'});
		      // IMPORTANT: The 'token' that results from execute is an encrypted response sent by
		      // reCAPTCHA Enterprise to the end user's browser.
		      // This token must be validated by creating an assessment.
		      // See https://cloud.google.com/recaptcha-enterprise/docs/create-assessment
		    });
		  }
		</script>
		<?php
	}
}

$Multipass_obj = new Multipass();
Editor is loading...