Jump to content

Licensing Addon Share -- helping you with the API


mfoland

Recommended Posts

Hey all!

 

For those of you who use the Licensing Addon, and would want to get certain variables not originally shown in the licensing array such as suspension status, etc. I have an open source script for you that I have put together. I wouldn't mind possibly developing more into this and looking for donations.. but the source here is good. I was able to pull out the suspensionreason from WHMCS.

I named this file license_api.php and I use certain variables within my license.php file that does the license check. This allows you to grab more data from the actual license itself.

<?php
/***
Name: License API
Developer: WHMCS / Best PHP Scripts
Best Php Scripts created php_array to get license details from the server for any suspension reasons, etc.
Date created: 2/4/2019
**/

// API Connection Details
$whmcsUrl = "your whmcs url";

// For WHMCS 7.2 and later, we recommend using an API Authentication Credential pair.
// Learn more at http://docs.whmcs.com/API_Authentication_Credentials
// Prior to WHMCS 7.2, an admin username and md5 hash of the admin password may be used.
$username = "your api username";
$password = "your api password";

// Set post values
$postfields = array(
    'username' => $username,
    'password' => $password,
    'action' => 'GetClientsProducts',
    'serviceid'=> '17',
    'domain' => $license_key,
    'responsetype' => 'json',
);

// Call the API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $whmcsUrl . 'includes/api.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
$response = curl_exec($ch);
if (curl_error($ch)) {
    die('Unable to connect: ' . curl_errno($ch) . ' - ' . curl_error($ch));
}
curl_close($ch);

// Decode response
$data = json_decode($response); 
//--Format our pretty array and loop it to get what we need from the call
$php_array = json_encode($data->{products}->{product});
$php_array = json_decode($php_array,true);
//print_r($php_array);
foreach($php_array as $item) { 
   $item = (array)$item;
}
//--Variables for Suspension
$susReason = $item['suspensionreason'];
$licStatus = $item['status'];

IF you want to do the script in development mode and see the full license array, you can simply uncomment the print_r($php_array); and that will allow you to see the full array. I then can call $susReason and even $licStatus in any script I so desire.. although for the original license status, I simply use $results[status] from the license call. I plan to expand on this script to get the reason the license is invalid. This is if you want to make a manage license page that shows if it's suspended, etc and they can put a new license key in. 

For the service id, you will need to do a variable such as $servid, which can be retrieved from your original license call. I forgot to put that fully into my script as I was doing this for a development test. ANY TIME you have a php variable in the api such as the license key etc, you cannot have the quote around it. The variable WILL NOT PASS. I've had to learn this one. 🙂

 

For my scripts, I store the key into a flat file that serves as a configuration.php type file, however I am considering changing my license key to be stored in the application database. I'm planning on ALSO storing the local key in the database so that the software doesn't have to call home every day.

 

Enjoy 🙂

 

Edited by mfoland
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated