Jetpack::create_nonce PHP Method

create_nonce() public static method

Stores two secrets and a timestamp so WordPress.com can make a request back and verify an action Does some extra verification so urls (such as those to public-api, register, etc) can't just be crafted $name must be a registered option name.
public static create_nonce ( $name )
    public static function create_nonce($name)
    {
        $secret = wp_generate_password(32, false) . ':' . wp_generate_password(32, false) . ':' . (time() + 600);
        Jetpack_Options::update_option($name, $secret);
        @(list($secret_1, $secret_2, $eol) = explode(':', Jetpack_Options::get_option($name)));
        if (empty($secret_1) || empty($secret_2) || $eol < time()) {
            return new Jetpack_Error('missing_secrets');
        }
        return array('secret_1' => $secret_1, 'secret_2' => $secret_2, 'eol' => $eol);
    }

Usage Example

 function admin_page_load()
 {
     if (isset($_GET['action'])) {
         if (isset($_GET['service'])) {
             $service_name = $_GET['service'];
         }
         switch ($_GET['action']) {
             case 'error':
                 add_action('pre_admin_screen_sharing', array($this, 'display_connection_error'), 9);
                 break;
             case 'request':
                 check_admin_referer('keyring-request', 'kr_nonce');
                 check_admin_referer("keyring-request-{$service_name}", 'nonce');
                 $verification = Jetpack::create_nonce('publicize');
                 $stats_options = get_option('stats_options');
                 $wpcom_blog_id = Jetpack::get_option('id');
                 $wpcom_blog_id = !empty($wpcom_blog_id) ? $wpcom_blog_id : $stats_options['blog_id'];
                 $user = wp_get_current_user();
                 $redirect = $this->api_url($service_name, urlencode_deep(array('action' => 'request', 'redirect_uri' => add_query_arg(array('action' => 'done'), menu_page_url('sharing', false)), 'for' => 'publicize', 'siteurl' => site_url(), 'state' => $user->ID, 'blog_id' => $wpcom_blog_id, 'secret_1' => $verification['secret_1'], 'secret_2' => $verification['secret_2'], 'eol' => $verification['eol'])));
                 wp_redirect($redirect);
                 exit;
                 break;
             case 'completed':
                 // Jetpack blog requests Publicize Connections via new XML-RPC method
                 Jetpack::load_xml_rpc_client();
                 $xml = new Jetpack_IXR_Client();
                 $xml->query('jetpack.fetchPublicizeConnections');
                 if (!$xml->isError()) {
                     $response = $xml->getResponse();
                     Jetpack::update_option('publicize_connections', $response);
                 }
                 break;
             case 'delete':
                 $id = $_GET['id'];
                 check_admin_referer('keyring-request', 'kr_nonce');
                 check_admin_referer("keyring-request-{$service_name}", 'nonce');
                 Jetpack::load_xml_rpc_client();
                 $xml = new Jetpack_IXR_Client();
                 $xml->query('jetpack.deletePublicizeConnection', $id);
                 if (!$xml->isError()) {
                     $response = $xml->getResponse();
                     Jetpack::update_option('publicize_connections', $response);
                 }
                 add_action('admin_notices', array($this, 'display_disconnected'));
                 break;
         }
     }
     // Errors encountered on WordPress.com's end are passed back as a code
     if (isset($_GET['action']) && 'error' == $_GET['action']) {
         // Load Jetpack's styles to handle the box
         Jetpack::init()->admin_styles();
     }
 }
Jetpack