我们已经在Android / iOS应用中实现了应用内购买,并且我们的PHP后端对收据进行了验证。我们正在一次性购买和订阅。
用于验证iOS购买的代码基于How to verify Apple IAP receipt using php?。收到JSON响应后,我的代码如下:
$response = json_decode($json_result, true);
$index = array_search($transaction['id'], array_column($response['receipt']['in_app'], 'transaction_id'));
if ($index === false) {
// report failed verification
}
$order = $response['receipt']['in_app'][$index];
$transaction['id']
是从客户端收到的交易ID。
我们已经进行了几周的内部编码和测试,并且数组$response['receipt']['in_app']
已经越来越大,其中包含230个项。这些是我们创建的所有测试订阅(product_id
属性是我们的订阅产品),其中大多数已过期。
这似乎是一种荒谬的方法。当它投入生产时,我们将有成千上万的订阅,我们真的需要下载这个庞大的列表并每次进行搜索吗?是否有API可以检索特定交易ID的信息?这就是我们针对Android购买所做的事情。
我是否想得太多?上面的问题具有指向代码示例的链接,并且它们从未为事务ID搜索receipt
数组-如果对verifyReceipt
API的调用成功,则认为它已通过验证。
但是我还需要找到$order['product_id']
中的产品ID,因此我知道他们购买了哪种产品并将其存入他们的帐户。我无法从客户端获得该证书,因为它可能是伪造的,它必须来自验证API。
到目前为止,我们只验证来自Sandbox App Store API的购买。如此庞大的清单是否会因此而产生,并且在生产中会更好?