создать сообщение wordpress.com с помощью rest API

Я хочу сделать php-приложение для создания поста на wordpress.com с помощью REST API.

Я использую этот код:

<?php

$curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
'client_id' => 12345,
'redirect_uri' => 'http://example.com/wp/test.php',
'client_secret' => 'L8RvNFqyzvqh25P726jl0XxSLGBOlVWDaxxxxxcxxxxxxx',
'code' => $_GET['code'], // The code fromthe previous request
'grant_type' => 'authorization_code'
) );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);

$auth = curl_exec( $curl );
$secret = json_decode($auth);
$access_token = $secret->access_token;


$post = array(
'title'=>'Hello World',
'content'=>'Hello. I am a test post. I was created by
the API',
'date'=>date('YmdHis'),
'categories'=>'API','tags=tests'
);
$post = http_build_query($post);
$apicall = "https://public-api.wordpress.com/rest/v1/sites/mysite.wordpress.com/posts/new";
$ch = curl_init($apicall);
curl_setopt($ch, CURLOPT_HTTPHEADER, array
('authorization: Bearer ' . $access_token,"Content-Type: application/x-www-form-urlencoded;
charset=utf-8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
$return = curl_exec($ch);
echo "<pre>";
print_r($return);
exit;

?>

но я получаю эту ошибку:

{"error":"unauthorized","message":"Пользователь не может публиковать сообщения"}

Можете мне помочь?

Спасибо


person vallez    schedule 03.03.2016    source источник
comment
в вашем определении client_secret отсутствует '. И я надеюсь, что это не ваш настоящий секрет...   -  person Gerald Schneider    schedule 03.03.2016
comment
я опечатался. я отредактировал .. есть идеи для этой ошибки?   -  person vallez    schedule 03.03.2016


Ответы (2)


Стандартный способ создания сообщений — использование файлов cookie . и одноразовый номер.

Однако я нашел более простой способ сделать это.

  1. Установите плагин Basic-Auth на свой WordPress.

  2. Создайте пользователя WordPress с именем пользователя admin и паролем admin (оба учетных данных небезопасны, используются только в демонстрационных целях)

  3. Создайте пост, используя код:

    $username = 'admin';
    $password = 'admin';
    $rest_api_url = "http://my-wordpress-site.com/wp-json/wp/v2/posts";
    
    $data_string = json_encode([
        'title'    => 'My title',
        'content'  => 'My content',
        'status'   => 'publish',
    ]);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $rest_api_url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string),
        'Authorization: Basic ' . base64_encode($username . ':' . $password),
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    if ($result) {
        // ...
    } else {
        // ...
    }
    

Обратите внимание, что в приведенном выше примере используется REST API версии 2.

person Prisacari Dmitrii    schedule 20.02.2018

Ответ правильный, что мы можем использовать плагин Basic-Auth для выполнения запроса Rest API.

Но @vallez хочет создать пост на сайте wordpress.com.

И wordpress.com предоставляет поддержку oAuth для аутентификации.


Недавно я создал пост, демонстрирующий использование oAuth для создания поста на wordpress.com. Вы можете прочитать статью по адресу создайте запись на сайте wordpress.com, используя oAuth и Rest API

Ниже приведены шаги для успешного создания сообщения с oAuth на wordpress.com.

Шаг 1. Добавьте данные аутентификации, чтобы получить ключ аутентификации.

$auth_args = array(
    'username'      => '',
    'password'      => '',
    'client_id'     => '',
    'client_secret' => '',
    'grant_type'    => 'password', // Keep this as it is.
);
$access_key = get_access_key( $auth_args );

Ниже приведена функция get_access_key(), которая возвращает ключ доступа.

Шаг 2. Получите ключ доступа.

/**
 * Get Access Key.
 * 
 * @param  array $args  Auth arguments.
 * @return mixed        Auth response.
 */
function get_access_key( $args ) {

    // Access Token.
    $curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );
    curl_setopt( $curl, CURLOPT_POST, true );
    curl_setopt( $curl, CURLOPT_POSTFIELDS, $args );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
    $auth = curl_exec( $curl );
    $auth = json_decode($auth);

    // Access Key.
    return $auth->access_token;
}

Шаг 3. Задайте аргументы публикации и передайте их для создания публикации.

$post_args = array(
    'title'       => 'Test Post with oAuth',
    'content'     => 'Test post content goes here..',
    'tags'        => 'tests',
    'post_status' => 'draft',
    'categories'  => 'API',
);

Шаг 4. Создайте сообщение с ключом доступа.

Теперь у нас есть ключ доступа и аргументы создания поста. Итак, давайте передадим их в функцию create_post().

create_post( $access_key, $post_args );

Шаг 5. Создайте сообщение с ключом доступа.

/**
 * Create post with access key.
 * 
 * @param  string $access_key   Access key.
 * @param  array $post_args     Post arguments.
 * @return mixed                Post response.
 */
function create_post( $access_key, $post_args )
{
    $options  = array (
        'http' => array(
            'ignore_errors' => true,
            'method'        => 'POST',
            'header'        => array(
                0 => 'authorization: Bearer ' . $access_key,
                1 => 'Content-Type: application/x-www-form-urlencoded',
            ),
            'content' => http_build_query( $post_args ),
        ),
    );
     
    $context  = stream_context_create( $options );
    $response = file_get_contents(
        'https://public-api.wordpress.com/rest/v1/sites/YOURSITEID/posts/new/',
        false,
        $context
    );
    return json_decode( $response );
}
person maheshwaghmare    schedule 22.12.2020
comment
выдающая ошибка: {код: rest_invalid_param, сообщение: недопустимый параметр (ы): теги, данные: {статус: 400, параметры: {теги: теги [0] не имеют целочисленного типа.}}} - person Aman Deep; 07.02.2021