ini_set('log_errors', true); ini_set('error_log', dirname(__FILE__) . '/ipn_errors.log'); // instantiate the IpnListener class ob_start(); print_r($_REQUEST); file_put_contents('ipn.txt', ob_get_clean()); die; if (isset($_POST)) { return; $post_password = substr('lpr_order_' . $_POST['txn_id'], 0, 20); $date = gmdate('Y-m-d H:i:s', strtotime($_POST['payment_date']) + get_option('gmt_offset') * HOUR_IN_SECONDS); $purchased_items = array(); $purchased_items[] = array('course_id' => $_POST['item_number'], 'cost' => $_POST['mc_gross']); $order_data = array('ID' => $order_id, 'post_author' => $_POST['custom'], 'post_date' => $date, 'post_type' => LP()->order_post_type, 'post_password' => $post_password, 'post_title' => __('Order on ', 'learn_press') . ' ' . date("l jS F Y h:i:s A", strtotime($date))); $order_meta = array('lpr_cost' => $_POST['mc_gross'], 'lpr_methods' => 'paypal', 'lpr_items' => $purchased_items, 'lpr_status' => 0, 'lpr_courses' => $_POST['item_number'], 'lpr_information' => $_POST); learn_press_update_order($order_data, $order_meta, $purchased_items); } include 'ipnlistener.php'; $listener = new IpnListener(); /* When you are testing your IPN script you should be using a PayPal "Sandbox" account: https://developer.paypal.com When you are ready to go live change use_sandbox to false. */ $listener->use_sandbox = true; /* By default the IpnListener object is going going to post the data back to PayPal using cURL over a secure SSL connection. This is the recommended way to post the data back, however, some people may have connections problems using this method. To post over standard HTTP connection, use:
/** * Creates temp new order if needed * * @return mixed|WP_Error * @throws Exception */ function create_order() { global $wpdb; // Third-party can be controls to create a order if ($order_id = apply_filters('learn_press_create_order', null, $this)) { return $order_id; } try { // Start transaction if available //$wpdb->query( 'START TRANSACTION' ); $order_data = array('status' => apply_filters('learn_press_default_order_status', 'pending'), 'user_id' => get_current_user_id(), 'user_note' => isset($_REQUEST['order_comments']) ? $_REQUEST['order_comments'] : '', 'created_via' => 'checkout'); // Insert or update the post data $order_id = absint(LP()->session->order_awaiting_payment); // Resume the unpaid order if its pending if ($order_id > 0 && ($order = learn_press_get_order($order_id)) && $order->has_status(array('pending', 'failed'))) { $order_data['ID'] = $order_id; $order = learn_press_update_order($order_data); if (is_wp_error($order)) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 401)); } else { $order->remove_order_items(); //do_action( 'learn_press_resume_order', $order_id ); } } else { $order = learn_press_create_order($order_data); if (is_wp_error($order)) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 400)); } else { $order_id = $order->id; do_action('learn_press_new_order', $order_id); } } // Store the line items to the new/resumed order foreach (LP()->cart->get_items() as $item) { if (empty($item['order_item_name']) && !empty($item['item_id']) && ($course = LP_Course::get_course($item['item_id']))) { $item['order_item_name'] = $course->get_title(); } else { throw new Exception(sprintf(__('Item does not exists!', 'learn_press'), 402)); } $item_id = $order->add_item($item); if (!$item_id) { throw new Exception(sprintf(__('Error %d: Unable to create order. Please try again.', 'learn_press'), 402)); } // Allow plugins to add order item meta do_action('learn_press_add_order_item_meta', $item_id, $item); } $order->set_payment_method($this->payment_method); // Update user meta if (!empty($this->user_id)) { if (apply_filters('learn_press_checkout_update_user_data', true, $this)) { // TODO: update user meta } do_action('learn_press_checkout_update_user_meta', $this->user_id, $_REQUEST); } // Third-party add meta data do_action('learn_press_checkout_update_order_meta', $order_id, $_REQUEST); //$wpdb->query( 'COMMIT' ); } catch (Exception $e) { // There was an error adding order data! $wpdb->query('ROLLBACK'); echo $e->getMessage(); return false; //$e->getMessage(); } return $order_id; }