2012-03-22 38 views
7

我正在構建服務器以測試所有應用內購買的Android市場。但我不認爲我正確地從應用程序發送信息。我的服務器是用PHP構建的。使用PHP進行Android Market許可響應的服務器端驗證

我的應用程序訪問的URL:

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

簽名預先用URLEncoder.encode編碼(簽名, 「UTF-8」)

我的服務器:

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

而且然後我執行驗證過程。我認爲問題來自於我將應用程序的參數傳遞給服務器的方式,因爲如果我手動複製響應和簽名並對其進行測試,那麼驗證函數會說明它們是有效的。

網址:

... &響應= { 「現時」: - 871647007848398655, 「訂單」:[{ 「訂單ID」: 「768142460571407」, 「軟件包名」:「net.xxx.aaa 」, 「的productId」: 「net.xxx.mmf.flyboys」, 「purchaseTime」:1330090436000 「purchaseState」:0 「developerPayload」: 「空戰英豪」},{ 「訂單ID」: 「203523162686707」, 「軟件包名」: 「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「:」Ace Ventura 3「 }]} & signature = EyT9IgZeq2OLRqCtabTIc5wOKARtdHUfCQAdkEqkGyi%2Bd 1qQgcfxPnvIa9VMDQqwh8rxxGPOYQKuhaEuZUJzbSain8%2FN7p41euzb1n1%2FgZkgqXlQTDn076U2AXcp1ymBFZamrwETo0gkZi4q6PZV47oR7Rk28vPU5vjs%2Bl0TN0DdlzclHuH40CkZqD1ErSMMwWGTGR6bGnJlmmhgHC2KV7Ab63i0hdgkqk5MOtkOxhjS%2B4LG1YxmJIsxhJnOcmNI7n2VKUdtn%2B0CWxO5M8m0BcfpZ9Se3sR6ZtVli2rS1KSKQPL1Td9GWPhmG4nvzZFtKCqf9Le6Meudv6iFTSw5Hg%3D%3D

Vardump

響應

串 「{ 「隨機數」: - 871647007848398655 「訂單」:[{ 「訂單ID」: 「768142460571407」, 「的packageName」: 「net.xxx.aaa」, 「的productId」: 「net.xxx.mmf.flyboys」, 「purchaseTime」:1 330090436000, 「purchaseState」:0 「developerPayload」: 「空戰英豪」},{ 「訂單ID」: 「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」 ... (長度= 617)

簽名

字符串 'EyT9IgZeq2OLRqCtabTIc5wOKARtdHUfCQAdkEqkGyi d1qQgcfxPnvIa9VMDQqwh8rxxGPOYQKuhaEuZUJzbSain8/N7p41euzb1n1/gZkgqXlQTDn076U2AXcp1ymBFZamrwETo0gkZi4q6PZV47oR7Rk28vPU5vjs l0TN0DdlzclHuH40CkZqD1ErSMMwWGTGR6bGnJlmmhgHC2KV7Ab63i0hdgkqk5MOtkOxhjS 4LG1YxmJIsxhJnOcmNI7n2VKUdtn 0CWxO5M8m0BcfpZ9Se3sR6ZtVli2rS1KSKQPL1Td9GWPhmG4nvzZFtKCqf9Le6Meudv6iFTSw5Hg ==' (長度= 344)

+0

運行一些測試數據並給出一個輸入數據的例子,你的應用程序發佈到的完整URL以及服務器收到它的'$ response'和'$ signature'的'var_dump()'。編碼/解碼可能正在消耗數據。 – 2012-03-22 15:21:27

+0

我不認爲問題與響應有關。因爲我手動匹配來自$ _GET的響應,並且json和服務器接收到相同的響應。所以我認爲問題與簽名有關... – Adelino 2012-03-22 15:44:39

+0

我還注意到,服務器獲取的簽名有一些空格,但即使我剪掉了這些空格,它仍然與簽名不匹配。 – Adelino 2012-03-22 15:48:05

回答

1

當使用URL編碼PHP將自動譯碼數據,因此,如果您重解碼它它會打破一些東西,我以前

URL編碼是在一個字符串的瀏覽器,這樣的東西&有這個問題雖然發送GET不會爲你的代碼htmlspecialchars(urldecode($_GET["signature"]));應該htmlspecialchars($_GET["signature"]);

我知道這已經被評論回答倒是回答,讓Google在GET作爲新的參數

所以