function trav_ajax_acc_submit_booking() { global $wpdb, $trav_options; // validation $result_json = array('success' => 0, 'result' => ''); if (!isset($_POST['transaction_id']) || !isset($_SESSION['booking_data'][$_POST['transaction_id']])) { $result_json['success'] = 0; $result_json['result'] = __('Sorry, some error occurred on input data validation.', 'trav'); wp_send_json($result_json); } $raw_booking_data = $_SESSION['booking_data'][$_POST['transaction_id']]; $booking_fields = array('accommodation_id', 'room_type_id', 'rooms', 'adults', 'kids', 'child_ages', 'total_price', 'room_price', 'tax', 'currency_code', 'exchange_rate', 'deposit_price', 'date_from', 'date_to', 'created', 'booking_no', 'pin_code', 'status'); $booking_data = array(); foreach ($booking_fields as $booking_field) { if (!empty($raw_booking_data[$booking_field])) { $booking_data[$booking_field] = $raw_booking_data[$booking_field]; } } $is_payment_enabled = trav_is_payment_enabled() && !empty($booking_data['deposit_price']); if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'post-' . $booking_data['room_type_id'])) { $result_json['success'] = 0; $result_json['result'] = __('Sorry, your nonce did not verify.', 'trav'); wp_send_json($result_json); } if (isset($trav_options['vld_captcha']) && !empty($trav_options['vld_captcha'])) { if (!isset($_POST['security_code']) || $_POST['security_code'] != $_SESSION['security_code']) { $result_json['success'] = 0; $result_json['result'] = __('Captcha error. Please check your security code again.', 'trav'); wp_send_json($result_json); } } if (isset($trav_options['vld_credit_card']) && !empty($trav_options['vld_credit_card'])) { if (!isset($_POST['cc_type']) || !isset($_POST['cc_holder_name']) || !isset($_POST['cc_number']) || !isset($_POST['cc_exp_month']) || !isset($_POST['cc_exp_year']) || !trav_cc_validation($_POST['cc_type'], $_POST['cc_holder_name'], $_POST['cc_number'], $_POST['cc_exp_month'], $_POST['cc_exp_year'])) { $result_json['success'] = 0; $result_json['result'] = __('Vcc validation An error.', 'trav'); wp_send_json($result_json); } } // init variables $post_fields = array('first_name', 'last_name', 'email', 'country_code', 'phone', 'address', 'city', 'zip', 'country', 'special_requirements'); $customer_info = array(); foreach ($post_fields as $post_field) { if (!empty($_POST[$post_field])) { $customer_info[$post_field] = sanitize_text_field($_POST[$post_field]); } } $data = array_merge($customer_info, $booking_data); $data['child_ages'] = serialize($data['child_ages']); $data['date_from'] = date('Y-m-d', trav_strtotime($data['date_from'])); $data['date_to'] = date('Y-m-d', trav_strtotime($data['date_to'])); if (is_user_logged_in()) { $data['user_id'] = get_current_user_id(); } $latest_booking_id = $wpdb->get_var('SELECT id FROM ' . TRAV_ACCOMMODATION_BOOKINGS_TABLE . ' ORDER BY id DESC LIMIT 1'); $booking_no = mt_rand(1000, 9999); $booking_no .= $latest_booking_id; $pin_code = mt_rand(1000, 9999); if (!isset($_SESSION['exchange_rate'])) { trav_init_currency(); } $default_booking_data = array('first_name' => '', 'last_name' => '', 'email' => '', 'country_code' => '', 'phone' => '', 'address' => '', 'city' => '', 'zip' => '', 'country' => '', 'special_requirements' => '', 'accommodation_id' => '', 'room_type_id' => '', 'rooms' => '', 'adults' => '', 'kids' => '', 'child_ages' => '', 'total_price' => '', 'room_price' => '', 'tax' => '', 'currency_code' => 'usd', 'exchange_rate' => 1, 'deposit_price' => 0, 'deposit_paid' => $is_payment_enabled ? 0 : 1, 'date_from' => '', 'date_to' => '', 'created' => date('Y-m-d H:i:s'), 'booking_no' => $booking_no, 'pin_code' => $pin_code, 'status' => 1); $data = array_replace($default_booking_data, $data); // credit card offline charge if (!empty($trav_options['vld_credit_card']) && !empty($trav_options['cc_off_charge'])) { $cc_fields = array('cc_type', 'cc_holder_name', 'cc_number', 'cc_cid', 'cc_exp_year', 'cc_exp_month'); $cc_infos = array(); foreach ($cc_fields as $cc_field) { $cc_infos[$cc_field] = empty($_POST[$cc_field]) ? '' : $_POST[$cc_field]; } $data['other'] = serialize($cc_infos); } // recheck availability $room_price_data = trav_acc_get_room_price_data($data['accommodation_id'], $data['room_type_id'], $booking_data['date_from'], $booking_data['date_to'], $data['rooms'], $data['adults'], $data['kids'], $data['child_ages']); if (!$room_price_data || !is_array($room_price_data)) { $result_json['success'] = -1; $result_json['result'] = __('Sorry, The room you are booking now is just taken by another customer. Please have another look.', 'trav'); wp_send_json($result_json); } do_action('trav_acc_add_booking_before', $data); // save default language accommodation and room type $data['accommodation_id'] = trav_acc_org_id($data['accommodation_id']); $data['room_type_id'] = trav_room_org_id($data['room_type_id']); // add to db if ($wpdb->insert(TRAV_ACCOMMODATION_BOOKINGS_TABLE, $data)) { $booking_id = $wpdb->insert_id; $data['booking_id'] = $booking_id; $_SESSION['booking_data'][$_POST['transaction_id']] = $data; $result_json['success'] = 1; $result_json['result']['booking_no'] = $booking_no; $result_json['result']['pin_code'] = $pin_code; $result_json['result']['transaction_id'] = $_POST['transaction_id']; if ($is_payment_enabled) { if (trav_is_woo_enabled()) { // woocommerce do_action('trav_woo_add_acc_booking', $data); $result_json['result']['payment'] = 'woocommerce'; } elseif (trav_is_paypal_enabled()) { // paypal direct $result_json['result']['payment'] = 'paypal'; } } else { $result_json['result']['payment'] = 'no'; } do_action('trav_acc_add_booking_after', $data); } else { $result_json['success'] = 0; $result_json['result'] = __('Sorry, An error occurred while add booking.', 'trav'); } wp_send_json($result_json); }
function trav_pp_is_payment_enabled($status) { return $status || trav_is_paypal_enabled(); }
function trav_booking_button_text($button_text = '') { global $is_payment_enabled; if ($is_payment_enabled) { if (trav_is_woo_enabled()) { $button_text = __('SUBMIT BOOKING', 'trav'); } elseif (trav_is_paypal_enabled()) { $button_text = __('CONFIRM AND DEPOSIT VIA PAYPAL', 'trav'); } } else { $button_text = __('CONFIRM BOOKING', 'trav'); } return $button_text; }
function trav_process_payment($payment_data) { // $payment_data = array('item_name', 'item_number', 'item_desc', 'item_qty', 'item_price', 'item_total_price', 'grand_total', 'status', 'return_url', 'cancel_url', 'deposit_rate') global $trav_options, $logo_url; $success = 0; if (trav_is_paypal_enabled()) { // validation if (empty($trav_options['acc_pay_paypal_api_username']) || empty($trav_options['acc_pay_paypal_api_password']) || empty($trav_options['acc_pay_paypal_api_signature'])) { echo '<div class="alert alert-error">Please check site paypal setting. <a href="' . admin_url('themes.php?page=Travelo') . '">' . admin_url('themes.php?page=Travelo') . '</a><span class="close"></span></div>'; exit; } $PayPalApiUsername = $trav_options['acc_pay_paypal_api_username']; $PayPalApiPassword = $trav_options['acc_pay_paypal_api_password']; $PayPalApiSignature = $trav_options['acc_pay_paypal_api_signature']; $PayPalMode = empty($trav_options['acc_pay_paypal_sandbox']) ? 'live' : 'sandbox'; // SetExpressCheckOut if ($payment_data['status'] == 'before') { $padata = '&METHOD=SetExpressCheckout' . '&RETURNURL=' . urlencode($payment_data['return_url']) . '&CANCELURL=' . urlencode($payment_data['cancel_url']) . '&PAYMENTREQUEST_0_PAYMENTACTION=' . urlencode("SALE") . '&L_PAYMENTREQUEST_0_NAME0=' . urlencode($payment_data['item_name']) . '&L_PAYMENTREQUEST_0_NUMBER0=' . urlencode($payment_data['item_number']) . '&L_PAYMENTREQUEST_0_DESC0=' . urlencode($payment_data['item_desc']) . '&L_PAYMENTREQUEST_0_AMT0=' . urlencode($payment_data['item_price']) . '&L_PAYMENTREQUEST_0_QTY0=' . urlencode($payment_data['item_qty']) . '&NOSHIPPING=1' . '&SOLUTIONTYPE=Sole' . '&PAYMENTREQUEST_0_ITEMAMT=' . urlencode($payment_data['item_total_price']) . '&PAYMENTREQUEST_0_AMT=' . urlencode($payment_data['grand_total']) . '&PAYMENTREQUEST_0_CURRENCYCODE=' . urlencode($payment_data['currency']) . '&LOCALECODE=US' . '&LOGOIMG=' . $logo_url . '&CARTBORDERCOLOR=FFFFFF' . '&ALLOWNOTE=1'; //We need to execute the "SetExpressCheckOut" method to obtain paypal token $paypal = new Trav_PayPal(); $httpParsedResponseAr = $paypal->PPHttpPost('SetExpressCheckout', $padata, $PayPalApiUsername, $PayPalApiPassword, $PayPalApiSignature, $PayPalMode); //Respond according to message we receive from Paypal if ("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) { //Redirect user to PayPal store with Token received. $paypalmode = $PayPalMode == 'sandbox' ? '.sandbox' : ''; $paypalurl = 'https://www' . $paypalmode . '.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=' . $httpParsedResponseAr["TOKEN"] . ''; header('Location: ' . $paypalurl); exit; } else { //Show error message echo '<div class="alert alert-error"><b>Error : </b>' . urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]) . '<span class="close"></span></div>'; echo '<pre>'; print_r($httpParsedResponseAr); echo '</pre>'; exit; } } // DoExpressCheckOut if (isset($_GET["token"]) && isset($_GET["PayerID"])) { $token = $_GET["token"]; $payer_id = $_GET["PayerID"]; $padata = '&TOKEN=' . urlencode($token) . '&PAYERID=' . urlencode($payer_id) . '&PAYMENTREQUEST_0_PAYMENTACTION=' . urlencode("SALE") . '&L_PAYMENTREQUEST_0_NAME0=' . urlencode($payment_data['item_name']) . '&L_PAYMENTREQUEST_0_NUMBER0=' . urlencode($payment_data['item_number']) . '&L_PAYMENTREQUEST_0_DESC0=' . urlencode($payment_data['item_desc']) . '&L_PAYMENTREQUEST_0_AMT0=' . urlencode($payment_data['item_price']) . '&L_PAYMENTREQUEST_0_QTY0=' . urlencode($payment_data['item_qty']) . '&PAYMENTREQUEST_0_ITEMAMT=' . urlencode($payment_data['item_total_price']) . '&PAYMENTREQUEST_0_AMT=' . urlencode($payment_data['grand_total']) . '&PAYMENTREQUEST_0_CURRENCYCODE=' . urlencode($payment_data['currency']); //execute the "DoExpressCheckoutPayment" at this point to Receive payment from user. $paypal = new Trav_PayPal(); $httpParsedResponseAr = $paypal->PPHttpPost('DoExpressCheckoutPayment', $padata, $PayPalApiUsername, $PayPalApiPassword, $PayPalApiSignature, $PayPalMode); //Check if everything went ok.. if ("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) { if ($payment_data['deposit_rate'] < 100) { echo '<div class="alert alert-success">' . __('Security Deposit Payment Received Successfully! Your Transaction ID : ', 'trav') . urldecode($httpParsedResponseAr["PAYMENTINFO_0_TRANSACTIONID"]) . '<span class="close"></span></div>'; } else { echo '<div class="alert alert-success">' . __('Payment Received Successfully! Your Transaction ID : ', 'trav') . urldecode($httpParsedResponseAr["PAYMENTINFO_0_TRANSACTIONID"]) . '<span class="close"></span></div>'; } $transation_id = urldecode($httpParsedResponseAr["PAYMENTINFO_0_TRANSACTIONID"]); // GetTransactionDetails requires a Transaction ID, and GetExpressCheckoutDetails requires Token returned by SetExpressCheckOut $padata = '&TOKEN=' . urlencode($token); $paypal = new Trav_PayPal(); $httpParsedResponseAr = $paypal->PPHttpPost('GetExpressCheckoutDetails', $padata, $PayPalApiUsername, $PayPalApiPassword, $PayPalApiSignature, $PayPalMode); if ("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])) { $success = 1; return array('success' => 1, 'method' => 'paypal', 'transaction_id' => $transation_id); } else { echo '<div class="alert alert-error"><b>GetTransactionDetails failed:</b>' . urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]) . '<span class="close"></span></div>'; echo '<pre>'; print_r($httpParsedResponseAr); echo '</pre>'; exit; } } else { echo '<div class="alert alert-error"><b>Error : </b>' . urldecode($httpParsedResponseAr["L_LONGMESSAGE0"]) . '<span class="close"></span></div>'; echo '<pre>'; print_r($httpParsedResponseAr); echo '</pre>'; exit; } } } return false; }