[苹果开发,内购问题] 十月二号,我的后台统计某 iap 数量是 20,苹果 ITC 后台 Sales and Trends 给出来的只有 5,少了 15 条,会是神马情况?

2014-10-08 20:46:22 +08:00
 xap
我的后台有去苹果验证服务器校验,校验成功后,再写入MySQL的

有人说是黑卡。。难道黑卡也能通过苹果服务器的校验?



校验代码如下:
{code}
//服务器二次验证代码
function getReceiptData($receipt, $isSandbox = false)
{
if ($isSandbox) {
$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';
}
else {
$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';
}

$postData = json_encode(
array('receipt-data' => $receipt)
);

$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //这两行一定要加,不加会报SSL 错误
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //这两行一定要加,不加会报SSL 错误

$response = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch);
//判断时候出错,抛出异常
if ($errno != 0) {
throw new Exception($errmsg, $errno);
}

$data = json_decode($response);
//判断返回的数据是否是对象
if (!is_object($data)) {
throw new Exception('Invalid response data');
}
//判断购买时候成功
if (!isset($data->status) || $data->status != 0) {
throw new Exception('Invalid receipt');
}

//返回产品的信息
return array(
'quantity' => $data->receipt->quantity,
'product_id' => $data->receipt->product_id,
'transaction_id' => $data->receipt->transaction_id,
'purchase_date' => $data->receipt->purchase_date,
// 'app_item_id' => $data->receipt->app_item_id,
'bid' => $data->receipt->bid,
'bvrs' => $data->receipt->bvrs
);
}
{code}
4256 次点击
所在节点    iDev
6 条回复
zongwan
2014-10-08 20:51:17 +08:00
可能是淘宝 帮助购买
然后 电邮 取消订单
zongwan
2014-10-08 20:53:30 +08:00
一般查下货币种类 就有谱了
xap
2014-10-08 20:53:51 +08:00
@zongwan 有检查 Sales and Trends 里没发现取消的订单
仅在10-6的日报里发现units有条-1的,是另外一个iap的订单 —— 这应该是取消订单的记录吧?
xap
2014-10-10 14:23:14 +08:00
把 response 记录下来分析

嘛德发棵!
有了一个惊人的发现

{
"receipt":{"original_purchase_date_pst":"2012-07-12 05:54:35 America/Los_Angeles", "purchase_date_ms":"1342097675882", "original_transaction_id":"170000029449420", "original_purchase_date_ms":"1342097675882", "app_item_id":"450542233", "transaction_id":"170000029449420", "quantity":"1", "bvrs":"1.4", "version_external_identifier":"9051236", "bid":"com.zeptolab.ctrexperiments", "product_id":"com.zeptolab.ctrbonus.superpower1", "purchase_date":"2012-07-12 12:54:35 Etc/GMT", "purchase_date_pst":"2012-07-12 05:54:35 America/Los_Angeles", "original_purchase_date":"2012-07-12 12:54:35 Etc/GMT", "item_id":"534185042"}, "status":0}




肿么是2012年7月的数据?
再仔细一看
product_id也不是我的吖!
bid也不是我的吖!

我勒个去
居然是这样的

赶紧在上面那个函数的代码里增加这两个值的校验……


这些人太坏了,真黑!
gamexg
2014-10-10 19:40:29 +08:00
还有这个玩法啊。
xap
2014-10-10 20:15:34 +08:00
@gamexg 是吖,太崩溃了
检查了一下paydata
发现上线以来,共110条内购,有40条都是这个重复支付的……

于是再增加了一个检查:paydata是否重复
之前只检查payid重复是不够的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/137684

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX