2012-03-22 41 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作为新的参数

所以