如何为whmcs订单添加动作挂钩

时间:2019-10-09 05:47:59

标签: php smarty whmcs

我只是注意到tblhosting中的ns1和ns2列为空。接受订单后,有人可以给我代码将在数据库中添加ns吗?对于2种服务,我使用了不同的名称服务器。

共享:

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列中有一个条目。 通过SQL查询使用UPDATE。但不确定如何做。

2 个答案:

答案 0 :(得分:0)

  • 一种解决方案是创建服务器模块。 Server Modules

  • 实施 _CreateAccount 方法。

  • 配置您的产品以使用此模块。

    Cofigure Product

  • 在文件中放置以下代码:

  

\ modules \ servers \ test \ 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]);
        }
    }

});
?>

但是您必须在此示例中将产品ID设置为硬编码// 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]);
            }
        }

});
?>

答案 1 :(得分:0)

tblhosting ns1 + ns2字段用于服务器类型的产品,例如VPS。如果配置正确,则它们应包含订购服务时输入的值

对于域,名称服务器保存在tblorders表(“名称服务器”字段)中。