尝试在服务器端验证配方时出错:iOS收据验证错误21002

时间:2019-06-28 19:03:08

标签: ios swift in-app-purchase swiftystorekit

我使用 SwiftyStoreKit 在我的应用程序中设置了InAppPurchase,并且我试图验证我的收据。 为此,我将其提取并发送给Apple。

我知道那不是正确的方法,而只是测试。如果我无法正常工作,请在服务器端进行操作。无论如何,问题在于响应始终是 21002 ,据苹果公司称,这意味着:收据数据属性中的数据格式错误或丢失。 但是当我使用SwiftStore方法验证收据时,它就可以工作。

这是我用来提取收据并将其发送给苹果的代码(注意:CarregaDados.callMethodJson只是一个内部带有Alamofire调用的函数)

SwiftyStoreKit.fetchReceipt(forceRefresh: true) { result in
            switch result {
            case .success(let receiptData):
                let encryptedReceipt = receiptData.base64EncodedString(options: [])
                let parametros = ["receipt-data" : encryptedReceipt,
                                  "password" : "XXXXXX",
                                  "exclude-old-transactions" : true] as [String : Any]
                CarregaDados.callMethodJson(.post, parametros: parametros, 
                             url: "https://sandbox.itunes.apple.com/verifyReceipt", 
                             nomeCache: "", onCompletion: { (response) in
                    print(response)
                })

            case .error(let error):
                print("IAP: ERROR: \(error)")
            }
        }

这总是返回 21002 。但是,当我使用SwiftyStoreKit检查它时,它会工作并返回我所需的所有信息:

let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "XXXXXX")
SwiftyStoreKit.verifyReceipt(using: appleValidator, forceRefresh: false) { result in
    switch result {
    case .success(let receipt):
        print("Verify receipt success: \(receipt)")
    case .error(let error):
        print("Verify receipt failed: \(error)")
    }
}

所以我不知道出了什么问题。

0 个答案:

没有答案