/**
  * Save custom Order informations
  */
 function save_order_custom_informations()
 {
     global $wpdb;
     // Check if it is an order save action
     if (!empty($_REQUEST['post_ID']) && get_post_type($_REQUEST['post_ID']) == WPSHOP_NEWTYPE_IDENTIFIER_ORDER) {
         //Define Customer ID
         $user_id = !empty($_REQUEST['wps_customer_id']) ? $_REQUEST['wps_customer_id'] : get_current_user_id();
         // Order MetaData
         $order_meta = get_post_meta(intval($_REQUEST['post_ID']), '_order_postmeta', true);
         // Save General information of order's attached customer
         $wpdb->update($wpdb->posts, array('post_parent' => $user_id, 'post_status' => 'publish'), array('ID' => $_REQUEST['post_ID']));
         update_post_meta($_REQUEST['post_ID'], '_wpshop_order_customer_id', $user_id);
         $order_meta['customer_id'] = $user_id;
         if (empty($order_meta['order_key'])) {
             $order_meta['order_key'] = !empty($order_meta['order_key']) ? $order_meta['order_key'] : (!empty($order_meta['order_status']) && $order_meta['order_status'] != 'awaiting_payment' ? wpshop_orders::get_new_order_reference() : '');
             $order_meta['order_temporary_key'] = isset($order_meta['order_temporary_key']) && $order_meta['order_temporary_key'] != '' ? $order_meta['order_temporary_key'] : wpshop_orders::get_new_pre_order_reference();
         }
         $order_meta['order_status'] = isset($order_meta['order_status']) && $order_meta['order_status'] != '' ? $order_meta['order_status'] : 'awaiting_payment';
         $order_meta['order_date'] = isset($order_meta['order_date']) && $order_meta['order_date'] != '' ? $order_meta['order_date'] : current_time('mysql', 0);
         $order_meta['order_currency'] = wpshop_tools::wpshop_get_currency(true);
         // Order Attached Addresses save
         if (!empty($_REQUEST['wps_order_selected_address']['billing'])) {
             // Informations
             $order_informations = get_post_meta($_REQUEST['post_ID'], '_order_info', true);
             $order_informations = !empty($order_informations) ? $order_informations : array();
             $billing_address_option = get_option('wpshop_billing_address');
             $billing_address_option = !empty($billing_address_option) && !empty($billing_address_option['choice']) ? $billing_address_option['choice'] : '';
             // Billing datas
             $order_informations['billing'] = array('id' => $billing_address_option, 'address_id' => $_REQUEST['wps_order_selected_address']['billing'], 'address' => get_post_meta($_REQUEST['wps_order_selected_address']['billing'], '_wpshop_address_metadata', true));
             // Shipping datas
             if (!empty($_REQUEST['wps_order_selected_address']['shipping'])) {
                 $shipping_address_option = get_option('wpshop_shipping_address_choice');
                 $shipping_address_option = !empty($shipping_address_option) && !empty($shipping_address_option['choice']) ? $shipping_address_option['choice'] : '';
                 $order_informations['shipping'] = array('id' => $shipping_address_option, 'address_id' => $_REQUEST['wps_order_selected_address']['shipping'], 'address' => get_post_meta($_REQUEST['wps_order_selected_address']['shipping'], '_wpshop_address_metadata', true));
             }
             update_post_meta($_REQUEST['post_ID'], '_order_info', $order_informations);
         }
         // Add a Payment to Order MetaData
         if (!empty($_REQUEST['wpshop_admin_order_payment_received']) && !empty($_REQUEST['wpshop_admin_order_payment_received']['method']) && !empty($_REQUEST['wpshop_admin_order_payment_received']['date']) && !empty($_REQUEST['wpshop_admin_order_payment_received']['received_amount']) && ($_REQUEST['action_triggered_from'] == 'add_payment' || !empty($_REQUEST['wpshop_admin_order_payment_reference']))) {
             $received_payment_amount = $_REQUEST['wpshop_admin_order_payment_received']['received_amount'];
             // Payment Params
             $params_array = array('method' => $_REQUEST['wpshop_admin_order_payment_received']['method'], 'waited_amount' => $received_payment_amount, 'status' => 'payment_received', 'author' => $user_id, 'payment_reference' => $_REQUEST['wpshop_admin_order_payment_received']['payment_reference'], 'date' => current_time('mysql', 0), 'received_amount' => $received_payment_amount);
             $order_meta = wpshop_payment::check_order_payment_total_amount($_REQUEST['post_ID'], $params_array, 'completed', $order_meta, false);
         }
         //Round final amount
         $order_meta['order_grand_total'] = number_format(round($order_meta['order_grand_total'], 2), 2, '.', '');
         $order_meta['order_total_ttc'] = number_format(round($order_meta['order_total_ttc'], 2), 2, '.', '');
         $order_meta['order_amount_to_pay_now'] = number_format(round($order_meta['order_amount_to_pay_now'], 2), 2, '.', '');
         // Payment Pre-Fill
         if (empty($order_meta['order_payment'])) {
             $order_meta['order_payment']['customer_choice']['method'] = '';
             $order_meta['order_payment']['received'][] = array('waited_amount' => !empty($order_meta) && !empty($order_meta['order_grand_total']) ? number_format($order_meta['order_grand_total'], 2, '.', '') : 0);
         }
         // Apply a filter to make credit, notificate the customer and generate billing actions
         $order_meta = apply_filters('wps_order_saving_admin_extra_action', $order_meta, $_REQUEST);
         // Save Shipping informations & Order status
         update_post_meta($_REQUEST['post_ID'], '_wpshop_order_shipping_date', $order_meta['order_shipping_date']);
         update_post_meta($_REQUEST['post_ID'], '_wpshop_order_status', $order_meta['order_status']);
         // Save Metadata
         update_post_meta($_REQUEST['post_ID'], '_order_postmeta', $order_meta);
     }
 }
 public static function process_checkout($paymentMethod = 'paypal', $order_id = 0, $customer_id = 0, $customer_billing_address_id = 0, $customer_shipping_address_id = 0)
 {
     global $wpdb, $wpshop, $wpshop_cart;
     $wps_message = new wps_message_ctr();
     $shipping_address_option = get_option('wpshop_shipping_address_choice');
     if (is_user_logged_in()) {
         $user_id = get_current_user_id();
         if ($customer_id != 0) {
             $user_id = $customer_id;
         }
         // If the order is already created in the db
         if (!empty($order_id) && is_numeric($order_id)) {
             $order = get_post_meta($order_id, '_order_postmeta', true);
             if (!empty($order)) {
                 if ($order['customer_id'] == $user_id) {
                     $order['payment_method'] = $paymentMethod;
                     $_SESSION['order_id'] = wpshop_tools::varSanitizer($order_id);
                     // Store cart in session
                     //wpshop_cart::store_cart_in_session($order);
                     // Add a payment
                     $order['order_payment']['received'][] = array('method' => $paymentMethod, 'waited_amount' => $order['order_amount_to_pay_now'], 'status' => 'waiting_payment', 'author' => get_current_user_id());
                     // On enregistre la commande
                     update_post_meta($order_id, '_order_postmeta', $order);
                     update_post_meta($order_id, '_wpshop_order_customer_id', $user_id);
                 } else {
                     $wpshop->add_error(__('You don\'t own the order', 'wpshop'));
                 }
             } else {
                 $wpshop->add_error(__('The order doesn\'t exist.', 'wpshop'));
             }
         } else {
             $order_data = array('post_type' => WPSHOP_NEWTYPE_IDENTIFIER_ORDER, 'post_title' => sprintf(__('Order - %s', 'wpshop'), mysql2date('d M Y\\, H:i:s', current_time('mysql', 0), true)), 'post_status' => 'publish', 'post_excerpt' => !empty($_POST['wps-customer-comment']) ? $_POST['wps-customer-comment'] : '', 'post_author' => $user_id, 'comment_status' => 'closed');
             // Cart items
             $order_items = array();
             $order_tva = array();
             //$cart = (array)$wpshop_cart->cart;
             if (!empty($_SESSION['cart']) && !empty($_SESSION['cart']['shipping_method'])) {
                 $_SESSION['cart']['shipping_method'] = __('Standard shipping method', 'wpshop');
             }
             $cart = (array) $_SESSION['cart'];
             $download_codes = array();
             // Nouvelle commande
             $order_id = wp_insert_post($order_data);
             $_SESSION['order_id'] = $order_id;
             // Cr�ation des codes de t�l�chargement si il y a des produits t�l�chargeable dans le panier
             if (!empty($cart['order_items'])) {
                 foreach ($cart['order_items'] as $c) {
                     $product = wpshop_products::get_product_data($c['item_id']);
                     /** Check if it's a variation and check the parent product **/
                     if (get_post_type($c['item_id']) == WPSHOP_NEWTYPE_IDENTIFIER_PRODUCT_VARIATION) {
                         $parent_def = wpshop_products::get_parent_variation($c['item_id']);
                         if (!empty($parent_def) && !empty($parent_def['parent_post_meta']) && !empty($parent_def['parent_post_meta']['is_downloadable_'])) {
                             $product['is_downloadable_'] = $parent_def['parent_post_meta']['is_downloadable_'];
                         }
                     }
                     if (!empty($product['is_downloadable_'])) {
                         $download_codes[$c['item_id']] = array('item_id' => $c['item_id'], 'download_code' => uniqid('', true));
                     }
                 }
             }
             if (!empty($download_codes)) {
                 update_user_meta($user_id, '_order_download_codes_' . $order_id, $download_codes);
             }
             // Informations de commande � stocker
             $currency = wpshop_tools::wpshop_get_currency(true);
             $order = array_merge(array('order_key' => NULL, 'customer_id' => $user_id, 'order_status' => 'awaiting_payment', 'order_date' => current_time('mysql', 0), 'order_shipping_date' => null, 'order_invoice_ref' => '', 'order_currency' => $currency, 'order_payment' => array('customer_choice' => array('method' => $paymentMethod), 'received' => array('0' => array('method' => $paymentMethod, 'waited_amount' => $cart['order_amount_to_pay_now'], 'status' => 'waiting_payment', 'author' => $user_id)), 'shipping_method' => !empty($_SESSION['shipping_method']) ? wpshop_tools::varSanitizer($_SESSION['shipping_method']) : __('Standard shipping method', 'wpshop'))), $cart);
             // Si c'est un devis
             if ($paymentMethod == 'quotation') {
                 $order['order_temporary_key'] = wpshop_orders::get_new_pre_order_reference();
             } else {
                 $order['order_key'] = wpshop_orders::get_new_order_reference();
             }
             //Round final amount
             $order['order_grand_total'] = number_format(round($order['order_grand_total'], 2), 2, '.', '');
             $order['order_total_ttc'] = number_format(round($order['order_total_ttc'], 2), 2, '.', '');
             $order['order_amount_to_pay_now'] = number_format(round($order['order_amount_to_pay_now'], 2), 2, '.', '');
             /** On enregistre la commande	*/
             update_post_meta($order_id, '_order_postmeta', $order);
             update_post_meta($order_id, '_wpshop_order_customer_id', $order['customer_id']);
             update_post_meta($order_id, '_wpshop_order_shipping_date', $order['order_shipping_date']);
             update_post_meta($order_id, '_wpshop_order_status', $order['order_status']);
             do_action('wps_order_extra_save', $order_id);
             //Add an action to extra actions on order save
             $args = array('order_id' => $order_id, 'posted_data' => $_REQUEST);
             wpshop_tools::create_custom_hook('wps_order_extra_save_action', $args);
             /**	Set custmer information for the order	*/
             $shipping_address = !empty($shipping_address_option) && !empty($shipping_address_option['activate']) ? !empty($_SESSION['shipping_address']) ? wpshop_tools::varSanitizer($_SESSION['shipping_address']) : $customer_shipping_address_id : '';
             $billing_address = !empty($_SESSION['billing_address']) ? wpshop_tools::varSanitizer($_SESSION['billing_address']) : $customer_billing_address_id;
             if (!empty($billing_address)) {
                 wpshop_orders::set_order_customer_addresses($user_id, $order_id, $shipping_address, $billing_address);
             }
             if (!empty($_SESSION['shipping_address_to_save'])) {
                 $order_infos_postmeta = get_post_meta($order_id, '_order_info', true);
                 $order_infos_postmeta['shipping']['address'] = $_SESSION['shipping_address_to_save'];
                 $order_infos_postmeta['shipping']['address_id'] = '';
                 update_post_meta($order_id, '_order_info', $order_infos_postmeta);
                 unset($_SESSION['shipping_address_to_save']);
             }
             /** Save Coupon use **/
             if (!empty($_SESSION['cart']['coupon_id'])) {
                 $wps_coupon_mdl = new wps_coupon_model();
                 $wps_coupon_mdl->save_coupon_use($_SESSION['cart']['coupon_id']);
             }
             /**	Notify the customer as the case	*/
             $user_info = get_userdata($user_id);
             $email = $user_info->user_email;
             $first_name = $user_info->user_firstname;
             $last_name = $user_info->user_lastname;
             // Envoie du message de confirmation de commande au client
             $order_meta = get_post_meta($order_id, '_order_postmeta', true);
             $shipping_mode_option = get_option('wps_shipping_mode');
             $shipping_method = !empty($order_meta['order_payment']['shipping_method']) && !empty($shipping_mode_option) && !empty($shipping_mode_option['modes']) && is_array($shipping_mode_option['modes']) && array_key_exists($order_meta['order_payment']['shipping_method'], $shipping_mode_option['modes']) ? $shipping_mode_option['modes'][$order_meta['order_payment']['shipping_method']]['name'] : (!empty($order_meta['order_payment']['shipping_method']) ? $order_meta['order_payment']['shipping_method'] : '');
             if (!empty($order_meta) && !empty($order_meta['cart_type']) && $order_meta['cart_type'] == 'quotation' && empty($order_meta['order_key'])) {
                 $wps_message->wpshop_prepared_email($email, 'WPSHOP_QUOTATION_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_date' => current_time('mysql', 0), 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method, 'order_personnal_informations' => ''));
             } else {
                 $email_option = get_option('wpshop_emails');
                 if (empty($email_option['send_confirmation_order_message'])) {
                     $payment_method_option = get_option('wps_payment_mode');
                     $order_payment_method = !empty($payment_method_option) && !empty($payment_method_option['mode']) && !empty($order_meta['order_payment']['customer_choice']['method']) && !empty($payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]) ? $payment_method_option['mode'][$order_meta['order_payment']['customer_choice']['method']]['name'] : $order_meta['order_payment']['customer_choice']['method'];
                     $wps_message->wpshop_prepared_email($email, 'WPSHOP_ORDER_CONFIRMATION_MESSAGE', array('order_id' => $order_id, 'customer_first_name' => $first_name, 'customer_last_name' => $last_name, 'customer_email' => $email, 'order_key' => !empty($order_meta['order_key']) ? $order_meta['order_key'] : '', 'order_date' => current_time('mysql', 0), 'order_payment_method' => $order_payment_method, 'order_content' => '', 'order_addresses' => '', 'order_customer_comments' => '', 'order_billing_address' => '', 'order_shipping_address' => '', 'order_shipping_method' => $shipping_method, 'order_personnal_informations' => ''));
                 }
             }
             if (empty($_SESSION['wps-pos-addon'])) {
                 $email_option = get_option('wpshop_emails');
                 if (empty($email_option) || !empty($email_option) && empty($email_option['send_confirmation_order_message'])) {
                     self::send_order_email_to_administrator($order_id, $user_info);
                 }
             }
             /** IF Order amount is 0, Finish the Order **/
             if ($cart['order_amount_to_pay_now'] == 0) {
                 $order_meta = get_post_meta($order_id, '_order_postmeta', true);
                 $payment_status = 'completed';
                 $params_array = array('method' => 'free', 'waited_amount' => $order_meta['order_amount_to_pay_now'], 'status' => 'payment_received', 'author' => $order_meta['customer_id'], 'payment_reference' => 'FREE_ORDER', 'date' => current_time('mysql', 0), 'received_amount' => $order_meta['order_amount_to_pay_now']);
                 wpshop_payment::check_order_payment_total_amount($order_id, $params_array, $payment_status);
             }
             apply_filters('wpshop_finish_order_extra_actions', $order_id);
         }
     }
     return $order_id;
 }
 /**
  * Listen Paysite Cash Response to payment request and do action
  */
 function listen_bank_response()
 {
     if (!empty($_GET['paymentListener']) && $_GET['paymentListener'] == 'paysite_cash') {
         if (!empty($_REQUEST['divers']) && !empty($_REQUEST['ref'])) {
             if ($this->checking_order_validity($_REQUEST['ref'], $_REQUEST['divers'])) {
                 // Save Paysite Cash return
                 $order_data = unserialize(base64_decode($_REQUEST['divers']));
                 $order_id = $order_data['order_id'];
                 $paysite_cash_return_data = get_post_meta($order_id, '_paysite_cash_return_data', true);
                 if (empty($paysite_cash_return_data)) {
                     $paysite_cash_return_data = array();
                 }
                 $paysite_cash_return_data[] = array('return_date' => current_time('mysql', 0), 'datas' => serialize($_REQUEST));
                 update_post_meta($order_id, '_paysite_cash_return_data', $paysite_cash_return_data);
                 // Checking return status
                 if (!empty($_REQUEST['etat'])) {
                     switch ($_REQUEST['etat']) {
                         case 'ok':
                             $payment_status = 'completed';
                             break;
                         case 'ko':
                             $payment_status = 'denied';
                             break;
                         case 'wait':
                             $payment_status = 'awaiting_payment';
                             $extra_data = get_post_meta($order_id, '_paysite_cash_extra_data', true);
                             if (empty($extra_data)) {
                                 $extra_data = array();
                             }
                             $extra_data[$_REQUEST['id_trans']]['wait'] = __('This payment is waiting your validation on Paysite Cash Commercant interface', 'wps_paysite_cash');
                             update_post_meta($order_id, '_paysite_cash_extra_data', $extra_data);
                             break;
                         case 'chargeback':
                             $payment_status = 'denied';
                             break;
                         default:
                             $payment_status = 'denied';
                             break;
                     }
                     // Payment actions
                     $order_meta = get_post_meta($order_id, '_order_postmeta', true);
                     $params_array = array('method' => $_REQUEST['paymentListener'], 'waited_amount' => $order_meta['order_amount_to_pay_now'], 'status' => number_format($order_meta['order_amount_to_pay_now'], 2, '.', '') == number_format($_REQUEST['montant'], 2, '.', '') ? 'payment_received' : 'incorrect_amount', 'author' => $order_meta['customer_id'], 'payment_reference' => $_REQUEST['ref'], 'date' => current_time('mysql', 0), 'received_amount' => $_REQUEST['montant']);
                     wpshop_payment::check_order_payment_total_amount($order_id, $params_array, $payment_status);
                 }
             }
         }
     }
 }
 /**
  * AJAX - Traite la commande / Process checkout
  */
 function wps_pos_process_checkout()
 {
     $status = false;
     $output = $message = '';
     $order_id = !empty($_POST['order_id']) ? wpshop_tools::varSanitizer($_POST['order_id']) : null;
     $new_order = empty($_POST['order_id']);
     $payment_method = !empty($_POST['wpspos-payment-method']) ? wpshop_tools::varSanitizer($_POST['wpspos-payment-method']) : null;
     $customer_id = !empty($_POST['customer_id']) ? wpshop_tools::varSanitizer($_POST['customer_id']) : !empty($_SESSION['cart']['customer_id']) ? wpshop_tools::varSanitizer($_SESSION['cart']['customer_id']) : null;
     $payment_amount = !empty($_POST['wps-pos-total-order-amount']) ? wpshop_tools::varSanitizer($_POST['wps-pos-total-order-amount']) : null;
     $received_payment_amount = !empty($_POST['wpspos-order-received-amount']) ? wpshop_tools::varSanitizer($_POST['wpspos-order-received-amount']) : $payment_amount;
     if (!empty($customer_id)) {
         if (empty($order_id) && !empty($payment_method)) {
             $_SESSION['shipping_method'] = 'default_shipping_mode_for_pos';
             $order_id = wpshop_checkout::process_checkout($payment_method, '', $customer_id, $_SESSION['billing_address'], $_SESSION['shipping_address']);
             wp_update_post(array('ID' => $order_id, 'post_parent' => get_current_user_id()));
         }
         if (!empty($order_id)) {
             $status = true;
             if (!empty($received_payment_amount)) {
                 $params_array = array('method' => $payment_method, 'waited_amount' => $payment_amount, 'status' => 'payment_received', 'author' => $customer_id, 'payment_reference' => '', 'date' => current_time('mysql', 0), 'received_amount' => 'money' == $payment_method && number_format((double) $received_payment_amount, 2, '.', '') > number_format((double) $payment_amount, 2, '.', '') ? $payment_amount : $received_payment_amount);
                 wpshop_payment::check_order_payment_total_amount($order_id, $params_array, 'completed');
             }
             /**	Get order content	*/
             $order_postmeta = get_post_meta($order_id, '_order_postmeta', true);
             ob_start();
             require_once wpshop_tools::get_template_part(WPSPOS_DIR, WPSPOS_TEMPLATES_MAIN_DIR, 'backend/order', 'order', 'complete');
             $output = ob_get_contents();
             ob_end_clean();
             /**	Empty the cart	*/
             /*if ( !empty( $order_postmeta ) && !empty( $order_postmeta['order_status'] ) && ( 'completed' ==  $order_postmeta['order_status'] ) ) {
             			$wps_cart = new wps_cart();
             			$wps_cart->empty_cart();
             		}*/
             $message = __('Order have been saved', 'wps-pos-i18n');
         } else {
             $message = __('No order have been found', 'wps-pos-i18n');
         }
         /*}
         		else {
         			$message = __( 'Please choose a payment method for order', 'wps-pos-i18n' );
         		}*/
     } else {
         $message = __('No customer has been selected for current order', 'wps-pos-i18n');
     }
     wp_die(json_encode(array('status' => $status, 'output' => $output, 'message' => $message)));
 }
Exemplo n.º 5
0
 function display_response()
 {
     // Begin Main : Retrieve Variables posted by CMCIC Payment Server
     $CMCIC_bruteVars = wpshop_tools::getMethode();
     // TPE init variables
     $oTpe = new CMCIC_Tpe();
     $oHmac = new CMCIC_Hmac($oTpe);
     // Message Authentication
     $cgi2_fields = sprintf(CMCIC_CGI2_FIELDS, $oTpe->sNumero, $CMCIC_bruteVars["date"], $CMCIC_bruteVars['montant'], $CMCIC_bruteVars['reference'], $CMCIC_bruteVars['texte-libre'], $oTpe->sVersion, $CMCIC_bruteVars['code-retour'], $CMCIC_bruteVars['cvx'], $CMCIC_bruteVars['vld'], $CMCIC_bruteVars['brand'], $CMCIC_bruteVars['status3ds'], $CMCIC_bruteVars['numauto'], $CMCIC_bruteVars['motifrefus'], $CMCIC_bruteVars['originecb'], $CMCIC_bruteVars['bincb'], $CMCIC_bruteVars['hpancb'], $CMCIC_bruteVars['ipclient'], $CMCIC_bruteVars['originetr'], $CMCIC_bruteVars['veres'], $CMCIC_bruteVars['pares']);
     if ($oHmac->computeHmac($cgi2_fields) == strtolower($CMCIC_bruteVars['MAC'])) {
         wpshop_payment::save_payment_return_data($CMCIC_bruteVars['reference']);
         $payment_status = 'denied';
         switch ($CMCIC_bruteVars['code-retour']) {
             case "Annulation":
                 // Attention : an autorization may still be delivered for this payment
                 //wpshop_payment::setOrderPaymentStatus($CMCIC_bruteVars['reference'], 'denied');
                 $payment_status = 'denied';
                 break;
             case "payetest":
                 // test
                 //wpshop_payment::setOrderPaymentStatus($CMCIC_bruteVars['reference'], 'completed');
                 $payment_status = 'completed';
                 break;
             case "paiement":
                 // prod
                 // Save cic txn_id
                 // 					update_post_meta($CMCIC_bruteVars['reference'], '_order_cic_txn_id', $CMCIC_bruteVars['numauto']);
                 //wpshop_payment::set_payment_transaction_number($CMCIC_bruteVars['reference'], $CMCIC_bruteVars['numauto']);
                 //wpshop_payment::setOrderPaymentStatus($CMCIC_bruteVars['reference'], 'completed');
                 $payment_status = 'completed';
                 break;
                 /*** ONLY FOR MULTIPART PAYMENT ***/
             /*** ONLY FOR MULTIPART PAYMENT ***/
             case "paiement_pf2":
             case "paiement_pf3":
             case "paiement_pf4":
                 // Payment has been accepted on the productive server for the part #N
                 // return code is like paiement_pf[#N]
                 // put your code here (email sending / Database update)
                 // You have the amount of the payment part in $CMCIC_bruteVars['montantech']
                 break;
             case "Annulation_pf2":
             case "Annulation_pf3":
             case "Annulation_pf4":
                 // Payment has been refused on the productive server for the part #N
                 // return code is like Annulation_pf[#N]
                 // put your code here (email sending / Database update)
                 // You have the amount of the payment part in $CMCIC_bruteVars['montantech']
                 break;
         }
         $order_meta = get_post_meta($CMCIC_bruteVars['reference'], '_order_postmeta', true);
         $params_array = array('method' => 'cic', 'waited_amount' => number_format((double) $order_meta['order_amount_to_pay_now'], 2, '.', ''), 'status' => $payment_status == 'completed' ? number_format((double) $order_meta['order_amount_to_pay_now'], 2, '.', '') == number_format((double) substr($CMCIC_bruteVars['montant'], 0, -3), 2, '.', '') ? 'payment_received' : 'incorrect_amount' : $payment_status, 'author' => $order_meta['customer_id'], 'payment_reference' => $CMCIC_bruteVars['numauto'], 'date' => current_time('mysql', 0), 'received_amount' => number_format((double) substr($CMCIC_bruteVars['montant'], 0, -3), 2, '.', ''));
         wpshop_payment::check_order_payment_total_amount($CMCIC_bruteVars['reference'], $params_array, $payment_status);
         $receipt = CMCIC_CGI2_MACOK;
     } else {
         // your code if the HMAC doesn't match
         $receipt = CMCIC_CGI2_MACNOTOK . $cgi2_fields;
     }
     // Send receipt to CMCIC server
     printf(CMCIC_CGI2_RECEIPT, $receipt);
 }
Exemplo n.º 6
0
 public function __construct()
 {
     add_filter('wps_payment_mode_interface_paypal', array(&$this, 'display_admin_part'));
     /** Check if SystemPay is registred in Payment Main Option **/
     $payment_option = get_option('wps_payment_mode');
     if (!empty($payment_option) && !empty($payment_option['mode']) && !array_key_exists('paypal', $payment_option['mode'])) {
         $payment_option['mode']['paypal']['name'] = __('Paypal', 'wpshop');
         $payment_option['mode']['paypal']['logo'] = WPSHOP_TEMPLATES_URL . 'wpshop/medias/paypal.png';
         $payment_option['mode']['paypal']['description'] = __('<strong>Tips</strong> : If you have a Paypal account, by choosing this payment method, you will be redirected to the secure payment site Paypal to make your payment. Debit your PayPal account, immediate booking products.', 'wpshop');
         update_option('wps_payment_mode', $payment_option);
     }
     if (!empty($_GET['paymentListener']) && $_GET['paymentListener'] == 'paypal') {
         $payment_status = 'denied';
         // read the post from PayPal system and add 'cmd'
         $req = 'cmd=_notify-validate';
         foreach ($_POST as $key => $value) {
             $value = urlencode(stripslashes($value));
             $req .= "&{$key}={$value}";
         }
         // If testing on Sandbox use:
         $paypalMode = get_option('wpshop_paypalMode', null);
         if ($paypalMode == 'sandbox') {
             $fp = fsockopen('ssl://sandbox.paypal.com', 443, $errno, $errstr, 30);
             $host = "www.sandbox.paypal.com";
         } else {
             $fp = fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30);
             $host = "www.paypal.com";
         }
         // post back to PayPal system to validate
         $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
         $header .= "Host: " . $host . "\r\n";
         $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
         $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
         /* Variables */
         $customer_id = $_POST['custom'];
         // id client
         $shipping = $_POST['mc_shipping'];
         // frais de livraison
         $business = $_POST['business'];
         // compte pro
         $order_id = (int) $_POST['invoice'];
         // num de facture
         $receiver_email = $_POST['receiver_email'];
         $amount_paid = $_POST['mc_gross'];
         // total (hors frais livraison)
         $txn_id = $_POST['txn_id'];
         // num�ro de transaction
         $payment_status = $_POST['payment_status'];
         // status du paiement
         $payer_email = $_POST['payer_email'];
         // email du client
         $txn_type = $_POST['txn_type'];
         if (!empty($_POST)) {
             foreach ($_POST as $key => $value) {
                 if (substr($key, 0, 9) == 'item_name') {
                     $_POST[$key] = htmlentities($value);
                 }
             }
         }
         /**	Save paypal return data automatically	*/
         wpshop_payment::save_payment_return_data($order_id);
         $notify_email = get_option('wpshop_paypalEmail', null);
         // email address to which debug emails are sent to
         if (!$fp) {
             echo 'HTTP ERROR!';
         } else {
             fputs($fp, $header . $req);
             while (!feof($fp)) {
                 $res = fgets($fp, 1024);
                 if (strcmp($res, "VERIFIED") == 0) {
                     $paypalBusinessEmail = get_option('wpshop_paypalEmail', null);
                     /**	Check if payment has been send to good paypal account	*/
                     if ($receiver_email == $paypalBusinessEmail) {
                         /**	Get the payment transaction identifier	*/
                         $paypal_txn_id = wpshop_payment::get_payment_transaction_number($order_id, wpshop_payment::get_order_waiting_payment_array_id($order_id, 'paypal'));
                         /**	If no transaction reference has been saved for this order	*/
                         if (empty($paypal_txn_id)) {
                             /**	Set the payment reference for the order	*/
                             wpshop_payment::set_payment_transaction_number($order_id, $txn_id);
                             /**	Get order content	*/
                             $order = get_post_meta($order_id, '_order_postmeta', true);
                             /**	Check the different amount : Order total / Paypal paid amount	*/
                             // 								$amount2pay = floatval($order['order_grand_total']);
                             $amount2pay = number_format(floatval($order['order_amount_to_pay_now']), 2, '.', '');
                             $amount_paid = number_format(floatval($amount_paid), 2, '.', '');
                             /*	Check if the paid amount is equal to the order amount	*/
                             if ($amount_paid == $amount2pay) {
                                 $payment_status = 'completed';
                             } else {
                                 $payment_status = 'incorrect_amount';
                             }
                         } else {
                             @mail($notify_email, 'VERIFIED DUPLICATED TRANSACTION', 'VERIFIED DUPLICATED TRANSACTION');
                             $payment_status = 'completed';
                         }
                     }
                 } elseif (strcmp($res, "INVALID") == 0) {
                     @mail($notify_email, "INVALID IPN", "{$res}\n {$req}");
                     $payment_status = 'payment_refused';
                 }
             }
             fclose($fp);
         }
         $params_array = array('method' => 'paypal', 'waited_amount' => number_format((double) $order['order_amount_to_pay_now'], 2, '.', ''), 'status' => number_format((double) $order['order_amount_to_pay_now'], 2, '.', '') == number_format((double) $_POST['mc_gross'], 2, '.', '') ? 'payment_received' : 'incorrect_amount', 'author' => $order['customer_id'], 'payment_reference' => $txn_id, 'date' => current_time('mysql', 0), 'received_amount' => number_format((double) $_POST['mc_gross'], 2, '.', ''));
         wpshop_payment::check_order_payment_total_amount($order_id, $params_array, $payment_status);
     }
 }