我让API在专用服务器上为用户创建一个帐户,创建电子邮件地址也很好,但是当我尝试通过API创建一个mysql数据库时,我收到错误消息“Access Denied”,即使访问是root。
我正在尝试使用的代码:
$xmlapi = new xmlapi($host);
$xmlapi->password_auth("".$root_user."","".$root_pass."");
$xmlapi->set_debug(1);
$xmlapi->set_output('array');
$xmlapi->set_port('2083');
//create database
$createdb = $xmlapi->api1_query($root_user, "Mysql", "adddb", array($dbname));
以及我要回复的错误数据:
URL: https://delta1.powerstorm.net:2083/xml-api/cpanel
DATA: cpanel_xmlapi_user=root&cpanel_xmlapi_module=Mysql&cpanel_xmlapi_func=adddb&cpanel_xmlapi_apiversion=1&arg-0=site
Authentication Header: Authorization: Basic cm9vdDphY3Jtp3MxOTY1
RESPONSE:
<?xml version="1.0" ?>
<cpanelresult>
<error>Access denied</error>
<data>
<result>0</result>
<reason>Access denied</reason>
</data>
</cpanelresult>
当其他一切正常时,有关为什么这一部分失败的任何想法?
答案 0 :(得分:4)
您无法使用root
帐户创建cPanel数据库。此外,请确保设置端口。 2082
用于未加密的连接,而2083
用于加密。您也可以使用IP地址代替“domainName”。
检查以下代码,因为它应该有效。
require("xmlapi.php");
$opts = [
"userName" => "UserUserName", //+++ Replace UserUserName
"password" => "UserPassword", //+++ Replace UserPassword
"dbPassword" => "DatabasePassword", //+++ Replace DatabasePassword
];
$xmlapi = new xmlapi("domainName");
$xmlapi->set_port( 2083 );
$xmlapi->password_auth($opts['userName'],$opts['password']);
$cpaneluser=$opts['userName'];
$databasename="dbName";
$databaseuser="dbUserName";
$databasepass=$opts['dbPassword'];
// database creation
$createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename));
// user creation
$usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass));
// adds user to database
$addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array("".$cpaneluser."_".$databasename."", "".$cpaneluser."_".$databaseuser."", 'all'));
答案 1 :(得分:0)
感谢@Topher,但是一个小建议。首先创建用户然后再创建db:
是安全的// user creation
$usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass));
和db,
// database creation
$createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename));