Untitled
unknown
plain_text
2 years ago
33 kB
13
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...