Для реализации API client на PHP-платформе Wad-er создадим небольшой модуль test. Создайте каталог ext/test, внутри него – каталоги controllers, models, views. Приведенные ниже примеры кода следует расположить в этих каталогах.
Файл контроллера ext/test/controllers/index.php получает данные модели и формирует представление:
class test_controllers_index extends common_controller
{
public function index($pars = '')
{
if($this->request['login']) {
$model = new test_models_test($this->parser);
$model->login = (isset($this->request['login'])) ? $this->request['login'] : '';
$model->password = (isset($this->request['password'])) ? $this->request['password'] : '';
$data = $model->getInfo();
}
$this->data = $data;
$this->url = $this->parser->makeUrl($this->parser->pageId);
$this->render();
}
public function createAction()
{
//код…
}
public function readAction()
{
//код….
}
}
Файл представления ext/test/views/index.php отображает форму, в которую пользователь вводит логин-пароль. В тестовом примере следует вводить admin/admin. В приведенном ниже коде следует убрать лишние пробелы возле тегов:
< form class="form-stacked" method="POST" action="< ?php print $url ? >" >
< div class="row" >
< div class="span5 offset5" >
< label for="login_username" >Username:< /label >
< input type="text" id="login" name="login" placeholder="username" / >
< label for="login_password" >Password:< /label >
< input type="password" id="password" name="password" placeholder="password" / >
< /div >
< /div >
< div class="actions" >
< button type="submit" name="login_submit" class="btn primary large" >Send Request< /button >
< /div >
< /form >
< ?php print $data; ? >
Или можете сконфигурировать приложение так, чтобы вместо этой формы для авторизации поступали данные из $_SESSION (авторизованный в PHP-платформе Wad-er пользователь).
Файл модели ext/apitest/models/test.php (получает данные о текущем пользователе и отсылает запрос API Server):
class test_models_test
{
protected $parser;
public $login = '';
public $password = '';
public function __construct($parser)
{
$this->parser = $parser;
}
public function getInfo()
{
$data = '';
$a = $this->parser->utils->getFieldsFromSql("SELECT *
FROM sys_objects
WHERE (objtype='sys_users')
AND (str2_".$this->parser->lang_suff."='".trim($this->login)."')
AND (str3_".$this->parser->lang_suff."='".md5(trim($this->password))."')
", array('', 0, 0), 'num');
if(!$a[0]) throw new Exception('User does not exists');
if($a[0]) {
$data = $this->sendRequest();
}
return $data;
}
public function sendRequest() {
if(isset($this->login))
{
$data = '
';
include_once(SYS_BASE_PATH.'ext/common/apiclient.php');
$api = new apiclient();
try
{
$api->clientid = 'apitest_client1';//открытый ключ
$api->clientkey = '123456789011121314151617181920';//секретный ключ
$api->url = 'http://api_server/index.php'; //url, по которому происходит запрос
$api->controller = 'test'; //контроллер, который обрабатывает поступивший запрос
$api->httpuser = '';
$api->httppsw = '';
$api->action = 'index'; //действие для обработки запроса
$api->return_format = 'xml'; //формат возвращаемых данных
$api->controller_to_url = false; //свойство для интеграции с Delopro4.0
$data = $api->sendRequest(array(
'login' => $this->login,
'password' => $this->password
));
foreach($data->children() as $child)
{
$data .= "
";
$data .= $child->getName();
$data .= " = ";
$data .= (string)$child;
}
} catch (Exception $e) { echo $e->getMessage();}
}
return $data;
}
}
Здесь в модели создается экземпляр класса apiclient, который посылает запрос к API Server и получает ответ об успехе/неудаче операции.