Woocommerce Software License Manager

Description

Seamless integration between Woocommerce and Software License Manager Plugin.

Features

  • Automatically creates license keys for each sale with WC
  • Licensing is optional and can be activated/deactivated individually
  • Send generated license keys to your customers within your existing email notifications

Sample code

<?php
/*
  Plugin Name: License Checker
  Version: v1.0
  Plugin URI: http://wp-master.ir
  Author: Omid Shamloo
  Author URI: http://wp-master.ir
  Description: Sample plugin to show you how you can interact with the software license manager API from your WordPress plugin or theme
 */


// This is the secret key for API authentication. You configured it in the settings menu of the license manager plugin.
define('YOUR_SPECIAL_SECRET_KEY', 'YOUR_SPECIAL_SECRET_KEY'); //Rename this constant name so it is specific to your plugin or theme.

// This is the URL where API query request will be sent to. This should be the URL of the site where you have installed the main license manager plugin. Get this value from the integration help page.
define('YOUR_LICENSE_SERVER_URL', 'http://wp-master.ir'); //Rename this constant name so it is specific to your plugin or theme.

// This is a value that will be recorded in the license manager data so you can identify licenses for this item/product.
define('YOUR_ITEM_REFERENCE', 'YOUR_ITEM_REFERENCE'); //Rename this constant name so it is specific to your plugin or theme.

add_action('admin_menu', 'slm_sample_license_menu');

function slm_sample_license_menu() {
    add_options_page('Sample License Activation Menu', 'Sample License', 'manage_options', 'youlice_classesence', 'sample_license_management_page');
}

function sample_license_management_page() {
    echo '<div class="wrap">';
    echo '<h2>Sample License Management</h2>';

    /*** License activate button was clicked ***/
    if (isset($_REQUEST['activate_license'])) {
        $license_key = $_REQUEST['sample_license_key'];
        // Send query to the license manager server
        $lic    = new youlice_class($license_key , YOUR_LICENSE_SERVER_URL , YOUR_SPECIAL_SECRET_KEY );
        if($lic->active()){
            echo 'You license Activated successfuly';
        }else{
            echo $lic->err;
        }

    }

    $lic = new youlice_class($license_key , YOUR_LICENSE_SERVER_URL , YOUR_SPECIAL_SECRET_KEY );
    if($lic->is_licensed()){
        echo 'Thank You Phurchasing!';
    }else{
        ?>
        <form action="" method="post">
            <table class="form-table">
                <tr>
                    <th style="width:100px;"><label for="sample_license_key">License Key</label></th>
                    <td ><input class="regular-text" type="text" id="sample_license_key" name="sample_license_key"  value="<?php echo get_option('sample_license_key'); ?>" ></td>
                </tr>
            </table>
            <p class="submit">
                <input type="submit" name="activate_license" value="Activate" class="button-primary" />
            </p>
        </form>
        <?php
    }


    echo '</div>';
}


class youlice_class{
    public $lic;
    public $server;
    public $api_key;
    private $wp_option  = 'product_1450';
    private $product_id = 'My_product_name_OR_ID';
    public $err;
    public function __construct($lic=false , $server , $api_key){
        if($this->is_licensed())
            $this->lic      =   get_option($this->wp_option);
        else
            $this->lic      =   $lic;

        $this->server   =   $server;
        $this->api_key  =   $api_key;
    }
    /**
     * check for current product if licensed
     * @return boolean 
     */
    public function is_licensed(){
        $lic = get_option($this->wp_option);
        if(!empty( $lic ))
            return true;
        return false;
    }

    /**
     * send query to server and try to active lisence
     * @return boolean
     */
    public function active(){
        $url = YOUR_LICENSE_SERVER_URL . '/?secret_key=' . YOUR_SPECIAL_SECRET_KEY . '&slm_action=slm_activate&license_key=' . $this->lic . '&registered_domain=' . get_bloginfo('siteurl').'&item_reference='.$this->product_id;
        $response = wp_remote_get($url, array('timeout' => 20, 'sslverify' => false));

        if(is_array($response)){
            $json = $response['body']; // use the content
            $json = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', utf8_encode($json));
            $license_data = json_decode($json);
        }
        if($license_data->result == 'success'){
            update_option( $this->wp_option, $this->lic );
            return true;
        }else{
            $this->err = $license_data->message;
            return false;
        }
    }

    /**
     * send query to server and try to deactive lisence
     * @return boolean
     */
    public function deactive(){

    }

}

Please note
The license validation part for your distributed plugins and themes is not part of this plugin. Therefore please take a look into the Software License Manager documentation.

incompatibility issue with iThemes Security
If you have installed “iThemes Security” , so uncheck Long URL Strings where Software License Manager is installed

Credits

Translates

Configuration

The plugin is really simple and well structured so you don’t have to prepare a lot in order to get it working.

  1. After the successful installation you will find a prepared options page here: “WooCommerce” > “Settings” > “Products” > “License Manager”
  2. Enter your Software License Manager API credentials
  3. Go to your Products and activate licensing where it’s required

Screenshots

  • Configuration screen
  • Activating licensing for a download
  • Output the generated license keys within your emails

Installation

The installation and configuration of the plugin is as simple as it can be.

Using The WordPress Dashboard

  1. Navigate to the ‘Add New’ in the plugins dashboard
  2. Search for ‘wc software license manager’
  3. Click ‘Install Now’
  4. Activate the plugin on the Plugin dashboard

Uploading in WordPress Dashboard

  1. Navigate to the ‘Add New’ in the plugins dashboard
  2. Navigate to the ‘Upload’ area
  3. Select plugin zip file from your computer
  4. Click ‘Install Now’
  5. Activate the plugin in the Plugin dashboard

FAQ

Is it necessary to install both plugins on the same WordPress installation?

No! That’s one of the biggest benefits of this integration. Woocommerce and the Software License Manager can be installed on different sites.

Can I use this plugin to validate the generated license keys?

No! The license validation part for your distributed plugins and themes is not part of this plugin. Therefore please take a look into the Software License Manager documentation.

Reviews

Not creating new licenses on new orders

Great Plugin. Hopefully we can get the plugin to work flawless with the latest woocommerce release.

Issues:

  • failed to create license on new orders.
  • failed to send emails on new orders

Here is my error log:

01-Jul-2017 14:51:39 UTC] post was called incorrectly. Order properties should not be accessed directly. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::do_wc_ajax, do_action('wc_ajax_checkout'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::checkout, WC_Checkout->process_checkout, WC_Checkout->process_order_without_payment, WC_Order->payment_complete, WC_Order->save, WC_Order->status_transition, do_action('woocommerce_order_status_completed'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails::send_transactional_email, do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Email_Customer_Completed_Order->trigger, WC_Email->get_content, WC_Email_Customer_Completed_Order->get_content_html, wc_get_template_html, wc_get_template, include('/addons/woocommerce/templates/emails/customer-completed-order.php'), do_action('woocommerce_email_order_details'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails->order_details, wc_get_template, include('/addons/woocommerce/templates/emails/email-order-details.php'), do_action('woocommerce_email_before_order_table'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc_slm_email_content, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong. This message was added in version 3.0.
[01-Jul-2017 14:51:39 UTC] post was called incorrectly. Order properties should not be accessed directly. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::do_wc_ajax, do_action('wc_ajax_checkout'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::checkout, WC_Checkout->process_checkout, WC_Checkout->process_order_without_payment, WC_Order->payment_complete, WC_Order->save, WC_Order->status_transition, do_action('woocommerce_order_status_completed'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails::send_transactional_email, do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Email_Customer_Completed_Order->trigger, WC_Email->get_content, WC_Email_Customer_Completed_Order->get_content_html, wc_get_template_html, wc_get_template, include('/addons/woocommerce/templates/emails/customer-completed-order.php'), do_action('woocommerce_email_order_details'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails->order_details, wc_get_template, include('/addons/woocommerce/templates/emails/email-order-details.php'), do_action('woocommerce_email_before_order_table'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc_slm_email_content, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong. This message was added in version 3.0.
[01-Jul-2017 14:51:40 UTC] post was called incorrectly. Order properties should not be accessed directly. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::do_wc_ajax, do_action('wc_ajax_checkout'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::checkout, WC_Checkout->process_checkout, WC_Checkout->process_order_without_payment, WC_Order->payment_complete, WC_Order->save, WC_Order->status_transition, do_action('woocommerce_order_status_pending_to_completed'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails::send_transactional_email, do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Email_New_Order->trigger, WC_Email->get_content, WC_Email_New_Order->get_content_html, wc_get_template_html, wc_get_template, include('/addons/woocommerce/templates/emails/admin-new-order.php'), do_action('woocommerce_email_order_details'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails->order_details, wc_get_template, include('/addons/woocommerce/templates/emails/email-order-details.php'), do_action('woocommerce_email_before_order_table'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc_slm_email_content, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong. This message was added in version 3.0.
[01-Jul-2017 14:51:40 UTC] post was called incorrectly. Order properties should not be accessed directly. Backtrace: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::do_wc_ajax, do_action('wc_ajax_checkout'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_AJAX::checkout, WC_Checkout->process_checkout, WC_Checkout->process_order_without_payment, WC_Order->payment_complete, WC_Order->save, WC_Order->status_transition, do_action('woocommerce_order_status_pending_to_completed'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails::send_transactional_email, do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Email_New_Order->trigger, WC_Email->get_content, WC_Email_New_Order->get_content_html, wc_get_template_html, wc_get_template, include('/addons/woocommerce/templates/emails/admin-new-order.php'), do_action('woocommerce_email_order_details'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, WC_Emails->order_details, wc_get_template, include('/addons/woocommerce/templates/emails/email-order-details.php'), do_action('woocommerce_email_before_order_table'), WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, wc_slm_email_content, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong. This message was added in version 3.0.

Variable Product Support

hi guys, i’ve been testing your plugin for now it what i see is very interresting but i have a question, do you have support for variable downloads ? because if i create a woocommerce product variation i dont see the licencing options?

Useful integration plugin

You and the guy from SLM allowed me to do in a few minutes what I found as a road stopper at Shopify. Well done, guys, and kuddos for your work.

I’ve been a bit confused what the two setting options mean, but I suppose I got lucky applying the best guess and …it worked! To see actual license keys automatically generated in my customer orders was trully great.

Please provide some more documentation about your settings and all will be great.

Read all 8 reviews

Contributors & Developers

“Woocommerce Software License Manager” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

Version 1.0.7 (20th July 2016)

  • Add Expire Date to Email and Phurchase Details(Thanks to Albert van der Ploeg)
  • txn_id change from $product_id to $order_id

Version 1.0.6 (8th November 2015)

  • small fix

Version 1.0.5 (7th November 2015)

  • has_downloadable_item and $product->has_file() removed from code,so downloadable tick is enough for working

Version 1.0.4 (1th November 2015)

  • small fix
  • spanish translate added

Version 1.0.3 (6th October 2015)

  • license details get from billing form now
  • license renewal can be set in product page
  • license details added to user account page

Version 1.0.1 (5th October 2015)

  • sample code was added
  • small fix