Проверка на стороне сервера ответов Android Market Licensing с использованием PHP - PullRequest
7 голосов
/ 22 марта 2012

Я создаю сервер для проверки всех моих покупок в магазине Android Market. Но я не думаю, что отправляю информацию из приложения правильно. Мой сервер построен на 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 блоков "}, {" 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

Ответ

строка { "Нонс": - 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 Блоки "}, {" OrderId ":" 328483664834399" , "PACKAGENAME": "net.xxx.aaa", "ProductID": "net.xxx» ... (Длина = 617)

Подпись

string 'EyT9IgZeq2OLRqCtabTIc5wOKARtdHUfCQAdkEqkGyi d1qQgcfxPnvIa9VMDQqwh8rxxGPOYQKuhaEuZUJzbSain8 / N7p41euzb1n1 / gZkgqXlQTDn076U2AXcp1ymBFZamrwETo0gkZi4q6PZV47oR7Rk28vPU5vjs l0TN0DdlzclHuH40CkZqD1ErSMMwWGTGR6bGnJlmmhgHC2KV7Ab63i0hdgkqk5MOtkOxhjS 4LG1YxmJIsxhJnOcmNI7n2VKUdtn 0CWxO5M8m0BcfpZ9Se3sR6ZtVli2rS1KSKQPL1Td9GWPhmG4nvzZFtKCqf9Le6Meudv6iFTSw5Hg ==» (Длина = 344)

1 Ответ

1 голос
/ 07 апреля 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...