簡體   English   中英

使用PHP驗證Android Market許可響應的服務器端

[英]Server-side verification of Android Market Licensing responses with PHP

我正在構建一個服務器來測試我所有的Android應用內購買市場。 但我認為我沒有正確地從應用程序發送信息。 我的服務器是用PHP構建的。

我的應用訪問網址:

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

簽名先前使用URLEncoder.encode編碼(簽名,“UTF-8”)

我的服務器:

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

然后我執行驗證過程。 我認為問題來自於我將參數從應用程序傳遞到服務器的方式,因為如果我手動復制響應和簽名並測試它們,驗證函數會說它們是有效的。

網址:

...&響應= { “隨機數”: - 871647007848398655 “訂單”:[{ “訂單ID”: “768142460571407”, “的packageName”: “net.xxx.aaa”, “的productId”:“net.xxx.mmf。空戰英豪 “ ”purchaseTime“:1330090436000 ”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.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”: “空戰英豪”},{ “訂單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)

當使用URL Encode時,php將自動解碼數據,所以如果你重新解碼它會破壞某些東西,我之前遇到過這個問題

URL編碼是針對瀏覽器的,因此通過get發送的字符串中的&不會在GET中充當新參數

所以對你來說代碼htmlspecialchars(urldecode($_GET["signature"])); 應該是htmlspecialchars($_GET["signature"]);

我知道這已被評論回答,但為Google員工添加了答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM