您可以在提交应用程序或相关 IAP 之前使用 App Store 沙盒测试(特别是verifyReceipt)吗?

Posted

技术标签:

【中文标题】您可以在提交应用程序或相关 IAP 之前使用 App Store 沙盒测试(特别是verifyReceipt)吗?【英文标题】:Can you use App Store Sandbox testing (verifyReceipt specifically) before submitting the app or the related IAPs? 【发布时间】:2021-03-30 08:17:20 【问题描述】:

我一直在尝试使用verifyReceipt 端点来验证应用内购买交易,但没有成功。

这就是我的做法。

1.ios中读取收据数据(这里是复制粘贴from Apple's documentation):

if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
    FileManager.default.fileExists(atPath: appStoreReceiptURL.path) 

    do 
        let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)
        print(receiptData)

        let receiptString = receiptData.base64EncodedString(options: [])

        // sendReceiptToBackEnd(receiptString)
    
    catch  print("Couldn't read receipt data with error: " + error.localizedDescription) 

2. 在后台,我关注了来自 Apple 的 this advice:

作为最佳实践,始终首先调用 verifyReceipt 的生产 URL,如果收到 21007 状态代码,则继续使用沙盒 URL 进行验证。

所以首先我试试这个(python 代码):

data = 
    'receipt-data': receipt_string, # this is what we get from the frontend
    'password': settings.APP_STORE_SHARED_SECRET

url = 'https://buy.itunes.apple.com/verifyReceipt'
response = requests.post(url, json=data)
response_data = response.json()
status = response_data['status']

这里的状态是21007,根据上面的建议,这是预期的。那我试试沙盒:

url = 'https://sandbox.itunes.apple.com/verifyReceipt'
response = requests.post(url, json=data)
response_data = response.json()
status = response_data['status']

我收到了21002 - 这意味着我发送的内容可能有问题。

最初我试图测试这个using Xcode locally,但后来我发现verifyReceipt 不能使用这个功能,因为应用程序没有被App Store 签名。所以我删除了本地配置并将方案中的 StoreKit 配置设置回none,并验证该应用正在使用 App Store Connect,因为它正在获取我在价格中所做的任何更改。

我不知道如何进一步调试,所以我想知道这可能是因为应用程序和 IAP 尚未提交吗?目前,应用程序处于“准备提交”状态,IAP 处于“准备提交”状态。或者也许我还缺少其他东西?

编辑:我的问题的答案是“是的,你可以”。我复制并粘贴了 json 并使用 Postman 手动发送它,它工作正常,所以后端发生了一些事情。我将问题留作参考,但如果有人建议删除,请告诉我。

【问题讨论】:

【参考方案1】:

我看到了您的编辑,但正如后续代码 21002 是“格式错误的正文”响应(或者理论上是 Apple 服务器问题,但我只在修改收据数据时才看到它)。

您可以在此处查看代码和含义的完整列表:

https://developer.apple.com/documentation/appstorereceipts/status

顺便说一句,当您构建我们的服务器来处理 iTunes 响应时,您可能会发现本指南对于处理服务器上的收据很有用:

https://www.namiml.com/blog/app-store-verify-receipt-definitive-guide

【讨论】:

谢谢 - 我的问题是我在工作到很晚时引入的一个愚蠢且难以发现的错误 :)

以上是关于您可以在提交应用程序或相关 IAP 之前使用 App Store 沙盒测试(特别是verifyReceipt)吗?的主要内容,如果未能解决你的问题,请参考以下文章

Aruba IAP配置remote ap(RAP)步骤

拒绝 IAP - iTunes Connect

如何在 iTunesConnect 上创建动态 IAP?

苹果的IAP 内置付费

我可以在审核税务信息时提交包含 IAP 和 iAds 的应用程序吗?

单片机的IAP是啥意思?