[英]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.