为什么在购买苹果APP时找不到服务器端的交易记录? [英] Why could not find transaction record on the server side in Apple app purchase?
本文介绍了为什么在购买苹果APP时找不到服务器端的交易记录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在我的Ffltter项目中开发一个APP购买,现在我要验证我的购买。在客户端,我传递此参数:
public class ReceiptVerifyRequest implements Serializable {
@ApiModelProperty(value = "product ID")
@NonNull
private String productId;
@ApiModelProperty(value = "receipt")
@NonNull
private String receipt;
@ApiModelProperty(value = "transaction ID")
@NonNull
private String transactionId;
}
因为我现在是订阅产品和自动续费(订阅产品),所以我从服务器端的latest_receipt_info
列表字段中选择记录,如下所示:
private void savePayTransactionRecord(JSONArray latestReceiptInfo, IapProduct iapProduct, ReceiptVerifyRequest request) {
if (ApplePayProductType.SUBSCRIPTION.getKey().equals(iapProduct.getProductType())) {
if (latestReceiptInfo == null || latestReceiptInfo.size() == 0) {
return;
}
for (Object item : latestReceiptInfo) {
if (item instanceof JSONObject) {
JSONObject jsonObjectItem = (JSONObject) item;
if (request.getTransactionId().equals(jsonObjectItem.getString("transaction_id"))) {
mapFieldAndSave(jsonObjectItem);
}
}
}
}
}
令我惊讶的是,通过使用事务ID进行匹配,我找不到任何订单。为什么会发生这种事?我做错什么了吗?我在按照苹果说明书的指南操作。我应该怎么做才能把它修好呢?造成这种情况的原因可能是什么?顺便说一下,客户端的交易标识是从购买的标识中获取的,我读了Ffltter插件的应用内购买源代码,购买的标识是从交易标识中提取的,我想交易标识就是交易标识。
现在我在沙盒里,我的订阅产品是30天。在沙盒中,是3分钟,然后服务器每3分钟自动续订一次。很长时间以来,最新生成的回执超过了LATEST_RECEIVE_INFO大小的最大值。因此找不到交易ID。这逻辑对吗?
那么latest_receipt_info
的最大大小是多少?但问题是:我所有的验证事务都在服务器LATEST_RECEIVE_INFO中找不到,这很奇怪。我已尝试使用web_order_line_item_id
:
private void savePayTransactionRecord(JSONArray latestReceiptInfo, IapProduct iapProduct, ReceiptVerifyRequest request) {
if (ApplePayProductType.SUBSCRIPTION.getKey().equals(iapProduct.getProductType())) {
if (latestReceiptInfo == null || latestReceiptInfo.size() == 0) {
return;
}
for (Object item : latestReceiptInfo) {
if (item instanceof JSONObject) {
JSONObject jsonObjectItem = (JSONObject) item;
if (request.getTransactionId().equals(jsonObjectItem.getString("web_order_line_item_id"))) {
mapFieldAndSave(jsonObjectItem);
}
}
}
}
}
也不匹配。
实际上,每次客户端向服务器请求时,事务ID都会更改。
推荐答案
事务标识符过去很有用,可以确保单个收据不会被黑客攻击、复制、安装在许多设备上并用于获取多个IAP。当苹果对原始购买、免费回购和RestoreCompletedTransaction使用相同的交易ID时,这个保护系统就崩溃了。
这句话很适合放在文档中。将为一些开发人员节省很多时间。发件人here。
这篇关于为什么在购买苹果APP时找不到服务器端的交易记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文