В моем приложении установлено приложение InAppPurchase с использованием SwiftyStoreKit , и я пытаюсь подтвердить свою квитанцию.
Для этого я извлекаю его и отправляю в Apple.
Я знаю, что это не правильный способ сделать это, но я просто тестирую. Если я заставлю это работать плохо, сделайте это на стороне сервера. В любом случае, проблема в том, что ответ всегда 21002 , что, по мнению Apple, означает: Данные в свойстве квитанции были искажены или отсутствуют.
Но когда я проверяю свою квитанцию, используя метод 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)")
}
}
Так что я не знаю, в чем проблема.