Я пытаюсь Moodle API для создания Coldfusion, но я запутался в нескольких вещах
Во-первых, я использую опцию soap для вызова сервера со следующим кодом:
$functionname = 'core_user_create_users';
$user1 = new stdClass();
$user1->username = 'abcd';
$user1->password = 'Password123!';
$user1->firstname = 'ali';
$user1->lastname = 'asdsad';
$user1->email = '[email protected]';
$user1->city = 'apo';
$user1->country = 'addfa';
$user1->auth = 'manual';
$params = array($user1);
// SOAP CALL
$serverurl = 'http://your_install.com/webservice/soap/server.php?wsdl=1&wstoken=your_token';
///Do the main soap call
$client = new SoapClient($serverurl);
try {
$resp = $client->__soapCall($functionname, array($params));
}
catch (SoapFault $e) {
exit($e->faultstring);
}
У меня мало сомнений:
оно использует $user1 = new stdClass();
— я не мог это нигде в коде, это как-то похоже structnew
в холодном состоянии
как это делает мыльный звонок, я потерялся
у меня есть мой код Coldfusion, как показано ниже
<cffunction access="remote" name="core_user_create_users" returntype="any" returnformat="json" hint="Create Users for Moodle">
<cfargument name="structform" default="" type="struct">
<cfset var getMoodleToken = getTokenFromMoodle()>
<cfset var createURL = getDomainName()>
<cfset var services = "/webservice/soap/server.php?wsdl=1&wstoken=" & getMoodleToken>
<cfhttp url="#createURL##services#" method="get">
</cffunction>
но после cfhttp
Звоните я не уверен, что делать и передать, пожалуйста, руководство
Обновление # 1
Звоните вот так и получайте эту ошибку
<cffunction access="remote" name="getAllFunctions" returntype="any" returnformat="json" hint="Get all avaliable Functions from Moodle">
<cfset var getMoodleToken = getExternalTokenFromMoodle()>
<cfset var createURL = getDomainName()>
<cfset var services = createURL & "/webservice/soap/server.php?wsdl=1&wstoken=" & getMoodleToken>
<cfset obj = createobject("webservice",services)>
<cfreturn obj>
</cffunction>
<cffunction access="remote" name="createUser" returntype="any" returnformat="json" hint="Create Users for Moodle">
<cfargument name="structform" default="" type="struct">
<cfset obj = getAllFunctions()>
<cfset var user = structnew()>
<cfset user.username = arguments.structform.username>
<cfset user.password = arguments.structform.password>
<cfset user.firstname = arguments.structform.firstname>
<cfset user.lastname = arguments.structform.lastname>
<cfset user.email = arguments.structform.email>
<cfset user.auth = arguments.structform.auth>
<cfset user.idnumber = arguments.structform.idnumber>
<cfset user.lang = arguments.structform.lang>
<cfset user.theme = arguments.structform.theme>
<cfset user.timezone = arguments.structform.timezone>
<cfset user.mailformat = arguments.structform.mailformat>
<cfset user.description = arguments.structform.description>
<cfset user.city = arguments.structform.city>
<cfset user.country = arguments.structform.country>
<cfset objResults = obj.core_user_create_users(user)>
<cfdump var="#objResults#">
</cffunction>
Unable to create web service argument class [Ljava.lang.Object;. Error: java.lang.InstantiationException: [Ljava.lang.Object;. Often this is because the web service defines an abstract complexType as an input to an operation. You must create an actual instance of this type in Java.
Message Error converting CFML arguments to Java classes for web service invocation.
Обратите внимание — это будет сложным методом проб и ошибок, чтобы заставить это работать. Вам придется пройти через один шаг, а затем перейти к следующей ошибке, прежде чем вы добьетесь успеха.
Итак, у меня есть одна подсказка для вас — предполагая, что вызов cfhttp возвращает какой-то WSDL, вы должны иметь возможность использовать компонентный вызов. Попробуй это:
<cffunction access="remote" name="core_user_create_users" returntype="any" returnformat="json" hint="Create Users for Moodle">
<cfargument name="structform" default="" type="struct">
<cfset var getMoodleToken = getTokenFromMoodle()>
<cfset var createURL = getDomainName()>
<cfset var services = "/webservice/soap/server.php?wsdl=1&wstoken=" & getMoodleToken>
<cfset obj = createobject("webservice",services)>
<cfdump var="#obj#">
</cffunction>
WSDL должен быть скомпилирован в класс-заглушку с членами (функциями и свойствами). Один из них будет core_user_create_users()
и он возьмет массив объектов. Сложной задачей будет выяснить, как отформатировать этот массив, чтобы передать его правильно. Если вам повезет, массив объектов CF ([1] [«username: abc»]) может правильно сериализоваться. Если нет, вам придется пробовать и делать ошибки, пока вы не поймете это. удачи Джон!
Других решений пока нет …