Мы используем 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
];
}
}