Добавить пользователя в рабочее пространство Podio через API

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

Пример кода ниже. Надеюсь, это поможет любому научиться проходить аутентификацию через сервер.

Мы получили уровень доверия 2 от администраторов Podio, и приведенный ниже код работает на локальном хосте Windows 10 с xampp, но не на сервере.

На сервере этот код возвращает: Доступно только для клиентов с уровнем доверия 2 или выше. Чтобы обновить клиент API до более высокого уровня доверия, обратитесь в службу поддержки по адресу https://help.podio.com.

Путаница в том, как должен быть структурирован код:

  • Если мы аутентифицируемся как сами, что дает нам уровень доверия 2, у нас нет разрешений на добавление пользователя в чужое пространство.
  • Если мы аутентифицируемся как они, у нас нет уровня 2 (на сервере мы, по-видимому, делаем это на локальном хосте Windows 10, на котором работает xampp).

Есть ли кто-нибудь, кто знает, как это решить?

<?php

require __DIR__ . '/../vendor/autoload.php';
include 'constants.php';
// to use this file
// - update constants.php with PODIO_CLIENTID and PODIO_CLIENTSECRET, SERVER_URL
//   - define('PODIO_CLIENTID','');
//   - define('PODIO_CLIENTSECRET','');
//   - define('SERVER_URL', ''); // requires trailing backslash: ex: https://localhost/

// - set REDIRECT_URI
// - set MEMBER_ORG_ID, MEMBER_SPACE_ID, and ADMIN_USER_ID
// - localhost call: http://localhost/podio_laravel/public/PodioMembership.php
// - dev.noterules.com call: https://dev.noterules.com/PodioMembership.php

define("REDIRECT_URI", SERVER_URL . 'PodioMembership.php');

member();

// authenticate as user, add admin
function member() {
    $client_id=PODIO_CLIENTID;
    $client_secret=PODIO_CLIENTSECRET;
    Podio::setup($client_id, $client_secret);

    $org_id = MEMBER_ORG_ID;
    $space_id = MEMBER_SPACE_ID;
    $admin_user = ADMIN_USER_ID;
    $attributes = ['role' => 'admin', 'users' => array($admin_user)];

    if (Podio::is_authenticated()) {
        print 'is authenticated, doing nothing';
    } elseif (!isset($_GET['code'])) {
        $auth_url = htmlentities(Podio::authorize_url(REDIRECT_URI, 'global:all'));
        print "<a href='{$auth_url}'>Start authenticating</a>";
    } else {
        if (!isset($_GET['error'])) {
            $response = authenticate_with_code($_GET['code']);
            if (!$response['hasError']) {
                print 'authenticated with code<br>';

                $response = add_member($space_id, $attributes);
                if(!$response['hasError']) {
                    print 'add_member success';
                } else {
                    print 'add_member response: ' . $response['message'];
                }
            } else {
                print 'authentication response: ' . $response['message'];
            }
        } else {
            print "There was a problem. The server said: {$_GET['error_description']}<br>";
        }
    }
}

function add_member($space_id, $attributes) {
    try {
        $data = PodioSpaceMember::add($space_id, $attributes);
        return [
            'hasError' => false,
            'data' => $data
        ];
    } catch (PodioError $ex) {
        return [
            'hasError' => true,
            'error' => $ex,
            'message' => $ex->body['error_description']
        ];
    }
}

function authenticate_with_code($code) {
    try {
        $response = Podio::authenticate('authorization_code', array('code' => $code, 'redirect_uri' => REDIRECT_URI));
        return [
            'hasError' => false,
            'data' => $response
        ];
    } catch (PodioError $ex) {
        return [
            'hasError' => true,
            'message' => $ex->body['error_description'],
            'error' => $ex
        ];
    }
}

person R. McGrew    schedule 02.06.2021    source источник