Как добавить хук действия для заказа WHMCS

Я только что заметил, что столбцы ns1 и ns2 в tblhosting пусты. может ли кто-нибудь дать мне код, который добавит ns в базу данных, как только заказ будет принят? Для двух сервисов я использую разные серверы имен.

общий:

ns1.shared.com

ns2.shared.com

для реселлера.

ns1.reseller.com

ns2.reseller.com

Я надеюсь, что получу некоторую помощь в этом. заранее спасибо.

Я пытаюсь построить крючок что-то вроде этого,

function ns($vars){
if ($vars['groupname'] == "Shared Hosting") {
    $groupname = $vars['groupname'].
    return array("groupname" => $groupname);
}

а потом sql запрос. но не уверен, как добавить сюда запрос sql.

Я ожидаю запись в столбцах tblhosting >> ns1 и ns2. Использование UPDATE через sql-запрос. но не уверен, как это сделать.


person Test Webmail    schedule 09.10.2019    source источник


Ответы (2)


  • Одним из решений является создание Серверного модуля. Серверные модули

  • Реализуйте метод _CreateAccount.

  • Настройте свой продукт для использования этого модуля.

    Продукт Cofigure

  • Поместите следующий код в файл:

\модули\серверы\тест\test.php


<?php
// if(!defined("WHMCS"))exit("This file cannot be accessed directly");
// see: https://developers.whmcs.com/domain-registrars/function-index/
// see: https://developers.whmcs.com/provisioning-modules/supported-functions/
// See: https://github.com/WHMCS/sample-provisioning-module/blob/master/modules/servers/provisioningmodule/provisioningmodule.php L443
// "Create", "Suspend","Unsuspend", "Terminate"
require_once(ROOTDIR . '/includes/dbfunctions.php');
require_once(ROOTDIR . '/includes/functions.php');
require_once(ROOTDIR . '/includes/clientfunctions.php');

function test_MetaData()
{
    return array("DisplayName"=>"Test Module","APIVersion"=>"1.0","RequiresServer"=>true);
}

function test_CreateAccount($params)
{
    $serviceid=$params['serviceid'];
    $my_ns1="ns1.shared.com";
    $my_ns2="ns2.shared.com";
    $qr=update_query('tblhosting',array("ns1"=>$my_ns1,"ns2"=>$my_ns2),array('id' => $serviceid));
    if(!$qr) throw new Exception("Cannot Update data");
    return "success";
}

?>

-------- ОБНОВЛЕНИЕ 1 ------------

Если вы хотите создать хук для «AcceptOrder», поместите свой код в файл:

\includes\hooks\test_hook.php

<?php
    use Illuminate\Database\Capsule\Manager as Capsule;
add_hook('AcceptOrder', 1, function($vars) {
    $orderid=$vars['orderid'];
    $my_packageid=10; //hardCoded
    $my_ns1="ns1.shared.com";
    $my_ns2="ns2.shared.com";

    $res=Capsule::table('tblhosting')->where('orderid',$orderid)->get();
    foreach($res as $row)
    {
        if($row->packageid==$my_packageid)
        {
            $up=Capsule::table('tblhosting')->where('id',$row->id)->update(['ns1'=>$my_ns1,'ns2'=>$my_ns2]);
        }
    }

});
?>

Но в этом примере вы должны жестко запрограммировать идентификатор продукта // 10.

-------- ОБНОВЛЕНИЕ 2 ------------

к группе пользователей, вы должны сделать соединения между многими таблицами..

<?php
    use Illuminate\Database\Capsule\Manager as Capsule;
    add_hook('AcceptOrder',1,function($vars){
        $orderid=$vars['orderid'];
        $my_packageid=10; //hardCoded
        $my_gid=1; //hardCoded
        $my_ns1="ns1.shared.com";
        $my_ns2="ns2.shared.com";
        //$res=Capsule::table('tblhosting')->where('orderid',$orderid)->get();
        $res=Capsule::select("SELECT packageid , gid ,tblhosting.id AS hostingid ,tblhosting.orderid FROM tblhosting INNER JOIN tblproducts ON tblhosting.packageid=tblproducts.id LEFT OUTER JOIN tblproductgroups ON tblproducts.gid=tblproductgroups.id WHERE tblhosting.orderid={$orderid}");
        foreach($res as $row)
        {
            if($row->gid==$my_gid)
            {
                $up=Capsule::table('tblhosting')->where('id',$row->hostingid)->update(['ns1'=>$my_ns1,'ns2'=>$my_ns2]);
            }
        }

});
?>
person houssam    schedule 09.10.2019
comment
Привет. Спасибо за код. Но когда я устанавливаю тестовый модуль в whmcs. Я получаю сообщение об ошибке, этот модуль не поддерживается. Можете ли вы сказать мне, как объединить часть ns в существующую cpanel? На thlink вы можете расшифровать версию, если хотите увидеть реальный код. - person Test Webmail; 09.10.2019
comment
comment
Спасибо за вас; Я тестировал на WHMCS 7. Я обновил ответ, чтобы использовать хук. - person houssam; 09.10.2019
comment
Большое спасибо! Это работает отлично! нельзя ли использовать код для идентификатора пакета? У меня есть 3 пакета: 22,23,24. Для этих трех пакетов я хочу установить один и тот же NS. - person Test Webmail; 09.10.2019
comment
ИЛИ можно ли использовать идентификатор группы? Идентификатор группы виртуального хостинга: 1 - person Test Webmail; 09.10.2019
comment
Ja .. вы можете использовать статус, также вы можете сделать это по идентификатору группы .. см. Обновление 2 - person houssam; 09.10.2019

Поля tblhosting ns1 + ns2 используются для продуктов серверного типа, например. VPS. При правильной настройке они должны содержать значения, введенные при заказе услуги.

Для доменов серверы имен сохраняются в таблице tblorders (поле nameservers).

person wesamly    schedule 14.10.2019