Я не профессиональный разработчик Android, и у меня возникли проблемы с получением токена Google PlayIntegrity из моего приложения для декодирования через PHP через мой внутренний сервер, и я не смог найти много помощи в Интернете.
Я включил Google PHP API на свой сервер, интегрировал API в свое приложение и активировал и связал его в Play Console. Но, похоже, я делаю что-то не так, я получаю следующие сообщения об ошибках PHP:
Предупреждение: попытка чтения свойства appLicensingVerdict при нулевом значении
Мой код:
<?php
namespace foo;
use Google\Client;
use Google\Service\PlayIntegrity;
use Google\Service\PlayIntegrity\DecodeIntegrityTokenRequest;
require_once __DIR__ . '/google/vendor/autoload.php';
// Google Integrity token, as obtained from Google through my app:
$token = $_POST['IntegrityToken'];
$client = new Client();
$client->setAuthConfig('google/credentials.json');
$client->addScope(PlayIntegrity::PLAYINTEGRITY);
$service = new PlayIntegrity($client);
$tokenRequest = new DecodeIntegrityTokenRequest();
$tokenRequest->setIntegrityToken($token);
$result = $service->v1->decodeIntegrityToken('com.myapp.game', $tokenRequest);
// Read and handle the JSON response:
$appLicensingVerdict = $result->accountDetails->appLicensingVerdict;
// ... more fields are available in the JSON... see Google documentation
// Check/verify the obtained response values.....
?>
Любая помощь приветствуется! Большое спасибо!
Хакре спасибо большое! К сожалению, я не могу заставить работать принятый ответ: HTTP ERROR 500. Нельзя ли это как-то сделать с /vendor/autoload.php? Вот как это работало для проверки покупок в приложении, и мне не нужно пространство имен или предложение использования в моем исходном коде.
Конечно, с этим покончено. Но есть пробел: нужно правильное имя класса. Только если вы соберете рабочую конфигурацию автозагрузки с правильным именем класса - тогда и только тогда - классы будут найдены. Сравните с руководством по PHP как для автозагрузки, так и для главы о пространстве имен.
Связанный принятый ответ содержит такую конфигурацию автозагрузки и имени класса, которая работает. Сравните в свою пользу. У вас есть только ошибка class-not-found.
Будет сделано, еще раз большое спасибо за ваши супер быстрые ответы :-)
Теперь класс найден, и запрос, похоже, выполняется без каких-либо проблем, но теперь у меня возникает эта проблема, когда я повторяю вердикт из $result: «Предупреждение: попытка прочитать свойство« appLicensingVerdict »для нуля». Я не использую lavarel, поэтому я попробовал, не включая использование Illuminate и класс контроллера. Извините, что беспокою вас снова, но не знаете ли вы, есть ли возможность прочитать ответ json с сервера Google с помощью простого PHP-кода? Мне интересно, почему это так сложно...
Да, оставьте часть Laravel, если она не имеет отношения к вашему случаю. И отказ от него не является причиной проблемы. Можете ли вы добавить текущий код к вашему вопросу (сначала в конце), чтобы он был виден? Обычно это очень маленькая ошибка.
Я отредактировал вопрос с текущим кодом. Было бы здорово, если бы это действительно была очень маленькая ошибка :-) Еще раз большое спасибо!
НП. Обычно вы должны сначала подтвердить $result->accountDetails, прежде чем получить доступ к appLicensingVerdict. Ошибка говорит о том, что это NULL, вероятно, не определено. Возможно, сначала выполните var_dump($result) и проверьте вывод. Небольшая работа по отладке может уже пролить вам свет.
Это здорово читать. Я повторно открыл вопрос, чтобы вы могли оставить свое решение в качестве ответа (это хорошая практика в Stackoverflow). При этом резолюция не будет скрыта в комментариях. После этого дайте мне пинг здесь в комментариях, чтобы я мог взглянуть. Ваше здоровье! И снова добро пожаловать в SO.
Все готово, еще раз большое спасибо! Эта платформа потрясающая, без нее я, как непрофессионал, никогда бы не заработал ни одним из своих приложений.
Здорово это читать. Через некоторое время вы можете принять ответ (сделайте это тогда!) И проверить форматирование блока кода, которое я отредактировал, проявив немного творчества, вы можете выделить вещи, чтобы ответ было легко понять.






Также благодаря помощи hakre я смог решить проблемы, с которыми столкнулся. Код отлично работает с включенным tokenPayLoadExternal:
$appLicensingVerdict = $result->tokenPayloadExternal # <-- this
->accountDetails
->appLicensingVerdict
;
Да, неправильная область/имя/пространство имен, см. принятый ответ для полного имени класса, следите за предложением
use, ссылка: php.net/manual/en/language.namespaces.importing.php