Function Reference: geodir_ipn_handler_2co

Summary

This function has not been documented yet.

Source Code

function geodir_ipn_handler_2co() {
	$post = $_POST;
	
    $ins_vendor_id = isset($post['vendor_id']) ? $post['vendor_id'] : '';
	$ins_vendor_order_id = isset($post['vendor_order_id']) && $post['vendor_order_id'] > 0 ? absint($post['vendor_order_id']) : '';
	$ins_message_type = isset($post['message_type']) ? $post['message_type'] : '';
	$ins_sale_id = isset($post['sale_id']) ? absint($post['sale_id']) : '';
	$ins_invoice_id = isset($post['invoice_id']) ? absint($post['invoice_id']) : '';
	$ins_recurring = isset($post['recurring']) && absint($post['recurring']) == 1 ? true : false;
	$ins_invoice_status = isset($post['invoice_status']) ? $post['invoice_status'] : '';
	$ins_recurrence_status = isset($post['item_rec_status_1']) ? $post['item_rec_status_1'] : '';
	$ins_next_recurrence = isset($post['item_rec_date_next_1']) ? $post['item_rec_date_next_1'] : '';
	$ins_payment_type = isset($post['payment_type']) ? $post['payment_type'] : '';
	$ins_md5_hash = isset($post['md5_hash']) ? $post['md5_hash'] : '';
	$ins_cust_amount = isset($post['invoice_cust_amount']) ? $post['invoice_cust_amount'] : '';
	
	$invoice_id = $ins_vendor_order_id;
	$is_subscription = $ins_recurring;
	$invoice_info = $invoice_id ? geodir_get_invoice($invoice_id) : NULL;
	
	if (empty($invoice_info) || !($ins_message_type && $ins_sale_id && $ins_invoice_id)) {
		wp_redirect(home_url());
		exit;
	}
	
	$message_type = isset( $post['message_type'] ) ? geodir_strtoupper($post['message_type']) : '';
	
	$status = 'pending';
	$is_recurring = false;
	if ($message_type == 'ORDER_CREATED' || $message_type == 'INVOICE_STATUS_CHANGED') {
		if ($ins_invoice_status == 'approved' || $ins_invoice_status == 'deposited') {
			$status = 'confirmed';
		} else if ($ins_invoice_status == 'declined') {
			$status = 'failed';
		}
	} else if ($message_type == 'REFUND_ISSUED') {
		$status = 'failed';
	} else if (in_array($message_type, array('RECURRING_INSTALLMENT_SUCCESS', 'RECURRING_RESTART', 'RECURRING_RESTARTED'))) {
		$status = 'confirmed';
		$is_recurring = true;
	} else if (in_array($message_type, array('RECURRING_INSTALLMENT_FAILED', 'RECURRING_STOPPED', 'RECURRING_COMPLETE'))) {
		$status = 'custom';
		$is_recurring = true;
	}
	
	$invoice_data = (array)maybe_unserialize($invoice_info->invoice_data);
		
	$post_id = $invoice_info->post_id;
	$user_id = $invoice_info->user_id;
			
	$redirect_url = home_url();
	$success_url = geodir_info_url(array('pay_action' => 'success', 'inv' => $invoice_id, 'pid' => $post_id));
	$cancel_url = geodir_info_url(array('pay_action' => 'cancel', 'inv' => $invoice_id, 'pid' => $post_id));
	
	$notify_status = '';
	$update_status = false;
	$update_transaction = false;
	switch ($status) {
		case 'confirmed':
			$redirect_url = $success_url;
			$notify_status 	= 'payment_success';
			$update_status = true;
			$update_transaction = true;
		break;
		case 'pending':
			$redirect_url = $success_url;
		break;
		case 'cancelled':
		case 'failed':
			$redirect_url = $cancel_url;
			$notify_status 	= 'payment_fail';
			$update_status = true;
			$update_transaction = true;
		break;
		case 'custom':
			$notify_status 	= 'payment_success';
			$redirect_url = $success_url;
			$update_transaction = true;
		break;
	}
	
	$item_name		= $post['item_name_1'];
	$txn_id			= $ins_invoice_id;
	$payment_status = geodir_payment_status_name( $status );
	$amount			= geodir_payment_price($ins_cust_amount);
	$payment_type 	= $ins_payment_type;
	$payment_date 	= date_i18n( "F j, Y, g:i a", current_time( 'timestamp' ) );
	$payment_method = geodir_payment_method_title( '2co' );
	$discount = '';
	if (!empty($invoice_info->coupon_code) && $invoice_info->discount > 0) {
		$recurring_coupon = geodir_payment_coupon_is_recurring($invoice_info->coupon_code) ? true : false;
		
		$discount = ($recurring_coupon && $is_recurring && $status == 'confirmed') ? '' : geodir_payment_price($invoice_info->discount);
	}
	
	$invoice_data['timestamp'] = $post['timestamp'];
	$invoice_data['vendor_id'] = $ins_invoice_id;
	$invoice_data['invoice_id'] = $ins_invoice_id;
	$invoice_data['sale_id'] = $ins_sale_id;
	
	$transaction_details = '';
	if ($is_subscription) {
		if ($is_recurring) {
			$transaction_details .= '##### ' . __(geodir_strtoupper($post['message_description']), 'geodir_payments' ) . ' #####
'; } else { $transaction_details .= '##### ' . __( 'THIS IS A SUBSCRIPTION PAYMENT', 'geodir_payments' ) . ' #####
'; } } $transaction_details .= "--------------------------------------------------
"; $transaction_details .= wp_sprintf( __( "Payment Details for Invoice ID #%s", 'geodir_payments' ), geodir_payment_invoice_id_formatted($invoice_id) ) . "
"; $transaction_details .= "--------------------------------------------------
"; $transaction_details .= wp_sprintf( __( "Item Name: %s", 'geodir_payments' ), $item_name ) . "
"; $transaction_details .= "--------------------------------------------------
"; $transaction_details .= wp_sprintf( __( "Trans ID: %s", 'geodir_payments' ), $txn_id ) . "
"; $transaction_details .= wp_sprintf( __( "Status: %s", 'geodir_payments' ), $payment_status ) . "
"; $transaction_details .= wp_sprintf( __( "Payable Amount: %s", 'geodir_payments' ), $amount ) . "
"; if ($discount) { $transaction_details .= sprintf( __( 'Discount: %s', 'geodir_payments' ), $discount ) . '
'; } $transaction_details .= wp_sprintf( __( "Type: %s", 'geodir_payments' ), $payment_type ) . "
"; $transaction_details .= wp_sprintf( __( "Date: %s", 'geodir_payments' ), $payment_date ) . "
"; $transaction_details .= wp_sprintf( __( "Method: %s", 'geodir_payments' ), $payment_method ) . "
"; $transaction_details .= wp_sprintf( __( "Sale ID: %s", 'geodir_payments' ), $ins_sale_id ) . "
"; if ($is_subscription && $ins_recurrence_status) { $transaction_details .= wp_sprintf( __( "Subscription status: %s", 'geodir_payments' ), __(ucfirst($ins_recurrence_status), 'geodir_payments') ) . "
"; } if ($is_subscription && $status == 'confirmed' && $ins_next_recurrence && $ins_recurrence_status == 'live') { $transaction_details .= wp_sprintf( __( "Date of next recurring installment: %s", 'geodir_payments' ), date_i18n("F j, Y", strtotime($ins_next_recurrence))) . "
"; } $transaction_details .= "--------------------------------------------------
"; if ($update_status) { global $wpdb; $wpdb->update(INVOICE_TABLE, array('subscription' => ($is_subscription ? 1 : 0), 'invoice_data' => maybe_serialize($invoice_data)), array('id' => $invoice_id)); geodir_update_invoice_status($invoice_id, $status, $is_subscription); } if ($update_transaction) { geodir_update_invoice_transaction_details($invoice_id, $transaction_details); } if ($notify_status != '') { geodir_payment_adminEmail($post_id, $user_id, $notify_status, $transaction_details); // send notification to admin geodir_payment_clientEmail($post_id, $user_id, $notify_status, $transaction_details); // send notification to client } wp_redirect($redirect_url); exit; }