示例#1
0
文件: hooks.php 项目: OnApp/WHMCS-vCD
/**
 * @param $vars
 */
function InvoicePaidHook_OnAppvCD($vars)
{
    $moduleName = OnAppvCDModule::MODULE_NAME;
    $invoiceID = $vars['invoiceid'];
    $qry = 'SELECT
				OnAppUsersNG.`WHMCSUserID`,
				OnAppUsersNG.`serverID`,
				OnAppUsersNG.`OnAppUserID`,
				tblhosting.`id` AS service_id,
				tblinvoices.`subtotal` AS subtotal,
				tblinvoices.`total` AS total,
				tblproducts.`configoption1` AS settings,
				tblhosting.`domainstatus` AS status
			FROM
				tblinvoices
			LEFT JOIN OnAppUsersNG ON
				tblinvoices.`userid` = OnAppUsersNG.`WHMCSUserID`
			LEFT JOIN tblhosting ON
				tblhosting.`userid` = OnAppUsersNG.`WHMCSUserID`
				AND tblhosting.`server` = OnAppUsersNG.`serverID`
			RIGHT JOIN tblinvoiceitems ON
				tblinvoiceitems.`invoiceid` = tblinvoices.`id`
				AND tblinvoiceitems.`relid` = tblhosting.`id`
			LEFT JOIN tblproducts ON
				tblproducts.`id` = tblhosting.`packageid`
			WHERE
				tblinvoices.`id` = @invoiceID
				AND tblinvoices.`status` = "Paid"
				AND tblproducts.`servertype` = "@moduleName"
				AND tblinvoiceitems.`type` = "@moduleName"
			GROUP BY
				tblinvoices.`id`';
    $qry = str_replace('@invoiceID', $invoiceID, $qry);
    $qry = str_replace('@moduleName', $moduleName, $qry);
    $result = full_query($qry);
    if (mysql_num_rows($result) == 0) {
        return;
    }
    $data = mysql_fetch_assoc($result);
    if ($data['status'] == 'Suspended') {
        # check for other unpaid invoices for this service
        $qry = 'SELECT
					tblinvoices.`id`
				FROM
					tblinvoices
				RIGHT JOIN tblinvoiceitems ON
					tblinvoiceitems.`invoiceid` = tblinvoices.`id`
					AND tblinvoiceitems.`relid` = @serviceID
				WHERE
					tblinvoices.`status` = "Unpaid"
				GROUP BY
					tblinvoices.`id`';
        $qry = str_replace('@serviceID', $data['service_id'], $qry);
        $result = full_query($qry);
        if (mysql_num_rows($result) == 0) {
            if (!function_exists('serverunsuspendaccount')) {
                $path = dirname(dirname(dirname(__DIR__))) . '/includes/';
                require_once $path . 'modulefunctions.php';
            }
            serverunsuspendaccount($data['service_id']);
        }
    }
    $qry = 'SELECT
				`secure`,
				`username`,
				`hostname`,
				`password`,
				`ipaddress`
			FROM
				tblservers
			WHERE
				`type` = "@moduleName"
				AND `id` = @serverID';
    $qry = str_replace('@serverID', $data['server_id'], $qry);
    $qry = str_replace('@moduleName', $moduleName, $qry);
    $result = full_query($qry);
    $server = mysql_fetch_assoc($result);
    $server['password'] = decrypt($server['password']);
    if ($server['secure']) {
        $server['address'] = 'https://';
    } else {
        $server['address'] = 'http://';
    }
    if (empty($server['ipaddress'])) {
        $server['address'] .= $server['hostname'];
    } else {
        $server['address'] .= $server['ipaddress'];
    }
    unset($server['ipaddress'], $server['hostname'], $server['secure']);
    # get OnApp amount
    $result = select_query($moduleName . '_Cache', 'data', ['itemID' => 123, 'type' => 'invoiceData']);
    $amount = mysql_fetch_object($result)->data;
    if ($amount) {
        $payment = new OnApp_Payment();
        $payment->auth($server['address'], $server['username'], $server['password']);
        $payment->_user_id = $data['OnAppUserID'];
        $payment->_amount = $amount;
        $payment->_invoice_number = $invoiceID;
        $payment->save();
        $error = $payment->getErrorsAsString();
        if (empty($error)) {
            $msg = $moduleName . ' payment was sent. Service ID #' . $data['service_id'] . ', amount: ' . $amount;
            # delete invoice data
            $where = ['itemID' => $invoiceID, 'type' => 'invoiceData'];
            delete_query($moduleName . '_Cache', $where);
        } else {
            $msg = 'ERROR with ' . $moduleName . ' payment for service ID #' . $data['service_id'] . ': ' . $error;
        }
    } else {
        $msg = 'ERROR with ' . $moduleName . ' payment for service ID #' . $data['service_id'] . ': Cannot find ' . $moduleName . '  amount';
    }
    logactivity($msg);
}
function hook_onappusers_InvoicePaid($vars)
{
    $invoice_id = $vars['invoiceid'];
    $qry = 'SELECT
                tblonappusers.`client_id`,
                tblonappusers.`server_id`,
                tblonappusers.`onapp_user_id`,
                tblhosting.`id` AS service_id,
                tblinvoices.`subtotal` AS subtotal,
                tblinvoices.`total` AS total,
                tblproducts.`configoption1` AS settings,
                tblhosting.`domainstatus` AS status
            FROM
                tblinvoices
            LEFT JOIN tblonappusers ON
                tblinvoices.`userid` = tblonappusers.`client_id`
            LEFT JOIN tblhosting ON
                tblhosting.`userid` = tblonappusers.`client_id`
                AND tblhosting.`server` = tblonappusers.`server_id`
            RIGHT JOIN tblinvoiceitems ON
                tblinvoiceitems.`invoiceid` = tblinvoices.`id`
                AND tblinvoiceitems.`relid` = tblhosting.`id`
            LEFT JOIN tblproducts ON
                tblproducts.`id` = tblhosting.`packageid`
            WHERE
                tblinvoices.`id` = :invoiceID
                AND tblinvoices.`status` = "Paid"
                AND tblproducts.`servertype` = "onappusers"
                AND tblinvoiceitems.`type` = "onappusers"
            GROUP BY tblinvoices.`id`';
    $qry = str_replace(':invoiceID', $invoice_id, $qry);
    $result = full_query($qry);
    if (mysql_num_rows($result) == 0) {
        return;
    }
    $data = mysql_fetch_assoc($result);
    $path = dirname(dirname(dirname(__DIR__))) . '/includes/';
    if ($data['status'] == 'Suspended') {
        // check for other unpaid invoices for this service
        $qry = 'SELECT
                    tblinvoices.`id`
                FROM
                    tblinvoices
                RIGHT JOIN tblinvoiceitems ON
                    tblinvoiceitems.`invoiceid` = tblinvoices.`id`
                    AND tblinvoiceitems.`relid` = :serviceID
                WHERE
                    tblinvoices.`status` = "Unpaid"
                GROUP BY tblinvoices.`id`';
        $qry = str_replace(':serviceID', $data['service_id'], $qry);
        $result = full_query($qry);
        if (mysql_num_rows($result) == 0) {
            if (!function_exists('serverunsuspendaccount')) {
                require_once $path . 'modulefunctions.php';
            }
            serverunsuspendaccount($data['service_id']);
        }
    }
    if (!defined('ONAPP_WRAPPER_INIT')) {
        define('ONAPP_WRAPPER_INIT', $path . 'wrapper/OnAppInit.php');
        require_once ONAPP_WRAPPER_INIT;
    }
    $qry = 'SELECT
                `secure`,
                `username`,
                `hostname`,
                `password`,
                `ipaddress`
            FROM
                tblservers
            WHERE
                `type` = "onappusers"
                AND `id` = :serverID';
    $qry = str_replace(':serverID', $data['server_id'], $qry);
    $result = full_query($qry);
    $server = mysql_fetch_assoc($result);
    $server['password'] = decrypt($server['password']);
    if ($server['secure']) {
        $server['address'] = 'https://';
    } else {
        $server['address'] = 'http://';
    }
    if (empty($server['ipaddress'])) {
        $server['address'] .= $server['hostname'];
    } else {
        $server['address'] .= $server['ipaddress'];
    }
    unset($server['ipaddress'], $server['hostname'], $server['secure']);
    # get OnApp amount
    $qry = 'SELECT
                    `amount`
                FROM
                    `tblonappusers_invoices`
                LIMIT 1';
    $res = mysql_query($qry);
    $amount = mysql_result($res, 0);
    $payment = new OnApp_Payment();
    $payment->auth($server['address'], $server['username'], $server['password']);
    $payment->_user_id = $data['onapp_user_id'];
    $payment->_amount = $amount;
    $payment->_invoice_number = $invoice_id;
    $payment->save();
    $where = array('id' => $invoice_id);
    delete_query('tblonappusers_invoices', $where);
    $error = $payment->getErrorsAsString();
    if (empty($error)) {
        logactivity('OnApp payment was sent. Service ID #' . $data['service_id'] . ', amount: ' . $amount);
    } else {
        logactivity('ERROR with OnApp payment for service ID #' . $data['service_id'] . ': ' . $error);
    }
}