Проверка на стороне сервера ответов на лицензирование на Android Market с помощью PHP

Я строю сервер для тестирования всех моих покупок на Android-рынке в приложении. Но я не думаю, что правильно отправляю информацию из приложения. Мой сервер построен на PHP.

Мое приложение получает доступ к URL:

...&response={...json...}&signature={...signature...} 

Подпись предварительно закодирована с помощью URLEncoder.encode (подпись, «UTF-8»)

Мой сервер:

 $response = $_GET["response"]; $signature = htmlspecialchars(urldecode($_GET["signature"])); 

И затем я выполняю процесс проверки. Я думаю, проблема связана с тем, что я передаю аргументы из приложения на сервер, потому что, если я копирую ответ и подпись вручную и проверяю их, функция проверки говорит, что они действительны.

URL:

… и ответ = { "одноразовое значение": – 871647007848398655, "заказы": [{ "OrderId": "768142460571407", "PACKAGENAME": "net.xxx.aaa", "ProductID": "net.xxx.mmf. Flyboys " "purchaseTime": 1330090436000, "purchaseState": 0, "developerPayload": "Flyboys"}, { "OrderId": "203523162686707", "PackageName": "net.xxx.aaa", "ProductID":" Net.xxx.mmf.16blocks "," purchaseTime ": 1330511533000," purchaseState ": 0," DeveloperPayload ":" 16 Blocks "}, {" orderId ":" 328483664834399 "," packageName ":" net.xxx.aaa », "ProductID": "net.xxx.mmf.aceventura3", "purchaseTime": 1331037005000, "purchaseState": 0, "developerPayload": "Эйс Вентура 3"}]} & подпись = EyT9IgZeq2OLRqCtabTIc5wOKARtdHUfCQAdkEqkGyi% 2Bd1qQgcfxPnvIa9VMDQqwh8rxxGPOYQKuhaEuZUJzbSain8% 2FN7p41euzb1n1% 2FgZkgqXlQTDn076U2AXcp1ymBFZamrwETo0gkZi4q6PZV47oR7Rk28vPU5vjs% 2Bl0TN0DdlzclHuH40CkZqD1ErSMMwWGTGR6bGnJlmmhgHC2KV7Ab63i0hdgkqk5MOtkOxhjS% 2B4LG1YxmJIsxhJnOcmNI7n2VKUdtn% 2B0CWxO5M8m0BcfpZ9Se3sR6ZtVli2rS1KSKQPL1Td9GWPhmG4nvzZFtKCqf9Le6Meudv6iFTSw5Hg% 3D% 3D

Vardump

отклик

String '{"nonce": – 871647007848398655, "orders": [{"orderId": "768142460571407", "packageName": "net.xxx.aaa", "productId": "net.xxx.mmf.flyboys", " "purchaseTime": 1330090436000, "purchaseState": 0, "developerPayload": "Flyboys"}, { "OrderId": "203523162686707", "PackageName": "net.xxx.aaa", "ProductID": "net.xxx . Msgstr "блокировки", "purchaseTime": 1330511533000, "purchaseState": 0, "DeveloperPayload": "16 блоков"}, {"orderId": "328483664834399", "packageName": "net.xxx.aaa", " ProductId ":" net.xxx "… (длина = 617)

Подпись

Строка 'EyT9IgZeq2OLRqCtabTIc5wOKARtdHUfCQAdkEqkGyi d1qQgcfxPnvIa9VMDQqwh8rxxGPOYQKuhaEuZUJzbSain8 / N7p41euzb1n1 / gZkgqXlQTDn076U2AXcp1ymBFZamrwETo0gkZi4q6PZV47oR7Rk28vPU5vjs l0TN0DdlzclHuH40CkZqD1ErSMMwWGTGR6bGnJlmmhgHC2KV7Ab63i0hdgkqk5MOtkOxhjS 4LG1YxmJIsxhJnOcmNI7n2VKUdtn 0CWxO5M8m0BcfpZ9Se3sR6ZtVli2rS1KSKQPL1Td9GWPhmG4nvzZFtKCqf9Le6Meudv6iFTSw5Hg ==' (длина = 344)

При использовании URL Encode php будет автоматически декодировать данные, поэтому, если ваше повторное декодирование его сломает что-то, у меня была эта проблема до

URL-кодировка предназначена для браузера, поэтому такие вещи, как & в строке, отправленной, хотя get не действуют как новый параметр в GET

Поэтому для вас код htmlspecialchars(urldecode($_GET["signature"])); Должен быть htmlspecialchars($_GET["signature"]);

Я знаю, что на это ответили комментарии, но добавлен ответ для гуглеров