@note Вовлеченному поток сервера использует Google-API-PHP-клиент-бетаGoogle API,
Цель состоит в том, чтобы «вставки» сообщение по электронной почте» 'в учетную запись gmail для Google for Work, адресованную зарегистрированному псевдониму электронной почты.
Для этого OAuth процесса, у меня есть:
- Google для работы пользователя с псевдонимом электронной почты на зарегистрированном дополнительный домене
- создал «Project» в console.developers.google.com/APIs/
- создала «учетную запись службы» в рамках проекта
- включен счет для «общедоменного-доступа»
- добавил «клиент» не давала OAuth для учетной записи службы, а также с учетными данными загруженными как JSON строка
- уполномочил Клиент «прицелами» в https://admin.google.com/my-domain.tld
- код авторизации позволяет «Project» просить «Access Лексема», чтобы сделать области на пользователе (требует отдельного одноразового клиента)
следующий код сервера пытается получить Google_Client, авторизованный с вышеупомянутыми учетными данными и токеном доступа, при этом просит OAuth Client выдать себя за упомянутого пользователя GFW. После этого клиент $ можно использовать для вызова таких сервисов, как Google_Service_Gmail.
В настоящее время $authCreds
возвращается с [ «error_description»] => «Не удалось определить идентификатор клиента из запроса» сообщение об ошибке
// local const's for testing
const CLNT_GOOGL_SRVC_ACCT_CREDS = '';
const CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE = '';
/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
private static function getAuthorizedClient() {
$client = new Google_Client();
$isSrvcAcct = false;
if (self::CLNT_GOOGL_SRVC_ACCT_CREDS) {
$isSrvcAcct = true;
$creds = json_decode(self::CLNT_GOOGL_SRVC_ACCT_CREDS, true);
} elseif (defined('CLNT_GOOGL_SRVC_ACCT_CREDS')) {
$isSrvcAcct = true;
$creds = json_decode(CLNT_GOOGL_SRVC_ACCT_CREDS, true);
}
if ($isSrvcAcct) {
if (! isset($creds)) {
acapApp::catchProcessMessage('CLNT_GOOGL_SRVC_ACCT_CREDS is not valid JSON?', ACAP_DEBUG);
return;
}
self::setServiceClient($client, (array) $creds);
} else {
self::setUserClient($client);
}
if ($client->getAccessToken()) {
return $client;
}
}
private static function setServiceClient(Google_Client $client, array $creds) {
$client->setAuthConfig($creds);
$client->setSubject(CLNT_SMTP_OAUTH_USER_EMAIL);
if (self::CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE) {
$authCode = self::CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE;
} else if (defined('CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE')) {
$authCode = CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE;
}
if (isset($authCode)) {
$authCreds = $client->fetchAccessTokenWithAuthCode($authCode);
if (isset($authCreds['error'])) {
acapApp::catchProcessMessage('Failure Fetching Auth Token: '.$authCreds['error_description'], ACAP_DEBUG);
}
}
}
Я не уверен, где вы получаете 'CLNT_GOOGL_API_SRVC_ACCT_CLIENT_ACCESS_CODE', но обслуживание счетов/клиенты не имеют AUTH коды. Только пользователи. –
В целом этот код очень сложно выполнить, но если вы создаете [установленное приложение] (https://developers.google.com/identity/protocols/OAuth2InstalledApp) или [делегируете пользовательский пароль для учетной записи службы] (https: //github.com/google/google-api-php-client/issues/801#issuecomment-171417538), вам будет хорошо. –
Константы CLNT_ * предоставляются каркасом из хранилища db. Они достаточно понятны, чтобы представить себе ценности. – CNSKnight