Неверный или неверный токен в расширении с API Mediawiki


Я пытаюсь создать простое расширение, которое перемещает страницу на моем сайте mediawiki, но независимо от того, использую ли curl или FauxRequest, я всегда получаю плохой ответ на маркер. Пробовал кодирование url, а не кодирование, экранирование, без +/ и т. Д., Не имеет значения.

Код выглядит так, как будто в настоящее время используется FauxRequest, с параметром1/2/3, полученным из функции синтаксического анализа, которую я создаю.

global $wgRequest;
$token = $token = $wgUser->editToken();

$params = new FauxRequest( 
    array(
        'action'    => 'move',
        'from'      => $param1,
        'to'        => $param2,
        'format'    => 'php',
        'reason'    => $param3,
        'token'     => $token)
);
$api = new ApiMain( $params, true);
$api->execute();
$data = & $api->getResultData();


$output = "moved $param1 to $param2 - $token";

Также попробовал приведенный ниже код, используя вместо этого curl, что также приводит к плохому токену

global $wgUser;
$token = $wgUser->editToken();
$url = 'http://www.website.com/api.php?';
    $myvars = 'action=move&format=xml&from=' . "$param1" . '&to=' . "$param2" . '&reason=' . "$param3" . '&token=' . urlencode($token);

    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

    $response = curl_exec( $ch );


$output = "moved $param1 to $param2 - $myvars - $response";

Я скучаю что-то в коде, или у меня где-то может быть неправильная настройка?

Любая помощь будет чрезвычайно признательна!

Author: Wolfgang Fahl, 0000-00-00

2 answers

Фактическая ошибка может быть чем-то другим. Вы пытались сделать это, как указано в https://www.mediawiki.org/wiki/API:Calling_internally

 0
Author: nischayn22, 2014-04-27 17:14:42

Мне рекомендовали не использовать ни один из методов для перемещения страницы в расширении, и вместо этого мне было поручено использовать следующий код, который отлично работает. Надеюсь, это кому-то поможет.

$oldTitle = Title::newFromText( $param1 );
$newTitle = Title::newFromText( $param2 );
// Error checking here
$oldTitle->moveTo( $newTitle, true, $param3, true );
 0
Author: Justin M, 2014-04-28 17:31:49