I wrote a script for our business that will terminate services immediately when they are cancelled (as WHMCS does it on the next CRON Job). As the API lacks this functionality, I found the only way I could do this was by calling the URL of it directly and passing the UserID and ProductID such as...
https://clients.website.com/admincp/clientsservices.php?userid=12886&id=68832&modop=terminate
This works fine when I am logged into my admin account, however it obviously doesn't when called from a Hook. I am looking at the curl code from the External API examples, but I am not sure how I can use this to permit my hook to call that URL directly. What would need to be changed for this to work?
$url = "https://clients.website.com/admincp/index.php";
$username = "admin";
$password = "asd89asd0";
$postfields = array();
$postfields["username"] = $username;
$postfields["password"] = md5($password);
$postfields["responsetype"] = "json";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$jsondata = curl_exec($ch);
if (curl_error($ch)) die("Connection Error: ".curl_errno($ch).' - '.curl_error($ch));
curl_close($ch);
$arr = json_decode($jsondata); # Decode JSON String
print_r($arr); # Output XML Response as Array