Skip to content
Get Discount
Formidable Forms alternatives
  • Pricing
  • Features
  • Templates
  • Integrations
  • Blog
  • Docs
  • Account
Sign in

Get Discount
Formidable Forms alternatives
Popular Search submitsubmissionentryentriespayment

Developer Docs

  • Database Tables of Fluent Forms
  • Submission Lifecycle
  • Integration Feed – Fields API
  • Creating Custom SmartCode for Form Editor
  • Limit Email Domains in Fluent Forms Form Submission
  • Email verification with Emailable
  • Email Confirmation Field
  • How to make a login form with Fluent Form
  • How to make a strong password requirement in user registration forms with Fluent Forms
  • Create Unique Fields in Fluent Forms
  • Populate dropdown field options from Google Sheet
  • Form PHP API
  • PHP Action Hooks
  • PHP Filter Hooks
  • Useful Snippets
  • Creating Pretty Conversational Form URL Slug
  • How to create your own custom field with Fluent Forms

Action Hooks

  • fluentform/before_insert_submission
  • fluentform/submission_inserted
  • fluentform/before_submission_confirmation
  • fluentform/inserted_new_form
  • fluentform/before_form_render
  • fluentform/loaded
  • fluentform/before_form_actions_processing
  • fluentform/before_insert_payment_form
  • flentform/form_duplicated
  • fluentform/form_imported
  • fluentform/after_save_form_settings
  • fluentform/editor_init
  • fluentform/loading_editor_assets
  • fluentform/before_editor_start
  • fluentform/after_editor_start
  • fluentform/after_form_screen_wrapper
  • fluentform/before_form_screen_wrapper
  • fluentform/render_item_{$item}
  • fluentform/after_form_render
  • fluentform/form_element_start
  • fluentform/render_item_step_start
  • fluentform/render_item_step_end
  • fluentform/rendering_calculation_form
  • fluentform/maybe_scheduled_jobs
  • fluentform/do_email_report_scheduled_tasks
  • fluentform/before_permission_set_assignment
  • fluentform/after_permission_set_assignment
  • fluentform/global_menu
  • fluentform/after_form_navigation
  • fluentform/form_application_view_{$route}
  • fluentform/init_custom_stylesheet
  • fluentform/load_form_assets
  • fluentform/scripts_registered
  • fluentform/render_payment_entries
  • fluentform/pre_load_scripts
  • fluentform/submission_note_stored
  • fluentform/starting_file_upload
  • fluentform/global_notify_completed
  • fluentform/save_global_integration_settings_{ $settingsKey}
  • fluentform/integration_action_result
  • fluentform/email_summary_details
  • fluentform/email_template_after_footer
  • fluentform/addons_page_render_{$current_menu_item}
  • fluentform/before_form_settings_app
  • fluentform/after_form_settings_app
  • fluentform/form_settings_container_{$current_sub_route}
  • fluentform/before_global_settings_wrapper
  • fluentform/after_global_settings_wrapper
  • fluentform/global_settings_component_{$currentComponent}
  • fluentform/after_global_settings_option_render
  • fluentform/before_global_settings_option_render
  • fluentform/before_tools_wrapper
  • fluentform/after_tools_wrapper
  • fluentform/before_tools_container
  • fluentform/after_tools_container
  • fluentform/form_styler
  • fluentform/after_style_generated
  • fluentform/conversational_frame_head
  • fluentform/conversational_frame_footer
  • fluentform/user_registration_before_start
  • fluentform/created_user
  • fluentform/user_registration_completed
  • fluentform/post_integration_success
  • fluentform/entry_confirmation
  • fluentform/before_partial_entry_deleted
  • fluentform/after_partial_entry_deleted
  • flunetform/render_payment_entries
  • fluentform/before_all_entries_render
  • fluentform/after_all_entries_render
  • fluentform/before_deleting_entries
  • fluentform/after_deleting_entries
  • fluentform/payment_receipt_before_content
  • fluentform/payment_receipt_after_content
  • fluentform/payment_frameless_{$paymentMethod}
  • fluentform/rending_payment_method_{$methodName}
  • fluentform/payment_method_render_{$methodName}
  • fluentform/before_payment_status_change
  • fluentform/after_payment_status_change
  • fluentform/payment_refunded_{$method}
  • fluentform/payment_refunded
  • fluentform/payment_refund_updated_{$method}
  • fluentform/payment_refund_updated
  • fluentform/ipn_paypal_action_{$txn_type}
  • fluentform/ipn_endpoint_{$paymentMethod}
  • fluentform/ipn_paypal_action_web_accept

Filter Hooks

  • fluentform/insert_response_data
  • fluentform/filter_insert_data
  • fluentform/submission_confirmation
  • fluentform/validate_input_item_{input_key}
  • fluentform/entry_statuses_core
  • fluentform/rendering_field_data_{INPUT_KEY}
  • fluentform/email_body
  • fluentform/rendering_field_data_select
  • fluentform/filter_email_attachments
  • fluentform/rendering_form
  • fluentform/is_form_renderable
  • fluentform/is_handling_submission
  • fluentform/validation_errors
  • fluentform/honeypot_name
  • fluentform/before_render_item
  • fluentform/rendering_field_html_{$elementName}
  • fluentform/skip_no_conflict
  • fluentform/load_styles
  • fluentform/load_default_public
  • fluentform/is_hide_submit_btn_{ $formId}
  • fluentform/form_class
  • fluentform/html_attributes
  • fluentform/editor_shortcodes
  • fluentform/shortcode_parser_callback_{smart_code_name}
  • fluentform/all_editor_shortcodes
  • fluentform/smartcode_group_{$group}
  • fluentform/payment_smartcode
  • fluentform/entry_statuses_core
  • fluentform/nonce_verify
  • fluentform/nonce_error
  • fluentform/numeric_styles
  • fluentform/akismet_fields
  • fluentform/will_return_html
  • fluentform/honeypot_status
  • fluentform/dashboard_notices
  • fluentform/is_admin_page
  • fluentform/single_response_data
  • fluentform/available_date_formats
  • fluentform/permission_set
  • fluentform/api_all_logs
  • fluentform/api_success_log
  • fluentform/api_failed_log
  • fluentform/truncate_password_values
  • fluentform/verify_user_permission_{ $eachPermission}
  • fluentform/permission_callback
  • fluentform/nonce_error
  • fluentform/editor_init_element_{$element}
  • fluentform/editor_validation_rule_settings
  • fluentform/editor_element_settings_placement
  • fluentform/editor_components
  • fluentform/editor_countries
  • fluentform/editor_element_customization_settings
  • fluentform/addons_extra_menu
  • fluentform/global_addons
  • fluentform/global_integration_settings_{$settingsKey}
  • fluentform/global_integration_fields_{$settingsKey}
  • fluentform/global_notification_active_types
  • fluentform/notifying_async_{$integrationKey}
  • fluentform/mailchimp_keep_existing_interests
  • fluentform/mailchimp_keep_existing_tags
  • fluentform/global_notification_feed_{$meta_key}
  • fluentform/integration_data_{$integrationKey}
  • fluentform/shortcode_defaults
  • fluentform/info_shortcode_defaults
  • fluentform/get_raw_responses
  • fluentform/export_data
  • fluentform/shortcode_feed_text
  • fluentform/entry_lists_labels
  • fluentform/all_entries
  • fluentform/step_string
  • fluentform/global_form_vars
  • fluentform/all_entry_labels
  • fluentform/all_entry_labels_with_payment
  • fluentforms/recaptcha_v3_ref_score
  • fluentform/auto_read
  • fluentform/create_default_settings
  • fluentform/form_fields_update
  • fluentform/submissions_widgets
  • fluentform/disabled_analytics
  • fluentform/submission_notes
  • fluentform/store_submission_note
  • fluentform/disable_attachment_delete
  • fluentform/response_render_{element}
  • fluentform/settings_module_{$module}
  • fluentform/rendering_field_html_{$element}
  • fluentform/validation_message_{$ruleName}
  • fluentform/item_rules_{$item}
  • fluentform/send_plain_html_email
  • fluentform/submission_message_parse
  • fluentform/email_subject
  • fluentform/email_body
  • fluentform/email_to
  • fluentform/email_header
  • fluentform/email_footer
  • fluentform/email_styles
  • fluentform/email_template_footer_text
  • fluentform/email_attachments
  • fluentform/email_summary_body_text
  • fluentform/email_summary_footer_text
  • fluentform/email_content_type_header
  • fluentform/email_template_header_image
  • fluentform/email_template_email_heading
  • fluentform/email_template_colors
  • fluentform/nonce_verify
  • fluentform/popup_shortcode_defaults
  • fluentform/survey_shortcode_defaults
  • fluentform/itl_options
  • fluentform/ip_provider
  • fluentform/post_type_selection_types_args
  • fluentform/post_selection_types
  • fluentform/post_selection_posts_pre_data
  • fluentform/post_selection_label_by
  • fluentform/user_registration_field_defaults
  • fluentform/icontact_request_args
  • fluentform/user_registration_feed_fields
  • fluentorm/user_registration_creatable_roles
  • fluentform/payment_settings_{$method}
  • fluentform/payment_method_settings_validation_{$method}
  • fluentform/payment_submission_data
  • fluentform/submission_order_items
  • fluentform/payment_field_{$elementName}
  • fluentform/stripe_checkout_args
  • fluentform/uploader_args
  • fluentform/file_uploaded
  • fluentform/file_upload_params
  • fluentform/default_upload_path
  • fluentform/file_upload_validations
  • fluentform/file_upload_validation_error
  • fluentform/disable_inputmode
  • fluentform/file_type_options
  • fluentform/default_upload_path

Reference API Classes

  • BaseFieldManager Class
  • Integration Manager Class
  • PDF Template Manager Class
  • Base Payment Method Class
  • BaseProcessor Class

Data Definations

  • $submission_data Array
  • $form Object
View Categories
  • Home
  • Docs
  • Developer Documentation
  • Reference API Classes
  • BaseProcessor Class

BaseProcessor Class

Introduction #

The Fluent Forms BaseProcessor class offers developers to process payment methods created from the BasePaymentMethod class.

The API Function is automatically called when the form has payment for the selected payment methods. The BaseFieldManager class is located at the pro version of fluetnform plugin insrc/Payments/PaymentMethods/BaseProcessor.php.

Notice: Please do not initiate this class directly. You should extend this class to add a new payment processor.

Methods #

init() #

You need to override this method using the following hooks. You can call it with your custom payment method class extended from the BasePaymentMethod class, please check this link for details. At the bottom of this page, you will see an example implementation of this method with all available parameters of these hooks.

/*
* $this->method Should match your payment method key
*/
public function init()
{
    add_action('fluentform/process_payment_' . $this->method, array($this, 'handlePaymentAction'), 10, 4);
    add_action('fluentform/payment_frameless_' . $this->method, array($this, 'handleSessionRedirectBack'));

    add_action('fluentform/ipn_endpint_' . $this->method, function () {
            //if IPN verification is needed
    });
}

handlePaymentAction() #

This is an abstract class that you have to implement in your own class. This is the most crucial part where the payment should be processed and then the transaction data is inserted into the database.

/* 
* Process and finalize the payment transaction
* @param $submissionId  - Form Submission ID
* @param $submissionData - Form Submission Data Array
* @param $form - Form Object
* @param $methodSettings - Payment Method Settins Data Array
*/

public abstract function handlePaymentAction($submissionId, $submissionData, $form, $methodSettings)

setSubmissionId($submissionId) #

This method will set the form submission ID property. It should be called from handlePaymentAction where the $submissionId parameter is available. The following methods does not need to be created in your class you can call this methods from the base class.

/*
* Set the currrent submission ID
* @param $submissionId  - Form Submission ID
*/
public function setSubmissionId($submissionId)

insertTransaction($data) #

This method will insert the transaction data into the database. It should be called from the handlePaymentAction() method or when you need to insert a transaction record after verifying data.

/*
* @param data - Transaction Data array
*/
public function insertTransaction($data)

insertRefund($data) #

This method is used to insert refund data.

/*
* @param data - Refund Data array
*/
public function insertRefund($data)

getTransaction($transactionId, $column = ‘id’) #

This method is called to get transaction data. You can use this inside handlePaymentAction() method to process the transaction.

/*
* @param transactionId - Transaction ID
* $column - Column Name to match with 
*/
public function getTransaction($transactionId, $column = 'id')

getRefund($refundId, $column = ‘id’) #

Use this method to get refund data.

/*
* @param @refundId - RefundId ID
* $column - Column Name to match with 
*/
public function getRefund($refundId, $column = 'id')

changeSubmissionPaymentStatus($newStatus) #

Update the current submission status for example paid or pending. After processing a transaction update the payment status using this method.

/*
*@param $newStatus - New submission status (string)
*/
public function changeSubmissionPaymentStatus($newStatus)

changeTransactionStatus($transactionId, $newStatus) #

Use this method to update the status of the transaction.

/*
*@param $transactionId - Transaction ID 
*@param $newStatus - New Status 
*/
public function changeTransactionStatus($transactionId, $newStatus)

recalculatePaidTotal() #

Use this method to recalculate the current submission total amount. This method does not need to be created in your class you can call this method from the base class.

public function recalculatePaidTotal()

updateTransaction($transactionId, $data) #

This method updates transaction data.

/*
*@param $transactionId - Transaction ID 
*@param $data - Transaction data array 
*/

public function updateTransaction($transactionId, $data)

handleSessionRedirectBack() #

This method handles the payment session redirect back.

public function handleSessionRedirectBack($data)

setMetaData() #

Submission metadata is saved using this method.

/*
* @param $name - Meta Name
* @param @value - Meta Value
*/
public function setMetaData($name, $value)

getReturnData() #

This method will return submission data which will be used during the final payment processing.

public function getReturnData()

This method will save metadata for the submission data.

All Together #

Here is an example implementation of the BaseProcessor class.

<?php
 if (!defined('ABSPATH')) {
     exit;
 }

use \FluentFormPro\Payments\PaymentMethods\BaseProcessor;

class MyPaymentProcessor extends BaseProcessor
{
    public $method = 'methodKey';

    protected $form;  //Form Object

    public function init()
    {
        add_action('fluentform/process_payment_' . $this->method, array($this, 'handlePaymentAction'), 10, 4);

        add_action('fluentform/payment_frameless_' . $this->method, array($this, 'handleSessionRedirectBack'));
    }

    /*
    * This is the most important part where you need to proccess & verify the payment using the necesary task
    * using the provided data parameters
    *
    * @param $submissionId  - Form Submission ID
    * @param $submissionData - Form Submission Data
    * @param $form - Form Data
    * @param $methodSettings - Payment Method Settins Data
    */

    public function handlePaymentAction($submissionId, $submissionData, $form, $methodSettings)
    {
        $this->form = $form;
        $this->setSubmissionId($submissionId);

        /* Your code here : Redirect        
        *  payment method API ,then insert the transaction
        */ Transaction data format

        $this->insertTransaction([
            'transaction_type' => 'onetime',
            'payment_total' => $this->getAmountTotal(),
            'status' => 'pending', //paid or pending
            'currency' => $currency ,
            'payment_mode' => $this->getPaymentMode()
        ]);
        $this->handleRedirect($transaction, $submission, $form, $methodSettings);
    }
   
   public function handleRedirect($transaction, $submission, $form, $methodSettings)
    {
        $successUrl = add_query_arg(array(
            'fluentform_payment' => $submission->id,
            'payment_method'     => $this->method,
            'transaction_hash'   => $transaction->transaction_hash,
            'type'               => 'success'
        ), site_url('/'));

        $listener_url = add_query_arg(array(
            'fluentform_payment_api_notify' => 1,
            'payment_method'                => $this->method,
            'submission_id'                 => $submission->id,
            'transaction_hash'              => $transaction->transaction_hash,
        ), home_url('index.php'));

        $paymentArgs = array(
            'amount' => [
                'currency' => $transaction->currency,
                'value' => number_format((float) $transaction->payment_total / 100, 2, '.', '')
            ],
            'redirectUrl' => $successUrl,
            'webhookUrl' => $listener_url,
            'metadata' => json_encode([
                'form_id' => $form->id,
            ]),
        );
        $paymentIntent = (new IPN())->makeApiCall('payments', $paymentArgs, $form->id, 'POST');

        if(is_wp_error($paymentIntent)) {
  
            wp_send_json_success([
                'message' => $paymentIntent->get_error_message()
            ], 423);
        }

        wp_send_json_success([
            'nextAction'   => 'payment',
            'actionName'   => 'normalRedirect',
            'redirect_url' => $paymentIntent['redirectURL'],
            'message'      => 'Redirect Message',
            'result'       => [
                'insert_id' => $submission->id
            ]
        ], 200);
    }


    /*
    * This method is called when you are redirected back to your site.
    *
    * @param $data  - $_GET data of recirect back page
    */

    public function handleSessionRedirectBack($data)
    {
        // Here Verify and proccess your payment redirect back using the payment method API 
        
        $payment = (new MyPaymentAPIDemo())->makeApiCall($data); // Make API call from your payment method 
        $isSuccess = $payment['status'] == 'success';
        $submission = $this->getSubmission();
        $transactionHash = sanitize_text_field($data['transaction_hash']);
        $transaction = $this->getTransaction($transactionHash, 'transaction_hash');
        if($isSuccess) {
             // Handle payment success
             $this->handlePaid($submission, $transaction, $payment)
        } else {
             // Handle payment fail
        }
    }

    public function getPaymentMode()
    {
        return $this->method;
    }
    public function handlePaid($submission, $transaction, $vendorTransaction)
    {
        // Check if actions are fired
        if ($this->getMetaData('is_form_action_fired') == 'yes') {
            return $this->completePaymentSubmission(false);
        }
        $status = 'paid';
        // Let's make the payment as paid
        $updateData = [
            'payment_note' => maybe_serialize($vendorTransaction),
            'charge_id'    => sanitize_text_field($vendorTransaction['id']),
            'payer_email' => $vendorTransaction['email']
        ];

        $this->updateTransaction($transaction->id, $updateData);
        $this->changeSubmissionPaymentStatus($status);
        $this->changeTransactionStatus($transaction->id, $status);
        $this->recalculatePaidTotal();

        $returnData = $this->getReturnData();
        $this->setMetaData('is_form_action_fired', 'yes');

        return $returnData;
    }
}

Final Note #

Please check the existing payment processor files to get a more clear concept of this class and implement your custom payment system. There are other methods also to help with possessing a payment. If you have any questions please feel free to reach out to our facebook community group

What are your Feelings
Share This Article :
  • Facebook
  • X
  • LinkedIn
  • Pinterest
Still stuck? How can we help?

How can we help?

Updated on July 25, 2023
Base Payment Method Class

Powered by BetterDocs

Table of Contents
  • Introduction
  • Methods
    • init()
    • handlePaymentAction()
    • setSubmissionId($submissionId)
    • insertTransaction($data)
    • insertRefund($data)
    • getTransaction($transactionId, $column = 'id')
    • getRefund($refundId, $column = 'id')
    • changeSubmissionPaymentStatus($newStatus)
    • changeTransactionStatus($transactionId, $newStatus)
    • recalculatePaidTotal()
    • updateTransaction($transactionId, $data)
    • handleSessionRedirectBack()
    • setMetaData()
    • getReturnData()
    • All Together
  • Final Note

Fluent Forms is a lightweight, fastest WordPress contact form plugin empowering 500K+ businesses worldwide.

Email Newsletter

fluentform Newsletter Inline
Free tutorials, exclusive contents & more.
Facebook Facebook Group Twitter Instagram Linkedin YouTube WordPress

Resources

  • Account
  • Contact Us
  • Get Support
  • Brand Guideline
  • Changelog
  • Documentation
  • Developers Docs
  • API Docs
  • Report a Security Issue

Addons

  • Signature
  • PDF Generator (Free)
  • Mautic (Free)
  • Mailpoet (Free)

Calculators

  • GKI Calculator
  • Pay Raise Calculator
  • Fuel Cost Calculator
  • All Calculator Forms

Comparison

  • Free vs. Pro
  • Fluent Forms vs. WPForms
  • Fluent Forms vs. Gravity Forms
  • Fluent Forms vs. Ninja Forms
  • Fluent Forms vs. Forminator

Features

  • Conversational Forms
  • Multi-Step Forms
  • Conditional Logic
  • Numeric Calculation
  • Payment
  • Quiz and Survey
  • Form Security
  • Advanced Form Styler
  • Advanced Post Creation
  • Address Autocomplete
  • Form to PDF

OUR PRODUCTS

  • FluentCommunity
  • FluentCRM
  • FluentBooking
  • FluentBoards
  • Fluent Support
  • FluentSMTP
  • Ninja Tables
  • WP Social Ninja
  • Paymattic
  • AzonPress
  • FluentSnippets

Copyright © 2025 Fluent Forms, a brand of WPManageNinja™.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

  • Affiliate
  • Privacy Policy
  • Terms & Conditions
The Free Version of Fluent Forms is Ready! We’ll send it to your email.
Direct Download – CTA- Homepage

By downloading you agree to our terms of use and privacy policy.

  • Pricing
  • Features
  • Templates
  • Integrations
  • Blog
  • Docs
  • Account