{eac}SoftwareRegistry Distribution SDK

{eac}SoftwareRegistry Distribution SDK

Wordpress plugin

Install on Wordpress

App Details

{eac}SoftwareRegistry Distribution SDK is an extension plugin to {eac}SoftwareRegistry Software Registration Server.

The Software Registry Distribution SDK is used to generate a custom PHP package that you can include in your software project to register your product with your registration server and manage that registration.

A custom version of this “readme.txt” file is included in the generated SDK package.

The SDK provides most of the PHP code you will need to implement the Application Program Interface with your Software Registration Server.

Included with the Software Registration SDK package…

  • (your_productid)_registration.(wordpress_or_filebased).trait.php
  • (your_productid)_registration.includes.php
  • (your_productid)_registration.interface.php
  • (your_productid)_registration.interface.trait.php
  • (your_productid)_registration.refresh.php

Software Registry Implementation

After extracting the (your_productid)_registration.zip file, move the (your_productid)_registration folder to your project.

In your project or class file, include (your_productid)_registration/(your_productid)_registration.includes.php to load the required interface and traits.

Your class file must then:

  • implement \(your_namespace)\Interfaces\(your_productid)_registration
  • use \(your_namespace)\Traits\(your_productid)_registration_(wordpress_or_filebased)

Example:

include "(your_productid)_registration/(your_productid)_registration.includes.php"; class <your_classname> implements \(your_namespace)\Interfaces\(your_productid)_registration { use \(your_namespace)\Traits\(your_productid)_registration_(wordpress_or_filebased); ... } 

(your_productid)_registration.interface.php will have your product and registration server API constants.

const SOFTWARE_REGISTRY_PRODUCTID = '{your_software_registry_productid}'; const SOFTWARE_REGISTRY_HOST_URL = '{your_software_registry_host_url}'; const SOFTWARE_REGISTRY_CREATE_KEY = '{your_software_registry_create_key}'; const SOFTWARE_REGISTRY_UPDATE_KEY = '{your_software_registry_update_key}'; const SOFTWARE_REGISTRY_READ_KEY = '{your_software_registry_read_key}'; 

Using The API

API Parameters

API parameters are passed as an array:

$apiParams = [ 'registry_key' => 'unique ID', // * registration key (assigned by registry server) 'registry_name' => 'Firstname Lastname', // registrant's full name 'registry_email' => '[email protected]', // * registrant's email address 'registry_company' => 'Comapny/Organization Name', // registrant's company name 'registry_address' => 'Street\n City St Zip', // registrant's full address (textarea) 'registry_phone' => 'nnnnnnnnnn', // registrant's phone 'registry_product' => 'productId', // * your product name/id ((your_productid)) 'registry_title' => 'Product Title', // your product title 'registry_description' => 'Product Description', // your product description 'registry_version' => 'M.m.p', // your product version 'registry_license' => 'Lx', // 'L1'(Lite), 'L2'(Basic), 'L3'(Standard), 'L4'(Professional), 'L5'(Enterprise), 'LD'(Developer) 'registry_count' => int, // Number of licenses (users/seats/devices) 'registry_variations' => array('name'=>'value',...), // array of name/value pairs 'registry_options' => array('value',...), // array of registry options 'registry_domains' => array('domain',...), // array of valid/registered domains 'registry_sites' => array('url',...), // array of valid/registered sites/uris 'registry_transid' => '', // external transaction id 'registry_timezone' => '', // standard timezone string (client timezone) ]; 

* Required values (registry_key not required when creating a new registration).

If setting registry_transid, the recommended (not required) format is {id}|{source}|{suffix} where {id} is the transaction id, {source} indicates the source of the transaction, and {suffix} may be used as needed.

Any additional fields passed wil be saved as custom fields.

Although typically set by the Software Registry server, with the proper option setting, the API may override:

[ 'registry_status' => 'status', // 'pending', 'trial', 'active', 'inactive', 'expired', 'terminated' 'registry_effective' => 'YYYY-MM-DD', // Effective date (Y-m-d) 'registry_expires' => 'YYYY-MM-DD', // Expiration date (Y-m-d) or term ('30 days', '1 year',... added to effective date) ]; 

Payment information may be posted with:

[ 'registry_paydue' => float, // amount to be paid/billed, 'registry_payamount' => float, // amount paid, 'registry_paydate' => 'YYYY-MM-DD', // date paid 'registry_payid' => 'payment id' // transaction id/check #, etc. 'registry_nextpay' => 'YYYY-MM-DD', // next payment/renewal date ]; 

API Requests

Create/request a new registration…

$response = $this->registryApiRequest('create',$apiParams); 

Activate an existing registration…

$response = $this->registryApiRequest('activate',['registry_key' => '<registrationKeyValue>']); 

Activate and Update an existing registration…

$response = $this->registryApiRequest('activate',$apiParams); 

Deactivate an existing registration…

$response = $this->registryApiRequest('deactivate',['registry_key' => '<registrationKeyValue>']); 

Verify or Refresh an existing registration…

$response = $this->registryApiRequest('verify',['registry_key' => '<registrationKeyValue>']); $response = $this->registryApiRequest('refresh',$apiParams); 

Revise an existing registration…

$response = $this->registryApiRequest('revise',$apiParams); 

API Response

The API response is a standard object. status->code is an http status, 200 indicating success.

status -> ( 'code' -> 200, // HTTP status code 'message' -> '(action) ok' // (action) = 'create', 'activate', 'deactivate', 'verify', 'revise' ), registration -> ( 'registry_key' -> string // UUID, 'registry_status' -> string, // 'pending', 'trial', 'active', 'inactive', 'expired', 'terminated', 'invalid' 'registry_effective' -> string, // DD-MMM-YYYY effective date 'registry_expires' -> string, // DD-MMM-YYYY expiration date 'registry_name' -> string, 'registry_email' -> string, 'registry_company' -> string, 'registry_address' -> string, 'registry_phone' -> string, 'registry_product' -> string, 'registry_title' -> string, 'registry_description' -> string, 'registry_version' -> string, 'registry_license' -> string, 'registry_count' -> int, 'registry_variations' -> array, 'registry_options' -> array, 'registry_domains' -> array, 'registry_sites' -> array, 'registry_transid' -> string, 'registry_timezone' -> string, 'registry_valid' -> bool, // true/false ), registrar -> ( 'contact' -> object( 'name' -> string // Registrar Name 'email' -> string // Registrar Support Email 'phone' -> string // Registrar Telephone 'web' -> string // Registrar Web Address ), 'cacheTime' -> int, // in seconds, time to cache the registration response (Default Cache Time) 'refreshInterval' -> int, // in seconds, time before refreshing the registration (Default Refresh Time) 'refreshSchedule' -> string, // 'hourly','twicedaily','daily','weekly' corresponding to refreshInterval 'options' -> array( // from settings page, registrar_options (Allow API to...) 'allow_set_key', 'allow_set_status', 'allow_set_effective', 'allow_set_expiration', 'allow_activation_update' ), 'notices' -> object( 'info' -> string, // information message text 'warning' -> string, // warning message text 'error' -> string, // error message text 'success' -> string, // success message text ), 'message' -> string, // html message ), registryHtml -> string, // html (table) of human-readable registration values 

On a successful response (status->code = 200), the SDK will automatically cache the registration data and schedule the next refresh event (you do not have to do this).

notices may be set (according to severity) to indicate an expiration or pending expiration and should be displayed to the user. Typically, only one notice will be set but they can be set via the eacSoftwareRegistry_api_registration_notices filter.

message is set via the eacSoftwareRegistry_api_registration_message filter.

On an error response, an additional element is included:

error -> ( 'code' -> 'error_code', 'message' -> 'error message' ), 

error->message may be more informative than status->message.
Errors may be handled with something like:

if ($this->is_api_error($response)) { echo "<div class='notice notice-error'><h4>Error ".$response->error->code." : ".$response->error->message."</h4></div>"; } 

Methods, Hooks, and Callbacks

Useful methods built into the SDK…

$this->isValidRegistration(); // Returns boolean if ( $this->isValidRegistration() ) {...} $this->getRegistrationKey(); // Returns the current registration key $registrationKey = $this->getRegistrationKey(); $this->getCurrentRegistration(); // Returns the current registration object (above response object) $currentRegistration = $this->getCurrentRegistration(); $this->isRegistryValue($keyName); // Returns the value of a specific registry key $regStatus = $this->isRegistryValue( 'status '); $this->isRegistryValue($keyName, $value, $test); // Returns boolean comparison of the value of a registry key ($test is '=|eq' (default), '<|lt', '>|gt', '<=|le', '>=|ge') if ( $this->isRegistryValue('license', 'L3', '>=') ) {...} 

Several hooks are available to customize or react to registration events.
In WordPresss, there are several actions and filters, for file based projects there are corresponding callback methods…

 filter/callback: (your_productid)_api_remote_request( $request, $endpoint ) @param array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>] @param string $endpoint create, activate, deactivate, verify, refresh, revise @return array request body action/callback: (your_productid)_api_remote_response( $body, $request, $endpoint ) @param array $body response body @param array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>] @param string $endpoint create, activate, deactivate, verify, refresh, revise action/callback: (your_productid)_api_remote_$endpoint( $body, $request, $endpoint ) @param array $body response body @param array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>] @param string $endpoint create, activate, deactivate, verify, refresh, revise action/callback: (your_productid)_api_remote_error( $error, $request, $endpoint ) @param object $error {status:{}, error: {}} @param array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>] @param string $endpoint create, activate, deactivate, verify, refresh, revise action/callback: (your_productid)_update_registration($registration) @param array $registration registration object action/callback: (your_productid)_purge_registration() 

What You Need To Do

For WordPress Projects

In your class constructor/initialization, add an action to fulfill the registration refresh scheduled by the scheduleRegistryRefresh() method in (your_productid).wordpress.trait.php

\add_action( '(your_productid)_registry_refresh', array($this, 'refreshRegistration') ); 

You can add this and other hooks with:

$this->addSoftwareRegistryHooks(); 

The addSoftwareRegistryHooks() method adds:

\add_action( '(your_productid)_registry_refresh', array($this, 'refreshRegistration') ); \add_filter( '(your_productid)_is_registered', array($this, 'isValidRegistration') ); \add_filter( '(your_productid)_registration_key', array($this, 'getRegistrationKey') ); \add_filter( '(your_productid)_registration', array($this, 'getCurrentRegistration') ); \add_filter( '(your_productid)_registry_value', array($this, 'isRegistryValue'), 10, 4 ); 

Example:

include "(your_productid)_registration/(your_productid)_registration.includes.php"; class <your_classname> implements \(your_namespace)\Interfaces\(your_productid)_registration { use \(your_namespace)\Traits\(your_productid)_registration_wordpress; ... public function __construct() { $this->addSoftwareRegistryHooks(); } } 

For Other File Based Projects

The scheduleRegistryRefresh() method in (your_productid)_registration.filebased.trait.php is called to schedule the next registration refresh. This method can be modified to schedule a cron event to execute the refresh at a future time. The scheduled event may run (your_productid)_registration.refresh.php <registrationKeyValue> from the command line to refresh the registration.

When left as is, the checkRegistryRefreshEvent() method uses the key file to check for a needed registration refresh.

In your class constructor or destructor add:

$this->checkRegistryRefreshEvent(); 

to trigger the refresh check.

Example:

include "(your_productid)_registration/(your_productid)_registration.includes.php"; class <your_classname> implements \(your_namespace)\Interfaces\(your_productid)_registration { use \(your_namespace)\Traits\(your_productid)_registration_filebased; ... public function __destruct() { /* if necessary, set HOME and/or TMP/TMPDIR/TEMP directories */ // putenv('HOME={your home directory}'); // where the registration key is stored, otherwise use $_SERVER['DOCUMENT_ROOT'] // putenv('TMP={your temp directory}'); // where the registration data is stored, otherwise use sys_get_temp_dir() $this->checkRegistryRefreshEvent(); } } 

User Interface

Of course, the user interface is up to you, the developer, but you may look at (and maybe use) the registration UI trait included with {eac}Doojigger and used by {eac}SoftwareRegistry as an example.

see:

  • …/Traits/swRegistrationUI.trait.php in the eacDoojigger folder.
  • …/Extensions/class.eacSoftwareRegistry_registration.extension.php in the eacSoftwareRegistry folder.

See Also

Copyright

Copyright © 2019-2023, EarthAsylum Consulting, distributed under the terms of the GNU GPL.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should receive a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Pricing

Starting from $0 per month.

Check Out the Glossary Widget

By Common Ninja

GlossaryTry For Free!

App Info

Rating

Reviewers

No reviews

Tags

license manager
software license
software registration
software registry

Developed By

Kevin Burkholder

Quick & Easy

Find the Best Wordpress plugins for you

Common Ninja has a large selection of powerful Wordpress plugins that are easy to use, fully customizable, mobile-friendly and rich with features — so be sure to check them out!

Testimonial

Testimonial plugins for Wordpress

Galleries

Galleries plugins for Wordpress

SEO

SEO plugins for Wordpress

Contact Form

Contact Form plugins for Wordpress

Forms

Forms plugins for Wordpress

Social Feeds

Social Feeds plugins for Wordpress

Social Sharing

Social Sharing plugins for Wordpress

Events Calendar

Events Calendar plugins for Wordpress

Sliders

Sliders plugins for Wordpress

Analytics

Analytics plugins for Wordpress

Reviews

Reviews plugins for Wordpress

Comments

Comments plugins for Wordpress

Portfolio

Portfolio plugins for Wordpress

Maps

Maps plugins for Wordpress

Security

Security plugins for Wordpress

Translation

Translation plugins for Wordpress

Ads

Ads plugins for Wordpress

Video Player

Video Player plugins for Wordpress

Music Player

Music Player plugins for Wordpress

Backup

Backup plugins for Wordpress

Privacy

Privacy plugins for Wordpress

Optimize

Optimize plugins for Wordpress

Chat

Chat plugins for Wordpress

Countdown

Countdown plugins for Wordpress

Email Marketing

Email Marketing plugins for Wordpress

Tabs

Tabs plugins for Wordpress

Membership

Membership plugins for Wordpress

popup

popup plugins for Wordpress

SiteMap

SiteMap plugins for Wordpress

Payment

Payment plugins for Wordpress

Coming Soon

Coming Soon plugins for Wordpress

Ecommerce

Ecommerce plugins for Wordpress

Customer Support

Customer Support plugins for Wordpress

Inventory

Inventory plugins for Wordpress

Video Player

Video Player plugins for Wordpress

Testimonials

Testimonials plugins for Wordpress

Tabs

Tabs plugins for Wordpress

Social Sharing

Social Sharing plugins for Wordpress

Social Feeds

Social Feeds plugins for Wordpress

Slider

Slider plugins for Wordpress

Reviews

Reviews plugins for Wordpress

Portfolio

Portfolio plugins for Wordpress

Membership

Membership plugins for Wordpress

Forms

Forms plugins for Wordpress

Events Calendar

Events Calendar plugins for Wordpress

Contact

Contact plugins for Wordpress

Comments

Comments plugins for Wordpress

Analytics

Analytics plugins for Wordpress

Common Ninja Apps

Some of the best Common Ninja plugins for Wordpress

Browse our extensive collection of compatible plugins, and easily embed them on any website, blog, online store, e-commerce platform, or site builder.

Glossary for Wordpress logo

Glossary

Create an interactive glossary that displays clear definitions, images, and search options to help visitors learn terms quickly and navigate complex topics with ease.

Card Slider for Wordpress logo

Card Slider

Showcase content with a card slider that presents images, text, and buttons in a smooth, customizable layout to keep visitors engaged.

Scroll Progress for Wordpress logo

Scroll Progress

Use a scroll progress bar that visually tracks reading on the page, improves navigation, and keeps visitors aware of their position.

Facebook Feed for Wordpress logo

Facebook Feed

Show Facebook posts in a live Facebook feed that keeps content fresh, boosts social proof, and helps visitors engage more with your brand.

Interactive Video Player for Wordpress logo

Interactive Video Player

Add interactive video overlays with links, product cards, and buttons that appear on top of your videos to boost engagement and guide user actions.

Virtual Tour for Wordpress logo

Virtual Tour

Create immersive 360 virtual tours with interactive hotspots that let visitors explore spaces, view details clearly, and experience panoramic environments seamlessly.

Twitch Feed for Wordpress logo

Twitch Feed

Show live streams and clips with a Twitch feed that keeps content fresh, boosts engagement, and helps visitors follow your channel more easily.

Tripadvisor Reviews for Wordpress logo

Tripadvisor Reviews

Show Tripadvisor reviews to build trust, improve credibility, and help visitors make confident booking decisions that support higher property sales.

PayPal Button for Wordpress logo

PayPal Button

Offer customers a trusted way to pay using PayPal through a PayPal Button that reduces checkout friction and supports higher sales.

Feedback Popup for Wordpress logo

Feedback Popup

Collect user insights with a feedback popup that reveals issues early, improves user experience, and captures valuable leads through a clear feedback form.

Card Carousel for Wordpress logo

Card Carousel

Showcase content with a card carousel that combines images and text, improves visual design, and helps visitors explore key information.

Image Wall for Wordpress logo

Image Wall

Showcase visuals with an image wall that creates a parallax style gallery, offers smooth scrolling, and presents images in customizable, engaging layouts.

More plugins

plugins You Might Like

Discover Apps By Platform

Discover the best apps for your website

WordPress
Wix
Shopify
Weebly
Webflow
Joomla
PrestaShop
Shift4Shop
WebsiteX5
MODX
Opencart
NopCommerce

Common Ninja Search Engine

The Common Ninja Search Engine platform helps website builders find the best site widgets, apps, plugins, tools, add-ons, and extensions! Compatible with all major website building platforms - big or small - and updated regularly, our Search Engine tool provides you with the business tools your site needs!

Multiple platforms