示例#1
0
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;
 }