Function Reference: payment_handler

Summary

Perform handler for payment after submit listing.

Global Values

$gd_session
(object) (required) GeoDirectory Session object.

Default: None

Change Log

Since: 1.0.0

Actions

‘geodir_payment_checkout_free_publish_before’ [Line: 503]

‘geodir_payment_checkout_free_publish_after’ [Line: 552]

Source Code

function payment_handler() {
	global $gd_session;
	
	$geodir_ajax = isset($_REQUEST['geodir_ajax']) ? $_REQUEST['geodir_ajax'] : '';
	$ajax_action = isset($_REQUEST['ajax_action']) ? $_REQUEST['ajax_action'] : '';

	if ($geodir_ajax == 'add_listing') {
		switch($ajax_action) {
			case 'pre-checkout': {
				$request = $gd_session->get('listing');

				if (!empty($request) && isset($request['geodir_spamblocker']) && $request['geodir_spamblocker'] == '64' && isset($request['geodir_filled_by_spam_bot']) && $request['geodir_filled_by_spam_bot'] == '') {
					$post_id = geodir_save_listing();
					
					if ( $post_id ) {
						$package_id = $request['package_id'];
						$package_info = geodir_get_package_info( $package_id );
						$package_id = $package_info->pid;
						$post_type = get_post_type( $post_id );
						
						$coupon_code = isset( $_REQUEST['coupon_code'] ) ? $_REQUEST['coupon_code'] : '';
						
						$alive_days = $package_info->days;
						$sub_units = $package_info->sub_units;
						$sub_units_num = $package_info->sub_units_num;
						
						if ( $package_info->sub_active ) {
							$sub_units_num_var = $package_info->sub_units_num;
							$sub_units_var = $package_info->sub_units;
							$alive_days = geodir_payment_get_units_to_days( $sub_units_num_var, $sub_units_var );
							$sub_num_trial_days_var = $package_info->sub_num_trial_days;
							$sub_num_trial_units = isset( $package_info->sub_num_trial_units ) ? $package_info->sub_num_trial_units : 'D';
							$sub_num_trial_days_var = geodir_payment_get_units_to_days( $sub_num_trial_days_var, $sub_num_trial_units );
							$sub_units_num_times_var = $package_info->sub_units_num_times;
							
							if ( $package_info->sub_num_trial_days > 0 ) {
								$alive_days = $sub_num_trial_days_var;
							}
						}
						
						$expire_date = $alive_days > 0 ? date_i18n( 'Y-m-d', strtotime( date_i18n( 'Y-m-d' ) . ' + ' . (int)$alive_days . ' days' ) ) : '';
						
						$amount = $package_info->amount;
						
						$discount = $coupon_code != '' ? geodir_get_discount_amount( $coupon_code, $amount ) : 0;
						$tax_amount = geodir_payment_get_tax_amount( $amount, $package_id, $post_id );
						
						
						if (!($coupon_code != '' && geodir_payment_allow_coupon_usage(array('package_id' => $package_id)) && geodir_is_valid_coupon($post_type, $coupon_code) && geodir_payment_coupon_usage_count_left($coupon_code))) {
							$coupon_code = '';
							$discount = 0;
						}
						
						$amount = geodir_payment_price( $amount, false );
						
						$paid_amount = ( $amount + $tax_amount ) - $discount;
						$paid_amount = $paid_amount > 0 ? $paid_amount : 0;
						
						$payment_status = $paid_amount > 0 ? 'pending' : 'confirmed';
						
						$invoice_type = 'add_listing';
						$invoice_callback = 'add_listing';
						$invoice_title = wp_sprintf(  __( 'Add Listing: %s', 'geodir_payments' ), get_the_title( $post_id ) );
						if ($package_id && $amount > 0 && !empty($_REQUEST['pid'])) {
							$post_status = get_post_status($_REQUEST['pid']);
							$gd_pay_type = !empty($_POST['gd_pay_type']) ? $_POST['gd_pay_type'] : 'upgrade';
							if ($gd_pay_type == 'renew' || ($gd_pay_type != 'upgrade' && $post_status == 'draft')) {
								$invoice_type = 'renew_listing';
								$invoice_callback = 'renew_listing';
								$invoice_title = wp_sprintf(  __( 'Renew Listing: %s', 'geodir_payments' ), get_the_title( $post_id ) );
							} else {
								$invoice_type = 'upgrade_listing';
								$invoice_callback = 'upgrade_listing';
								$invoice_title = wp_sprintf(  __( 'Upgrade Listing: %s', 'geodir_payments' ), get_the_title( $post_id ) );
							}
						}
						
						$data = array();
						$data['type'] = $amount > 0 ? 'paid' : 'free';
						$data['post_id'] = $post_id;
						$data['post_title'] = $invoice_title;
						$data['post_action'] = 'add';
						$data['invoice_type'] = $invoice_type;
						$data['invoice_callback'] = $invoice_callback;
						$data['invoice_data'] = maybe_serialize( array() );
						$data['package_id'] = $package_id;
						$data['package_title'] = __(stripslashes_deep($package_info->title), 'geodirectory');
						$data['amount'] = $amount;
						$data['alive_days'] = $alive_days;
						$data['expire_date'] = $expire_date;
						$data['coupon_code'] = $coupon_code;
						$data['discount'] = $discount;
						$data['tax_amount'] = $tax_amount;
						$data['paied_amount'] = $paid_amount;
						$data['status'] = $payment_status;
						$data['is_current'] = 1;

						$invoice_id = geodir_create_invoice( $data );
						
						if ( $invoice_id ) {
							geodir_update_invoice_status( $invoice_id, $payment_status );
							
							/**
							 * Called before redirect to the payment checkout page.
							 *
							 * @since 1.2.6
							 *
							 * @param int $invoice_id Current payment invoice/cart id.
							 */
							do_action( 'geodir_payment_checkout_redirect', $invoice_id );
							
							wp_redirect( home_url() );
							gd_die();
						}
					}
				} else {
					$gd_session->un_set('listing');
					wp_redirect( home_url() );
				}
			}
		}
	}
	
	if ($geodir_ajax == 'checkout' && $cart_id = geodir_payment_cart_id()) {
		$cart = geodir_payment_get_cart($cart_id);
		$_wpnonce = isset( $_POST['_wpnonce'] ) ? $_POST['_wpnonce'] : '';

		if ( wp_verify_nonce( $_wpnonce, 'gd_cart_nonce' ) && !empty( $cart ) && ( !empty( $_POST['gd_payment_method'] ) || !empty( $_POST['gd_checkout_publish'] ) ) ) {
			$payment_method = !empty( $_POST['gd_payment_method'] ) ? $_POST['gd_payment_method'] : '';
			$checkout_publish = !empty( $_POST['gd_checkout_publish'] ) ? $_POST['gd_checkout_publish'] : '';
			
			$data['id'] = $cart_id;
			$data['paymentmethod'] = $payment_method;

			$free_publish = !$cart->paied_amount > 0 && wp_verify_nonce( $checkout_publish, 'gd_checkout_publish' . $cart_id ) ? true : false;
			
			if ( $free_publish ) {
				/**
				 * Called before publishing invoice when amount is not payable.
				 *
				 * @since 1.3.2
				 *
				 * @param int $cart_id Current payment invoice/cart id.
				 */
				do_action( 'geodir_payment_checkout_free_publish_before', $cart_id );
				
				$data['paymentmethod'] = 'free';
				$data['type'] = 'free';
				geodir_update_invoice( $data );
				
				geodir_payment_invoice_coupon_usage_count($cart_id);
				
				$user_id = $cart->user_id;
				$post_id = $cart->post_id;
				$item_name = $cart->post_title;
				if (!empty($cart->coupon_code) && $cart->discount > 0) {
					$cart->paied_amount = $cart->amount;
				}
				$payable_amount = geodir_payment_price( $cart->paied_amount );
					
				$transaction_details = '';
				$transaction_details .= '--------------------------------------------------
'; $transaction_details .= sprintf( __( 'Payment Details for Invoice ID #%s', 'geodir_payments' ), geodir_payment_invoice_id_formatted($cart_id) ) . '
'; $transaction_details .= '--------------------------------------------------
'; $transaction_details .= sprintf( __( 'Item Name: %s', 'geodir_payments' ), $item_name ) . '
'; $transaction_details .= '--------------------------------------------------
'; $transaction_details .= sprintf( __( 'Status: %s', 'geodir_payments' ), __( 'Confirmed', 'geodir_payments' ) ) . '
'; $transaction_details .= sprintf( __( 'Amount: %s', 'geodir_payments' ), $payable_amount ) . '
'; if (!empty($cart->coupon_code) && $cart->discount > 0) { $transaction_details .= sprintf( __( 'Discount: %s', 'geodir_payments' ), geodir_payment_price( $cart->discount ) ) . '
'; } $transaction_details .= sprintf( __( 'Type: %s', 'geodir_payments' ), __( 'Free', 'geodir_payments' ) ) . '
'; $transaction_details .= sprintf( __( 'Date: %s', 'geodir_payments' ), date_i18n( 'F j, Y, g:i a', current_time( 'timestamp' ) ) ) . '
'; $transaction_details .= sprintf( __( 'Method: %s', 'geodir_payments' ), __( 'Instant Publish', 'geodir_payments' ) ) . '
'; $transaction_details .= '--------------------------------------------------
'; // update invoice status and transaction details geodir_update_invoice_status( $cart_id, 'confirmed' ); geodir_update_invoice_transaction_details( $cart_id, $transaction_details ); // Send notification to admin. geodir_payment_adminEmail( $post_id, $user_id, 'payment_success', $transaction_details ); // Send notification to client. geodir_payment_clientEmail( $post_id, $user_id, 'payment_success', $transaction_details ); /** * Called after publishing invoice when amount is not payable. * * @since 1.3.2 * * @param int $cart_id Current payment invoice/cart id. */ do_action( 'geodir_payment_checkout_free_publish_after', $cart_id ); // Clear cart geodir_payment_clear_cart(); $redirect_url = geodir_info_url( array( 'pay_action' => 'success', 'inv' => $cart_id, 'pid' => $post_id ) ); wp_redirect( $redirect_url ); gd_die(); } else if ( !$free_publish && $payment_method ) { geodir_update_invoice( $data ); geodir_payment_invoice_coupon_usage_count($cart_id); /** * Called before redirect to the payment gateway form for all payment methods. * * @since 1.2.6 * * @param int $cart_id Current payment invoice/cart id. */ do_action( 'geodir_payment_form_handler_global', $cart_id ); /** * Called before redirect to the payment gateway form for selected payment method. * * @since 1.2.6 * * @param int $cart_id Current payment invoice/cart id. */ do_action( 'geodir_payment_form_handler_' . $payment_method, $cart_id ); } else { // Clear cart geodir_payment_clear_cart(); wp_redirect( home_url() ); gd_die(); } } } }