API Google PlayIntegrity - проверка токена через PHP

Я не профессиональный разработчик 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.....

?>

Любая помощь приветствуется! Большое спасибо!

Да, неправильная область/имя/пространство имен, см. принятый ответ для полного имени класса, следите за предложением use, ссылка: php.net/manual/en/language.namespaces.importing.php

hakre 18.12.2022 13:56

Хакре спасибо большое! К сожалению, я не могу заставить работать принятый ответ: HTTP ERROR 500. Нельзя ли это как-то сделать с /vendor/autoload.php? Вот как это работало для проверки покупок в приложении, и мне не нужно пространство имен или предложение использования в моем исходном коде.

lukey2000 19.12.2022 08:57

Конечно, с этим покончено. Но есть пробел: нужно правильное имя класса. Только если вы соберете рабочую конфигурацию автозагрузки с правильным именем класса - тогда и только тогда - классы будут найдены. Сравните с руководством по PHP как для автозагрузки, так и для главы о пространстве имен.

hakre 19.12.2022 09:01

Связанный принятый ответ содержит такую ​​конфигурацию автозагрузки и имени класса, которая работает. Сравните в свою пользу. У вас есть только ошибка class-not-found.

hakre 19.12.2022 09:05

Будет сделано, еще раз большое спасибо за ваши супер быстрые ответы :-)

lukey2000 19.12.2022 09:19

Теперь класс найден, и запрос, похоже, выполняется без каких-либо проблем, но теперь у меня возникает эта проблема, когда я повторяю вердикт из $result: «Предупреждение: попытка прочитать свойство« appLicensingVerdict »для нуля». Я не использую lavarel, поэтому я попробовал, не включая использование Illuminate и класс контроллера. Извините, что беспокою вас снова, но не знаете ли вы, есть ли возможность прочитать ответ json с сервера Google с помощью простого PHP-кода? Мне интересно, почему это так сложно...

lukey2000 19.12.2022 14:11

Да, оставьте часть Laravel, если она не имеет отношения к вашему случаю. И отказ от него не является причиной проблемы. Можете ли вы добавить текущий код к вашему вопросу (сначала в конце), чтобы он был виден? Обычно это очень маленькая ошибка.

hakre 19.12.2022 14:32

Я отредактировал вопрос с текущим кодом. Было бы здорово, если бы это действительно была очень маленькая ошибка :-) Еще раз большое спасибо!

lukey2000 19.12.2022 15:47

НП. Обычно вы должны сначала подтвердить $result->accountDetails, прежде чем получить доступ к appLicensingVerdict. Ошибка говорит о том, что это NULL, вероятно, не определено. Возможно, сначала выполните var_dump($result) и проверьте вывод. Небольшая работа по отладке может уже пролить вам свет.

hakre 19.12.2022 19:16

Это здорово читать. Я повторно открыл вопрос, чтобы вы могли оставить свое решение в качестве ответа (это хорошая практика в Stackoverflow). При этом резолюция не будет скрыта в комментариях. После этого дайте мне пинг здесь в комментариях, чтобы я мог взглянуть. Ваше здоровье! И снова добро пожаловать в SO.

hakre 21.12.2022 15:43

Все готово, еще раз большое спасибо! Эта платформа потрясающая, без нее я, как непрофессионал, никогда бы не заработал ни одним из своих приложений.

lukey2000 21.12.2022 21:08

Здорово это читать. Через некоторое время вы можете принять ответ (сделайте это тогда!) И проверить форматирование блока кода, которое я отредактировал, проявив немного творчества, вы можете выделить вещи, чтобы ответ было легко понять.

hakre 21.12.2022 22:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
12
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Также благодаря помощи hakre я смог решить проблемы, с которыми столкнулся. Код отлично работает с включенным tokenPayLoadExternal:

$appLicensingVerdict = $result->tokenPayloadExternal # <-- this
                              ->accountDetails
                              ->appLicensingVerdict
    ;

Другие вопросы по теме