0

I have a Gravity Form that on submission sends the data to a third party API. It is connecting with the following code and saving the data through the API. However, I'm now trying to figure out how to only send the Admin notification email if the API response comes back as a fail or anything other than status code 201.

add_action( 'gform_after_submission_1', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {

    $post_url = 'http://thirdpartyapiurl.com';

    $headers = array(
      'Cache-Control' => 'no-cache',
      'session-id' => '123456789101112'
    );

    $body = '{
      "Sales_Doc_Type": "QUOTE", 
      "Sales_Doc_ID": "CGRV",  
      "Sales_Batch": "WEB QUOTES",  
      "Customer_Num": "00",  
      "Customer_Name": "'.rgar( $entry, '1' ).'", 
      "Price_Level": "SHOP 3",  
      "Shipping_Method": "GROUND FREIGHT",  
      "Tax_Schedule": "TBD",  
      "Warehouse_Code": "CG1",  
      "Sales_Person_ID": "HOUSE ACCOUNT",  
      "Sales_Territory": "RV1",  
      "Payment_Terms": "PREPAYMENT",  
      "Created_By": "API USER",
      "Web_Site": "", 
      "UserFieldData": [
        "WEB FORM",
        "CERT FUNDS",
        "'.rgar( $entry, '1' ).'",
        "'.rgar( $entry, '98.1' ).'",
        "'.rgar( $entry, '98.2' ).'",
        "'.rgar( $entry, '98.3' ).'",
        "'.rgar( $entry, '98.4' ).'",
        "'.rgar( $entry, '98.5' ).'",
        "'.rgar( $entry, '98.6' ).'",
        "'.rgar( $entry, '98.7' ).'",
        "'.rgar( $entry, '3' ).'",
        "'.rgar( $entry, '6' ).'",  
        "'.rgar( $entry, '8' ).'",
        "'.rgar( $entry, '9' ).'",
        "'.rgar( $entry, '11.1' ).'",  
        "'.rgar( $entry, '99.1' ).'",
        "'.rgar( $entry, '99.2' ).'",
        "'.rgar( $entry, '99.3' ).'",
        "'.rgar( $entry, '99.4' ).'",
        "'.rgar( $entry, '99.5' ).'",
        "'.rgar( $entry, '99.6' ).'",
        "'.rgar( $entry, '99.7' ).'",
        "'.rgar( $entry, '16' ).'",
        "'.rgar( $entry, '18' ).'",
        "'.rgar( $entry, '19' ).'",
        "'.rgar( $entry, '20' ).'",
        "'.rgar( $entry, '22' ).'",
        "'.rgar( $entry, '90' ).'",
        "'.rgar( $entry, '24' ).'",
        "'.rgar( $entry, '25' ).'",
        "'.rgar( $entry, '94' ).'",
        "'.rgar( $entry, '27' ).'",
        "'.rgar( $entry, '28' ).'",
        "'.rgar( $entry, '93' ).'",
        "'.rgar( $entry, '95' ).'",
        "'.rgar( $entry, '51' ).'",
        "'.rgar( $entry, '115' ).'",
        "'.rgar( $entry, '77' ).'",
        "'.rgar( $entry, '76' ).'",
        "'.rgar( $entry, '49' ).'",  
        "",  
        "'.rgar( $entry, '114' ).'",  
        "'.rgar( $entry, '50' ).'",
        "'.rgar( $entry, '69' ).'",
        "'.rgar( $entry, '70' ).'",
        "'.rgar( $entry, '73' ).'",
        "'.rgar( $entry, '55' ).'",
        "'.rgar( $entry, '56' ).'",
        "'.rgar( $entry, '46' ).'",
        "'.rgar( $entry, '48' ).'",
        "'.rgar( $entry, '57' ).'",
        "'.rgar( $entry, '58' ).'",
        "'.rgar( $entry, '62' ).'",  
        "'.rgar( $entry, '64' ).'",
        "'.rgar( $entry, '65' ).'",
        "'.rgar( $entry, '66' ).'",
        "'.rgar( $entry, '80' ).'",
        "'.base64_encode(rgar( $entry, '82' )).'",
        "'.base64_encode(rgar( $entry, '85' )).'",
        "'.base64_encode(rgar( $entry, '86' )).'",
        "'.base64_encode(rgar( $entry, '89' )).'",
        "'.base64_encode(rgar( $entry, '88' )).'",
        "'.base64_encode(rgar( $entry, '87' )).'",
        "'.rgar( $entry, '91' ).'",  
        ""
      ],
      "UserFieldNames": [
        "CGRV_Sales_Originating_Source",
        "CGRV_Payment_Type",
        "CGRV_QTE_Contact",
        "JAJ_Ship_Address_Line_1",
        "JAJ_Ship_Address_Line_2",
        "JAJ_Ship_Address_Line_3",
        "JAJ_Ship_City",
        "JAJ_Ship_State",
        "JAJ_Ship_Zip",
        "JAJ_Ship_Country",
        "JAJ_Ship_Phone_1",
        "JAJ_Ship_Email_To",
        "JAJ_Ship_Contact_Person",
        "JAJ_Customer_Website",
        "JAJ_Residential",
        "JAJ_Bill_Address_Line_1",
        "JAJ_Bill_Address_Line_2",
        "JAJ_Bill_Address_Line_3",
        "JAJ_Bill_City",
        "JAJ_Bill_State",
        "JAJ_Bill_Zip",
        "JAJ_Bill_Country",
        "JAJ_Bill_Phone_1",
        "JAJ_Bill_Fax",
        "JAJ_Bill_Email_To",
        "JAJ_Bill_Contact_Person",
        "CGRV_QTE_Application_Inquiry",
        "CGRV_QTE_Year",
        "CGRV_QTE_Make",
        "CGRV_QTE_Model",
        "CGRV_QTE_Part_Number",
        "CGRV_QTE_Qty_Needed",
        "CGRV_QTE_SideNeeded",
        "JAJ_VIN",
        "CGRV_QTE_WshldNums",
        "CGRV_QTE_Wshld_Mfg",
        "CGRV_QTE_DOT_Number",
        "CGRV_QTE_Height",
        "CGRV_QTE_Width",
        "CGRV_QTE_Ceramicv1",
        "",
        "CGRV_QTE_Color",
        "CGRV_QTE_Installation",
        "CGRV_QTE_SG_Window_Side",
        "CGRV_QTE_SG_Window_Loc",
        "CGRV_QTE_SG_Quote_Needed_For",
        "CGRV_QTE_SG_Frame_Color",
        "CGRV_QTE_SG_Glass_Color",
        "CGRV_QTE_SG_Frame_Height",
        "CGRV_QTE_SG_Frame_Width",
        "CGRV_QTE_SG_Glass_Height",
        "CGRV_QTE_SG_Glass_Width",
        "CGRV_QTE_SG_Emergency_Exit",
        "CGRV_QTE_SG_Window_Movement",
        "CGRV_QTE_SG_Glass_Pane",
        "CGRV_QTE_SG_Frame_Corners",
        "CGRV_QTE_SG_Additional_Info",
        "JAJ_File_Attachment_01",
        "JAJ_File_Attachment_02",
        "JAJ_File_Attachment_03",
        "JAJ_File_Attachment_04",
        "JAJ_File_Attachment_05",
        "JAJ_File_Attachment_06",
        "JAJ_Referred_By",
        "JAJ_Referred_By_Other_Defined"
      ]
    }';
    GFCommon::log_debug( 'gform_after_submission: body => ' . print_r( $body, true ) );
    $request = new WP_Http();
    $response = $request->post( $post_url, array( 'headers' => $headers, 'body' => $body ) );
    GFCommon::log_debug( 'gform_after_submission: response => ' . print_r( $response, true ) );
}

I also have a Gravity Form Addon plugin that I've been working on that has an option in the Notification area to select the "Third Party" api and control the email notification instead of Gravity Forms sending it automatically. I just can't figure out how to control the admin notification email based on the response from the API.

GFForms::include_addon_framework();

class GFApiNotificationAddOn extends GFAddOn {

    protected $_version = GF_API_NOTIFICATION_ADDON_VERSION;
    protected $_min_gravityforms_version = '1.9';
    protected $_slug = 'apinotificationaddon';
    protected $_path = 'apinotificationaddon/apinotificationaddon.php';
    protected $_full_path = __FILE__;
    protected $_title = 'Gravity Forms Admin Notification Add-On';
    protected $_short_title = 'Admin Notification Add-On';

    /**
     * @var object $_instance If available, contains an instance of this class.
     */
    private static $_instance = null;

    /**
     * Returns an instance of this class, and stores it in the $_instance property.
     *
     * @return object $_instance An instance of this class.
     */
    public static function get_instance() {
        if ( self::$_instance == null ) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }

    /**
     * Plugin starting point. Handles hooks, loading of language files and PayPal delayed payment support.
     */
    public function init() {

        parent::init();

        add_filter( 'gform_notification_services', array( $this, 'add_notification_service' ) );
        add_filter( 'gform_pre_send_email', array( $this, 'api_fail_send_email' ), 19, 3 );

    }

    /**
     * Add the new notification service.
     *
     * @param array $services The notification services.
     *
     * @return array
     */
    public function add_notification_service( $services ) {


        $services['api_fail_email'] = array(
            'label' => esc_html__( 'Third Party API Notice', 'apinotificationaddon' ),
            'image' => $this->get_base_url() . '/images/icon.png',
        );

        return $services;
    }

    public function api_fail_send_email( $email, $message_format, $notification ) {
        global $response;

    // If the notification is not assigned to this service, return the email.
        if ( rgar( $notification, 'service' ) !== 'api_fail_email' ) {
            return $email;
        }

        // If the email has already been aborted, return the email.
        if ( $email['abort_email'] ) {
            $this->log_debug( __METHOD__ . '(): Not sending email because the notification has already been aborted by another Add-On.' );

            return $email;
        }


        $result = $this->send_email( $email, $message_format, $notification );


        if ( $result ) {
            // The service successfully sent the email; prevent WordPress and other add-ons from also sending the email.
            $email['abort_email'] = true;
        }

        return $email;
    }

    /**
     * Send the email via the new service.
     *
     * @param array $email The email properties.
     * @param string $message_format The message format, html or text.
     * @param array $notification The Notification object which produced the current email.
     *
     * @return bool
     */
    public function send_email( $email, $message_format, $notification ) {

        // pass the email to the service

        return $result;
    }

    public function init_admin() {
        parent::init_admin();

        add_filter( 'gform_tooltips', array( $this, 'tooltips' ) );
        add_action( 'gform_field_appearance_settings', array( $this, 'field_appearance_settings' ), 10, 2 );
    }


    // # SCRIPTS & STYLES -----------------------------------------------------------------------------------------------

    /**
     * Include my_script.js when the form contains a 'simple' type field.
     *
     * @return array
     */
    public function scripts() {
        $scripts = array(
            array(
                'handle'  => 'my_script_js',
                'src'     => $this->get_base_url() . '/js/my_script.js',
                'version' => $this->_version,
                'deps'    => array( 'jquery' ),
                'enqueue' => array(
                    array( 'field_types' => array( 'simple' ) ),
                ),
            ),

        );

        return array_merge( parent::scripts(), $scripts );
    }

    /**
     * Include my_styles.css when the form contains a 'simple' type field.
     *
     * @return array
     */
    public function styles() {
        $styles = array(
            array(
                'handle'  => 'my_styles_css',
                'src'     => $this->get_base_url() . '/css/my_styles.css',
                'version' => $this->_version,
                'enqueue' => array(
                    array( 'field_types' => array( 'simple' ) )
                )
            )
        );

        return array_merge( parent::styles(), $styles );
    }

}

I can use the following to get the response code after the submission

$status = wp_remote_retrieve_response_code( $response );
0

I think gform_after_submission is the wrong action to use in this case. Have you looked at gform_pre_send_email? It has an abort_email parameter, which might be useful.

0

I have the answer to this for those that may be looking for this as well.

add_action( 'gform_after_submission_1', 'post_to_third_party', 10, 2 );
function post_to_third_party( $entry, $form ) {

    $post_url = 'http://thirdpartyapiurl.com';

    $headers = array(
      'Cache-Control' => 'no-cache',
      'session-id' => '123456789101112'
    );

    $body = '{
      "Sales_Doc_Type": "QUOTE", 
      "Sales_Doc_ID": "CGRV",  
      "Sales_Batch": "WEB QUOTES",  
      "Customer_Num": "00",  
      "Customer_Name": "'.rgar( $entry, '1' ).'", 
      "Price_Level": "SHOP 3",  
      "Shipping_Method": "GROUND FREIGHT",  
      "Tax_Schedule": "TBD",  
      "Warehouse_Code": "CG1",  
      "Sales_Person_ID": "HOUSE ACCOUNT",  
      "Sales_Territory": "RV1",  
      "Payment_Terms": "PREPAYMENT",  
      "Created_By": "API USER",
      "Web_Site": "", 
      "UserFieldData": [
        "WEB FORM",
        "CERT FUNDS",
        "'.rgar( $entry, '1' ).'",
        "'.rgar( $entry, '98.1' ).'",
        "'.rgar( $entry, '98.2' ).'",
        "'.rgar( $entry, '98.3' ).'",
        "'.rgar( $entry, '98.4' ).'",
        "'.rgar( $entry, '98.5' ).'",
        "'.rgar( $entry, '98.6' ).'",
        "'.rgar( $entry, '98.7' ).'",
        "'.rgar( $entry, '3' ).'",
        "'.rgar( $entry, '6' ).'",  
        "'.rgar( $entry, '8' ).'",
        "'.rgar( $entry, '9' ).'",
        "'.rgar( $entry, '11.1' ).'",  
        "'.rgar( $entry, '99.1' ).'",
        "'.rgar( $entry, '99.2' ).'",
        "'.rgar( $entry, '99.3' ).'",
        "'.rgar( $entry, '99.4' ).'",
        "'.rgar( $entry, '99.5' ).'",
        "'.rgar( $entry, '99.6' ).'",
        "'.rgar( $entry, '99.7' ).'",
        "'.rgar( $entry, '16' ).'",
        "'.rgar( $entry, '18' ).'",
        "'.rgar( $entry, '19' ).'",
        "'.rgar( $entry, '20' ).'",
        "'.rgar( $entry, '22' ).'",
        "'.rgar( $entry, '90' ).'",
        "'.rgar( $entry, '24' ).'",
        "'.rgar( $entry, '25' ).'",
        "'.rgar( $entry, '94' ).'",
        "'.rgar( $entry, '27' ).'",
        "'.rgar( $entry, '28' ).'",
        "'.rgar( $entry, '93' ).'",
        "'.rgar( $entry, '95' ).'",
        "'.rgar( $entry, '51' ).'",
        "'.rgar( $entry, '115' ).'",
        "'.rgar( $entry, '77' ).'",
        "'.rgar( $entry, '76' ).'",
        "'.rgar( $entry, '49' ).'",  
        "",  
        "'.rgar( $entry, '114' ).'",  
        "'.rgar( $entry, '50' ).'",
        "'.rgar( $entry, '69' ).'",
        "'.rgar( $entry, '70' ).'",
        "'.rgar( $entry, '73' ).'",
        "'.rgar( $entry, '55' ).'",
        "'.rgar( $entry, '56' ).'",
        "'.rgar( $entry, '46' ).'",
        "'.rgar( $entry, '48' ).'",
        "'.rgar( $entry, '57' ).'",
        "'.rgar( $entry, '58' ).'",
        "'.rgar( $entry, '62' ).'",  
        "'.rgar( $entry, '64' ).'",
        "'.rgar( $entry, '65' ).'",
        "'.rgar( $entry, '66' ).'",
        "'.rgar( $entry, '80' ).'",
        "'.base64_encode(rgar( $entry, '82' )).'",
        "'.base64_encode(rgar( $entry, '85' )).'",
        "'.base64_encode(rgar( $entry, '86' )).'",
        "'.base64_encode(rgar( $entry, '89' )).'",
        "'.base64_encode(rgar( $entry, '88' )).'",
        "'.base64_encode(rgar( $entry, '87' )).'",
        "'.rgar( $entry, '91' ).'",  
        ""
      ],
      "UserFieldNames": [
        "CGRV_Sales_Originating_Source",
        "CGRV_Payment_Type",
        "CGRV_QTE_Contact",
        "JAJ_Ship_Address_Line_1",
        "JAJ_Ship_Address_Line_2",
        "JAJ_Ship_Address_Line_3",
        "JAJ_Ship_City",
        "JAJ_Ship_State",
        "JAJ_Ship_Zip",
        "JAJ_Ship_Country",
        "JAJ_Ship_Phone_1",
        "JAJ_Ship_Email_To",
        "JAJ_Ship_Contact_Person",
        "JAJ_Customer_Website",
        "JAJ_Residential",
        "JAJ_Bill_Address_Line_1",
        "JAJ_Bill_Address_Line_2",
        "JAJ_Bill_Address_Line_3",
        "JAJ_Bill_City",
        "JAJ_Bill_State",
        "JAJ_Bill_Zip",
        "JAJ_Bill_Country",
        "JAJ_Bill_Phone_1",
        "JAJ_Bill_Fax",
        "JAJ_Bill_Email_To",
        "JAJ_Bill_Contact_Person",
        "CGRV_QTE_Application_Inquiry",
        "CGRV_QTE_Year",
        "CGRV_QTE_Make",
        "CGRV_QTE_Model",
        "CGRV_QTE_Part_Number",
        "CGRV_QTE_Qty_Needed",
        "CGRV_QTE_SideNeeded",
        "JAJ_VIN",
        "CGRV_QTE_WshldNums",
        "CGRV_QTE_Wshld_Mfg",
        "CGRV_QTE_DOT_Number",
        "CGRV_QTE_Height",
        "CGRV_QTE_Width",
        "CGRV_QTE_Ceramicv1",
        "",
        "CGRV_QTE_Color",
        "CGRV_QTE_Installation",
        "CGRV_QTE_SG_Window_Side",
        "CGRV_QTE_SG_Window_Loc",
        "CGRV_QTE_SG_Quote_Needed_For",
        "CGRV_QTE_SG_Frame_Color",
        "CGRV_QTE_SG_Glass_Color",
        "CGRV_QTE_SG_Frame_Height",
        "CGRV_QTE_SG_Frame_Width",
        "CGRV_QTE_SG_Glass_Height",
        "CGRV_QTE_SG_Glass_Width",
        "CGRV_QTE_SG_Emergency_Exit",
        "CGRV_QTE_SG_Window_Movement",
        "CGRV_QTE_SG_Glass_Pane",
        "CGRV_QTE_SG_Frame_Corners",
        "CGRV_QTE_SG_Additional_Info",
        "JAJ_File_Attachment_01",
        "JAJ_File_Attachment_02",
        "JAJ_File_Attachment_03",
        "JAJ_File_Attachment_04",
        "JAJ_File_Attachment_05",
        "JAJ_File_Attachment_06",
        "JAJ_Referred_By",
        "JAJ_Referred_By_Other_Defined"
      ]
    }';
    GFCommon::log_debug( 'gform_after_submission: body => ' . print_r( $body, true ) );
    $request = new WP_Http();
    $response = $request->post( $post_url, array( 'headers' => $headers, 'body' => $body ) );
    GFCommon::log_debug( 'gform_after_submission: response => ' . print_r( $response, true ) );

    $code = wp_remote_retrieve_response_code($response);
    $apiresults = wp_remote_retrieve_body($response);

    if($code != 201)
        GFAPI::send_notifications( $form, $entry, 'api_connection_fail', $data );

    $data = array('webhook' => array(
    'status' => $code,
    'results' => print_r( $response, true )
    ));

    GFAPI::send_notifications( $form, $entry, 'api_connection_fail', $data );
}

add_filter( 'gform_notification_events', function( $notification_events ) {
    $notification_events['api_connection_fail'] = 'API Connection Failed';
    return $notification_events;
} );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.