Docs & Support

Learn about all the Formidable features and get support from our amazing customer success team.

Developer DocumentationAdd-on HooksStripe
frm_payment_status_complete

frm_payment_status_complete

Heads up!
This article contains PHP code and is intended for developers. We offer this code as a courtesy, but don't provide support for code customizations or 3rd party development.

This hook allows you to do something after a successful payment action. It is triggered for all actions that have a "payment created" event.

Usage

add_action( 'frm_payment_status_complete', 'function_name', 10, 2);

Formidable Forms makes advanced site building simple. Launch forms, directories, dashboards, and custom WordPress apps faster than ever before.

Parameters

  • trigger (string): The status of the payment
  • entry_id (int): The ID of the entry linked to the payment
  • payment (object): The payment information from the Formidable → Payments page
    • Includes: receipt_id, invoice_id, sub_id, item_id, amount, status, action_id, paysys, created_at, begin_date, expire_date, and meta_value

Examples

Trigger an action on complete payment

Use this code example to target a specific payment action ID and send an email if payment is marked as complete.

add_action( 'frm_payment_status_complete', 'frm_trigger_action_payment_complete' );
function frm_trigger_action_payment_complete( $atts ) {
	$target_action_id = 450; // change 450 to your payment action ID
	if ( $atts['payment']->status == 'complete' && $target_action_id === (int) $atts['payment']->action_id ) {
		$to      = get_option( 'admin_email' );
		$subject = 'Payment complete';
		$body    = 'Payment made for $' . $atts['payment']->amount;
		$headers = array( 'Content-Type: text/html; charset=UTF-8' );
		wp_mail( $to, $subject, $body, $headers );
	}
}

Change user role on complete payment

Use this example to change the user role when the payment is completed. With a recurring payment, this hook will be fired each time a payment is completed.

add_action( 'frm_payment_status_complete', 'frm_change_the_role' );
function frm_change_the_role( $atts ) {
  $new_role = 'contributor'; // change contributor to the new user role
  $entry = isset( $atts['entry'] ) ? $atts['entry'] : $atts['payment']->item_id;
  if ( is_numeric( $entry ) ) {
    $entry = FrmEntry::getOne( $entry );
  }

  $user_id = $entry->user_id;
  if ( ! empty( $user_id ) ) {
    $user = get_userdata($user_id);
    if ( ! $user ) {
        return; //don't continue if user doesn't exist
    }

    $updated_user = (array) $user;

    // Get the highest/primary role for this user  
    $user_roles = $user->roles;
    $user_role = array_shift( $user_roles );
    if ( $user_role == 'administrator' ) {
        return; //make sure we don't downgrade any admins
    }

    $updated_user['role'] = $new_role;
	
    wp_update_user( $updated_user );
  }
}

Retrieve a PaymentIntent

Use this code example to retrieve the ID of a previously created PaymentIntent.

add_action( 'frm_payment_status_complete', function ( $atts ) {
    $intent_id = FrmAppHelper::simple_get( 'payment_intent' );
    if ( empty( $intent_id ) ) {
       return;

}
    // You can use $intent_id here
} );
Was this article helpful? *

This article may contain affiliate links. Once in a while, we earn commissions from those links. But we only recommend products we like, with or without commissions.

In this article

    We have a small, but amazing team of dedicated people who are committed to helping you achieve your goals and project requirements.


    Copyright © 2025 Strategy11, LLC. Formidable Forms® is a registered trademark Strategy11, LLC.

    Join 400,000+ using Formidable Forms to create form-focused solutions fast. Get Formidable Forms